[llvm-commits] [llvm-gcc-4.0] r45009 - in /llvm-gcc-4.0/trunk/gcc: config/darwin.h except.c llvm-convert.cpp unwind-dw2.c

Dale Johannesen dalej at apple.com
Thu Dec 13 10:32:11 PST 2007


Author: johannes
Date: Thu Dec 13 12:32:10 2007
New Revision: 45009

URL: http://llvm.org/viewvc/llvm-project?rev=45009&view=rev
Log:
Make exceptions work on Darwin


Modified:
    llvm-gcc-4.0/trunk/gcc/config/darwin.h
    llvm-gcc-4.0/trunk/gcc/except.c
    llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
    llvm-gcc-4.0/trunk/gcc/unwind-dw2.c

Modified: llvm-gcc-4.0/trunk/gcc/config/darwin.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/config/darwin.h?rev=45009&r1=45008&r2=45009&view=diff

==============================================================================
--- llvm-gcc-4.0/trunk/gcc/config/darwin.h (original)
+++ llvm-gcc-4.0/trunk/gcc/config/darwin.h Thu Dec 13 12:32:10 2007
@@ -1748,6 +1748,10 @@
   else if (!MACHO_DYNAMIC_NO_PIC_P)                  \
     argvec.push_back ("--relocation-model=static")
 #endif /* defined (TARGET_386) */
+
+/* On Darwin _Unwind_Resume is sensitive to the dynamic stack layout; we
+   use _Unwind_Resume_or_Rethrow instead.  */
+#define LLVM_STACKSENSITIVE_UNWIND_RESUME 1
 #endif
 /* APPLE LOCAL end LLVM */
 

Modified: llvm-gcc-4.0/trunk/gcc/except.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/except.c?rev=45009&r1=45008&r2=45009&view=diff

==============================================================================
--- llvm-gcc-4.0/trunk/gcc/except.c (original)
+++ llvm-gcc-4.0/trunk/gcc/except.c Thu Dec 13 12:32:10 2007
@@ -3510,9 +3510,13 @@
 default_init_unwind_resume_libfunc (void)
 {
   /* The default c++ routines aren't actually c++ specific, so use those.  */
-  unwind_resume_libfunc =
-    init_one_libfunc ( USING_SJLJ_EXCEPTIONS ? "_Unwind_SjLj_Resume"
-					     : "_Unwind_Resume");
+  unwind_resume_libfunc = init_one_libfunc ( USING_SJLJ_EXCEPTIONS ?
+                                             "_Unwind_SjLj_Resume"
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+                                             : "_Unwind_Resume_or_Rethrow");
+#else
+                                             : "_Unwind_Resume");
+#endif
 }
 /* APPLE LOCAL end LLVM */
 

Modified: llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp?rev=45009&r1=45008&r2=45009&view=diff

==============================================================================
--- llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp (original)
+++ llvm-gcc-4.0/trunk/gcc/llvm-convert.cpp Thu Dec 13 12:32:10 2007
@@ -2178,7 +2178,12 @@
                                    NULL);
 
   FuncUnwindResume =
-    TheModule->getOrInsertFunction("_Unwind_Resume",
+    TheModule->getOrInsertFunction(
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+                                   "_Unwind_Resume_or_Rethrow",
+#else
+                                   "_Unwind_Resume",
+#endif
                                    Type::getPrimitiveType(Type::VoidTyID),
                                    PointerType::get(Type::Int8Ty),
                                    NULL);

Modified: llvm-gcc-4.0/trunk/gcc/unwind-dw2.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.0/trunk/gcc/unwind-dw2.c?rev=45009&r1=45008&r2=45009&view=diff

==============================================================================
--- llvm-gcc-4.0/trunk/gcc/unwind-dw2.c (original)
+++ llvm-gcc-4.0/trunk/gcc/unwind-dw2.c Thu Dec 13 12:32:10 2007
@@ -1318,7 +1318,14 @@
 static inline _Unwind_Ptr
 uw_identify_context (struct _Unwind_Context *context)
 {
+/* LLVM LOCAL begin
+   This change is needed to match Apple's installed libgcc. */
+#ifdef LLVM_STACKSENSITIVE_UNWIND_RESUME
+  return _Unwind_GetCFA (context);
+#else
   return _Unwind_GetIP (context);
+#endif
+/* LLVM LOCAL end */
 }
 
 





More information about the llvm-commits mailing list