[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