diff options
author | John Criswell <criswell@uiuc.edu> | 2003-07-31 15:11:08 +0000 |
---|---|---|
committer | John Criswell <criswell@uiuc.edu> | 2003-07-31 15:11:08 +0000 |
commit | 506dad06640177ed1268a7fea84f1a8eb6135faa (patch) | |
tree | cf11cc3387e13e4ae38412d4179ab9bcf6024dcb /lib/Target/CBackend/CBackend.cpp | |
parent | be08bb399a67525184378782a53347dfb76f0725 (diff) |
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
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r-- | lib/Target/CBackend/CBackend.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 88cf718dae..ad242c77c4 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 <stdarg.h>\n"; +#ifdef HAVE_JUMP Out << "#include <setjmp.h>\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; } } |