From 74030254b59dd3fcefba25c7a560fbfbde93d351 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 12 Feb 2002 15:47:23 +0000 Subject: [PATCH] Add new abort-on-exceptions flag git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1737 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/Interpreter/Execution.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index d3aa4ccbf62..0fad82964d2 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -27,6 +27,7 @@ using std::cerr; cl::Flag QuietMode ("quiet" , "Do not emit any non-program output"); cl::Alias QuietModeA("q" , "Alias for -quiet", cl::NoFlags, QuietMode); cl::Flag ArrayChecksEnabled("array-checks", "Enable array bound checks"); +cl::Flag AbortOnExceptions("abort-on-exception", "Halt execution on a machine exception"); // Create a TargetData structure to handle memory addressing and size/alignment // computations @@ -803,7 +804,7 @@ static PointerTy getElementOffset(MemAccessInst *I, ExecutionContext &SF) { << " Subscript #" << (ArgOff-I->getFirstIndexOperandNumber()) << "\n"; // Get outta here!!! - siglongjmp(SignalRecoverBuffer, -1); + siglongjmp(SignalRecoverBuffer, SIGTRAP); } Ty = ST->getElementType(); @@ -1134,9 +1135,13 @@ bool Interpreter::executeInstruction() { // if (int SigNo = sigsetjmp(SignalRecoverBuffer, 1)) { --SF.CurInst; // Back up to erroring instruction - if (SigNo != SIGINT && SigNo != -1) { + if (SigNo != SIGINT) { cout << "EXCEPTION OCCURRED [" << _sys_siglistp[SigNo] << "]:\n"; printStackTrace(); + // If -abort-on-exception was specified, terminate LLI instead of trying + // to debug it. + // + if (AbortOnExceptions) exit(1); } else if (SigNo == SIGINT) { cout << "CTRL-C Detected, execution halted.\n"; }