aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/CBackend/CBackend.cpp
diff options
context:
space:
mode:
authorJohn Criswell <criswell@uiuc.edu>2003-07-31 15:11:08 +0000
committerJohn Criswell <criswell@uiuc.edu>2003-07-31 15:11:08 +0000
commit506dad06640177ed1268a7fea84f1a8eb6135faa (patch)
treecf11cc3387e13e4ae38412d4179ab9bcf6024dcb /lib/Target/CBackend/CBackend.cpp
parentbe08bb399a67525184378782a53347dfb76f0725 (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.cpp18
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;
}
}