Improve stack overflow recovery

It's now possible to use sigaltstack() to recover from stack overflows
on Windows. Several bugs in sigaltstack() have been fixed, for all our
supported platforms. There's a newer better example showing how to use
this, along with three independent unit tests just to further showcase
the various techniques.
This commit is contained in:
Justine Tunney 2023-10-04 07:07:43 -07:00
parent 1694edf85c
commit 4631d34d0d
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
24 changed files with 590 additions and 274 deletions

View file

@ -24,20 +24,19 @@
dontinstrument const char *(DescribeBacktrace)(char buf[N],
struct StackFrame *fr) {
bool gotsome = false;
char *p = buf;
char *pe = p + N;
bool gotsome = false;
while (fr) {
if (gotsome) {
if (p + 1 < pe) {
if (p + 16 + 1 + 1 <= pe) {
if (gotsome) {
*p++ = ' ';
*p = 0;
} else {
gotsome = true;
}
} else {
gotsome = true;
}
if (p + 17 <= pe) {
p = __hexcpy(p, fr->addr);
} else {
break;
}
fr = fr->next;
}