Rename RunCallBacksToRun to llvm::sys::RunSignalHandlers
And expose it in Signals.h, allowing clients to call it directly,
possibly LLVMErrorHandler which currently calls RunInterruptHandlers
but not RunSignalHandlers, thus for example not printing the stack
backtrace on Unixish OSes. On Windows it does happen because
RunInterruptHandlers ends up calling the callbacks as well via
Cleanup(). This difference in behaviour and code structures in
*/Signals.inc should be patched in the future.
llvm-svn: 242936
diff --git a/llvm/include/llvm/Support/Signals.h b/llvm/include/llvm/Support/Signals.h
index 7e165d7..2a4d84b 100644
--- a/llvm/include/llvm/Support/Signals.h
+++ b/llvm/include/llvm/Support/Signals.h
@@ -47,6 +47,9 @@
/// \brief Print the stack trace using the given \c raw_ostream object.
void PrintStackTrace(raw_ostream &OS);
+ // Run all registered signal handlers.
+ void RunSignalHandlers();
+
/// AddSignalHandler - Add a function to be called when an abort/kill signal
/// is delivered to the process. The handler can have a cookie passed to it
/// to identify what instance of the handler it is.
diff --git a/llvm/lib/Support/Signals.cpp b/llvm/lib/Support/Signals.cpp
index 598ef50..2c3560c 100644
--- a/llvm/lib/Support/Signals.cpp
+++ b/llvm/lib/Support/Signals.cpp
@@ -28,7 +28,7 @@
static ManagedStatic<std::vector<std::pair<void (*)(void *), void *>>>
CallBacksToRun;
-void RunCallBacksToRun() {
+void sys::RunSignalHandlers() {
if (!CallBacksToRun.isConstructed())
return;
for (auto &I : *CallBacksToRun)
diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc
index caccf7b..2332db5 100644
--- a/llvm/lib/Support/Unix/Signals.inc
+++ b/llvm/lib/Support/Unix/Signals.inc
@@ -201,7 +201,7 @@
}
// Otherwise if it is a fault (like SEGV) run any handler.
- RunCallBacksToRun();
+ llvm::sys::RunSignalHandlers();
#ifdef __s390__
// On S/390, certain signals are delivered with PSW Address pointing to
diff --git a/llvm/lib/Support/Windows/Signals.inc b/llvm/lib/Support/Windows/Signals.inc
index c8bc646..824edb3 100644
--- a/llvm/lib/Support/Windows/Signals.inc
+++ b/llvm/lib/Support/Windows/Signals.inc
@@ -457,7 +457,7 @@
llvm::sys::fs::remove(FilesToRemove->back());
FilesToRemove->pop_back();
}
- RunCallBacksToRun();
+ llvm::sys::RunSignalHandlers();
LeaveCriticalSection(&CriticalSection);
}