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 */ } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits