mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-04 18:28:30 +00:00
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:
parent
1694edf85c
commit
4631d34d0d
24 changed files with 590 additions and 274 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue