Hello Everyone. It seems, that setjmp\logjmp support in CBackend is not good, since codegeneration depends on *build* platform, not target. Attached patch should solve the problem. However, I'm not sure, whether it's correct and won't break nightly testers on Darwin (that's why, I haven't commited it already).
-- With best regards, Anton Korobeynikov. Faculty of Mathematics & Mechanics, Saint Petersburg State University.
diff -r f7b4f57b400c lib/Target/CBackend/Writer.cpp --- a/lib/Target/CBackend/Writer.cpp Wed Dec 06 13:35:10 2006 +0000 +++ b/lib/Target/CBackend/Writer.cpp Sat Dec 09 12:13:58 2006 +0300 @@ -1138,6 +1138,8 @@ static void generateCompilerSpecificCode << "#elif defined(__APPLE__)\n" << "extern void *__builtin_alloca(unsigned long);\n" << "#define alloca(x) __builtin_alloca(x)\n" + << "#define longjmp(x) _longjmp(x)\n" + << "#define setjmp(x) _setjmp(x)\n" << "#elif defined(__sun__)\n" << "#if defined(__sparcv9)\n" << "extern void *__builtin_alloca(unsigned long);\n" @@ -2143,17 +2145,11 @@ void CWriter::visitCallInst(CallInst &I) Out << ')'; return; case Intrinsic::setjmp: -#if defined(HAVE__SETJMP) && defined(HAVE__LONGJMP) - Out << "_"; // Use _setjmp on systems that support it! -#endif Out << "setjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ')'; return; case Intrinsic::longjmp: -#if defined(HAVE__SETJMP) && defined(HAVE__LONGJMP) - Out << "_"; // Use _longjmp on systems that support it! -#endif Out << "longjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ", "; diff -r f7b4f57b400c lib/Target/X86/X86ISelLowering.cpp --- a/lib/Target/X86/X86ISelLowering.cpp Wed Dec 06 13:35:10 2006 +0000 +++ b/lib/Target/X86/X86ISelLowering.cpp Sat Dec 09 12:21:30 2006 +0300 @@ -54,7 +54,7 @@ X86TargetLowering::X86TargetLowering(Tar setShiftAmountFlavor(Mask); // shl X, 32 == shl X, 0 setStackPointerRegisterToSaveRestore(X86StackPtr); - if (!Subtarget->isTargetDarwin()) + if (!(Subtarget->isTargetDarwin() || Subtarget->isTargetCygwin())) // Darwin should use _setjmp/_longjmp instead of setjmp/longjmp. setUseUnderscoreSetJmpLongJmp(true);
_______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits