components/mercurial/patches/64bit-crash.patch
author Danek Duvall <danek.duvall@oracle.com>
Mon, 27 Feb 2017 16:13:00 -0800
changeset 7831 d0adeff33adb
permissions -rw-r--r--
25498304 mercurial 4.1 22749480 mercurial should deliver 64-bit modules 24415944 bundle2 prechangegroup & incoming hooks set HG_URL=push when pushing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7831
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     1
A 64-bit build results in a segfault in the parsers module (on both SPARC
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     2
and x86).  Dialing down the optimization to -xO1 eliminates the crash.
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     3
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     4
In order to only lower the optimization for the one object that needs it
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     5
and only in a 64-bit build, we do some monkeypatching of the distutils
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     6
compiler class, and replace its _compile() method with one that does that
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     7
check and replaces the original optimization level with the lower one.
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     8
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     9
This patch can be removed when we move to Studio 12.5.
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    10
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    11
--- a/setup.py	2017-02-01 08:18:58.000000000 -0800
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    12
+++ b/setup.py	2017-02-03 18:13:20.479471297 -0800
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    13
@@ -302,7 +302,18 @@
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    14
 
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    15
         return build_ext.build_extensions(self)
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    16
 
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    17
+    def my_compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    18
+        if src == "mercurial/parsers.c" and "-m64" in self.compiler.compiler_so:
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    19
+            for i, arg in enumerate(self.compiler.compiler_so):
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    20
+                if arg.startswith("-xO"):
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    21
+                    break
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    22
+            self.compiler.compiler_so[i] = "-xO1"
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    23
+        self.compiler.old_compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    24
+
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    25
     def build_extension(self, ext):
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    26
+        if not hasattr(self.compiler, "old_compile"):
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    27
+            self.compiler.old_compile = self.compiler._compile
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    28
+            self.compiler._compile = self.my_compile
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    29
         try:
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    30
             build_ext.build_extension(self, ext)
d0adeff33adb 25498304 mercurial 4.1
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    31
         except CCompilerError: