From 506dad06640177ed1268a7fea84f1a8eb6135faa Mon Sep 17 00:00:00 2001 From: John Criswell Date: Thu, 31 Jul 2003 15:11:08 +0000 Subject: [PATCH] Modified the code so that it generates (0) for setjmp() and abort() for longjmp() (and does not include setjmp.h). This is to fix some problems on Sparc while non-local jumps are still unimplemented. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7449 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/CBackend/CBackend.cpp | 18 ++++++++++++++++++ lib/Target/CBackend/Writer.cpp | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 88cf718dae5..ad242c77c46 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -570,7 +570,9 @@ void CWriter::printModule(Module *M) { // get declaration for alloca Out << "/* Provide Declarations */\n"; Out << "#include \n"; +#ifdef HAVE_JUMP Out << "#include \n"; +#endif generateCompilerSpecificCode(Out); // Provide a definition for `bool' if not compiling with a C++ compiler. @@ -1123,16 +1125,32 @@ void CWriter::visitCallInst(CallInst &I) { return; case LLVMIntrinsic::setjmp: +#ifdef HAVE_JUMP Out << "setjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ")"; +#else + // + // For right now, we don't really support non-local jumps. So + // make setjmp() always evaluate to zero for now. + // + Out << "(0)"; +#endif return; case LLVMIntrinsic::longjmp: +#ifdef HAVE_JUMP Out << "longjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ", "; writeOperand(I.getOperand(2)); Out << ")"; +#else + // + // For right now, we don't really support non-local jumps. So + // make longjmp() abort the program. + // + Out << "abort()"; +#endif return; } } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 88cf718dae5..ad242c77c46 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -570,7 +570,9 @@ void CWriter::printModule(Module *M) { // get declaration for alloca Out << "/* Provide Declarations */\n"; Out << "#include \n"; +#ifdef HAVE_JUMP Out << "#include \n"; +#endif generateCompilerSpecificCode(Out); // Provide a definition for `bool' if not compiling with a C++ compiler. @@ -1123,16 +1125,32 @@ void CWriter::visitCallInst(CallInst &I) { return; case LLVMIntrinsic::setjmp: +#ifdef HAVE_JUMP Out << "setjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ")"; +#else + // + // For right now, we don't really support non-local jumps. So + // make setjmp() always evaluate to zero for now. + // + Out << "(0)"; +#endif return; case LLVMIntrinsic::longjmp: +#ifdef HAVE_JUMP Out << "longjmp(*(jmp_buf*)"; writeOperand(I.getOperand(1)); Out << ", "; writeOperand(I.getOperand(2)); Out << ")"; +#else + // + // For right now, we don't really support non-local jumps. So + // make longjmp() abort the program. + // + Out << "abort()"; +#endif return; } }