mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-26 07:29:55 +00:00
Implement sys::SetInterruptFunction on Unix, stub it on win32 so that the
build will not fail git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22578 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e62321ac41
commit
fa8c292ebd
@ -24,6 +24,9 @@
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
/// InterruptFunction - The function to call if ctrl-c is pressed.
|
||||||
|
void (*InterruptFunction)() = 0;
|
||||||
|
|
||||||
std::vector<std::string> *FilesToRemove = 0 ;
|
std::vector<std::string> *FilesToRemove = 0 ;
|
||||||
std::vector<llvm::sys::Path> *DirectoriesToRemove = 0;
|
std::vector<llvm::sys::Path> *DirectoriesToRemove = 0;
|
||||||
|
|
||||||
@ -116,8 +119,16 @@ RETSIGTYPE SignalHandler(int Sig) {
|
|||||||
DirectoriesToRemove->pop_back();
|
DirectoriesToRemove->pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (std::find(IntSigs, IntSigsEnd, Sig) != IntSigsEnd)
|
if (std::find(IntSigs, IntSigsEnd, Sig) != IntSigsEnd) {
|
||||||
exit(1); // If this is an interrupt signal, exit the program
|
if (InterruptFunction) {
|
||||||
|
void (*IF)() = InterruptFunction;
|
||||||
|
InterruptFunction = 0;
|
||||||
|
IF(); // run the interrupt function.
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
exit(1); // If this is an interrupt signal, exit the program
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Otherwise if it is a fault (like SEGV) output the stacktrace to
|
// Otherwise if it is a fault (like SEGV) output the stacktrace to
|
||||||
// STDERR (if we can) and reissue the signal to die...
|
// STDERR (if we can) and reissue the signal to die...
|
||||||
@ -134,6 +145,11 @@ void RegisterHandler(int Signal) {
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
|
void sys::SetInterruptFunction(void (*IF)()) {
|
||||||
|
InterruptFunction = IF;
|
||||||
|
RegisterHandler(SIGINT);
|
||||||
|
}
|
||||||
|
|
||||||
// RemoveFileOnSignal - The public API
|
// RemoveFileOnSignal - The public API
|
||||||
void sys::RemoveFileOnSignal(const sys::Path &Filename) {
|
void sys::RemoveFileOnSignal(const sys::Path &Filename) {
|
||||||
if (FilesToRemove == 0)
|
if (FilesToRemove == 0)
|
||||||
|
@ -109,6 +109,10 @@ void sys::PrintStackTraceOnErrorSignal() {
|
|||||||
LeaveCriticalSection(&CriticalSection);
|
LeaveCriticalSection(&CriticalSection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sys::SetInterruptFunction(void (*IF)()) {
|
||||||
|
// Currently unimplemented.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Cleanup() {
|
static void Cleanup() {
|
||||||
|
Loading…
Reference in New Issue
Block a user