mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Never set any signal handlers.
Never call setjmp(), longjmp() or strsignal(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9014 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
58a6faac65
commit
235b200e6b
@ -13,9 +13,7 @@
|
||||
#include "llvm/Assembly/Writer.h"
|
||||
#include "Support/CommandLine.h"
|
||||
#include "Support/Statistic.h"
|
||||
#include <math.h> // For fmod
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <cmath> // For fmod
|
||||
|
||||
Interpreter *TheEE = 0;
|
||||
|
||||
@ -38,27 +36,6 @@ namespace {
|
||||
//
|
||||
CachedWriter CW; // Object to accelerate printing of LLVM
|
||||
|
||||
sigjmp_buf SignalRecoverBuffer;
|
||||
static bool InInstruction = false;
|
||||
|
||||
extern "C" {
|
||||
static void SigHandler(int Signal) {
|
||||
if (InInstruction)
|
||||
siglongjmp(SignalRecoverBuffer, Signal);
|
||||
}
|
||||
}
|
||||
|
||||
static void initializeSignalHandlers() {
|
||||
struct sigaction Action;
|
||||
Action.sa_handler = SigHandler;
|
||||
Action.sa_flags = SA_SIGINFO;
|
||||
sigemptyset(&Action.sa_mask);
|
||||
sigaction(SIGSEGV, &Action, 0);
|
||||
sigaction(SIGBUS, &Action, 0);
|
||||
sigaction(SIGINT, &Action, 0);
|
||||
sigaction(SIGFPE, &Action, 0);
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Value Manipulation code
|
||||
@ -120,7 +97,6 @@ static void SetValue(Value *V, GenericValue Val, ExecutionContext &SF) {
|
||||
|
||||
void Interpreter::initializeExecutionEngine() {
|
||||
TheEE = this;
|
||||
initializeSignalHandlers();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -681,8 +657,7 @@ GenericValue Interpreter::executeGEPOperation(Value *Ptr, User::op_iterator I,
|
||||
std::cerr << "Out of range memory access to element #" << Idx
|
||||
<< " of a " << AT->getNumElements() << " element array."
|
||||
<< " Subscript #" << *I << "\n";
|
||||
// Get outta here!!!
|
||||
siglongjmp(SignalRecoverBuffer, SIGTRAP);
|
||||
abort();
|
||||
}
|
||||
|
||||
Ty = ST->getElementType();
|
||||
@ -1006,17 +981,7 @@ void Interpreter::executeInstruction() {
|
||||
// Track the number of dynamic instructions executed.
|
||||
++NumDynamicInsts;
|
||||
|
||||
// Set a sigsetjmp buffer so that we can recover if an error happens during
|
||||
// instruction execution...
|
||||
//
|
||||
if (int SigNo = sigsetjmp(SignalRecoverBuffer, 1)) {
|
||||
std::cout << "EXCEPTION OCCURRED [" << strsignal(SigNo) << "]\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
InInstruction = true;
|
||||
visit(I); // Dispatch to one of the visit* methods...
|
||||
InInstruction = false;
|
||||
|
||||
// Reset the current frame location to the top of stack
|
||||
CurFrame = ECStack.size()-1;
|
||||
|
Loading…
Reference in New Issue
Block a user