diff options
author | Théophane Hufschmitt <theophane.hufschmitt@tweag.io> | 2022-11-14 15:00:05 +0100 |
---|---|---|
committer | Théophane Hufschmitt <theophane.hufschmitt@tweag.io> | 2022-11-14 15:00:05 +0100 |
commit | 8b4352d79b488a82321254b7ab531ff977816361 (patch) | |
tree | 50e0dfb0d22b82d49b82aac0cd7b80f5482deada /src/libmain/stack.cc | |
parent | e7ed9ae0c711c4efd83756b16379549ecff52355 (diff) | |
parent | 302ddee749f1341895b3f18c7f430dfc13171985 (diff) |
Merge remote-tracking branch 'nixos/master' into readFile-scan-references
Diffstat (limited to 'src/libmain/stack.cc')
-rw-r--r-- | src/libmain/stack.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/libmain/stack.cc b/src/libmain/stack.cc index b0a4a4c5d..10f71c1dc 100644 --- a/src/libmain/stack.cc +++ b/src/libmain/stack.cc @@ -1,4 +1,5 @@ #include "error.hh" +#include "shared.hh" #include <cstring> #include <cstddef> @@ -29,9 +30,7 @@ static void sigsegvHandler(int signo, siginfo_t * info, void * ctx) ptrdiff_t diff = (char *) info->si_addr - sp; if (diff < 0) diff = -diff; if (diff < 4096) { - char msg[] = "error: stack overflow (possible infinite recursion)\n"; - [[gnu::unused]] auto res = write(2, msg, strlen(msg)); - _exit(1); // maybe abort instead? + nix::stackOverflowHandler(info, ctx); } } @@ -67,5 +66,12 @@ void detectStackOverflow() #endif } +std::function<void(siginfo_t * info, void * ctx)> stackOverflowHandler(defaultStackOverflowHandler); + +void defaultStackOverflowHandler(siginfo_t * info, void * ctx) { + char msg[] = "error: stack overflow (possible infinite recursion)\n"; + [[gnu::unused]] auto res = write(2, msg, strlen(msg)); + _exit(1); // maybe abort instead? +} } |