[Gc] Don't use __builtin_unwind_init() with clang
Niklas Therning
niklas at therning.org
Tue Apr 17 00:00:30 PDT 2012
Hi,
I've had some problems with GC allocated memory being collected even
though it is referenced by a CPU register. I'm using clang on mac os x:
$ clang -v
Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn)
Target: x86_64-apple-darwin11.2.0
Thread model: posix
This is the clang that comes with XCode 4.2.1.
I've seen this problem when targeting both x86_64 and arm (iOS). It
turns out that the __builtin_unwind_init() function on this clang
version is a noop. It does nothing. I've disassembled the mach_dep.o
generated by clang for both x86_64 and arm with and without the call to
__builtin_unwind_init(). The assembly is identical.
Here's a patch that fixes this problem for me. It prevents
HAVE_BUILTIN_UNWIND_INIT to be set if the compiler is clang:
diff -rupN bdwgc-20120327.orig/include/private/gcconfig.h
bdwgc-20120327/include/private/gcconfig.h
--- bdwgc-20120327.orig/include/private/gcconfig.h 2012-03-27
16:11:13.000000000 +0200
+++ bdwgc-20120327/include/private/gcconfig.h 2012-04-16
13:59:27.000000000 +0200
@@ -700,7 +700,8 @@
/* __builtin_unwind_init() to push the relevant registers onto the
stack. */
# if defined(__GNUC__) && ((__GNUC__ >= 3) \
|| (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) \
- && !defined(__INTEL_COMPILER) && !defined(__PATHCC__)
+ && !defined(__INTEL_COMPILER) && !defined(__PATHCC__) \
+ && !defined(__clang__)
# define HAVE_BUILTIN_UNWIND_INIT
# endif
More information about the Gc
mailing list