-
-
Notifications
You must be signed in to change notification settings - Fork 645
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This commit makes numerous refinements to cosmopolitan memory handling. The default stack size has been reduced from 2mb to 128kb. A new macro is now provided so you can easily reconfigure the stack size to be any value you want. Work around the breaking change by adding to your main: STATIC_STACK_SIZE(0x00200000); // 2mb stack If you're not sure how much stack you need, then you can use: STATIC_YOINK("stack_usage_logging"); After which you can `sort -nr o/$MODE/stack.log`. Based on the unit test suite, nothing in the Cosmopolitan repository (except for Python) needs a stack size greater than 30kb. There are also new macros for detecting the size and address of the stack at runtime, e.g. GetStackAddr(). We also now support sigaltstack() so if you want to see nice looking crash reports whenever a stack overflow happens, you can put this in main(): ShowCrashReports(); Under `make MODE=dbg` and `make MODE=asan` the unit testing framework will now automatically print backtraces of memory allocations when things like memory leaks happen. Bugs are now fixed in ASAN global variable overrun detection. The memtrack and asan runtimes also handle edge cases now. The new tools helped to identify a few memory leaks, which are fixed by this change. This change should fix an issue reported in #288 with ARG_MAX limits. Fixing this doubled the performance of MKDEPS.COM and AR.COM yet again.
- Loading branch information
Showing
317 changed files
with
6,448 additions
and
3,967 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#ifndef COSMOPOLITAN_APE_CONFIG_H_ | ||
#define COSMOPOLITAN_APE_CONFIG_H_ | ||
#if !(__ASSEMBLER__ + __LINKER__ + 0) | ||
|
||
#define STATIC_SYMBOL(NAME, VALUE) \ | ||
asm(".equ\t" NAME "," VALUE "\n\t" \ | ||
".globl\t" NAME) | ||
|
||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ | ||
#endif /* COSMOPOLITAN_APE_CONFIG_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
#if 0 | ||
/*─────────────────────────────────────────────────────────────────╗ | ||
│ To the extent possible under law, Justine Tunney has waived │ | ||
│ all copyright and related or neighboring rights to this file, │ | ||
│ as it is written in the following disclaimers: │ | ||
│ • http://unlicense.org/ │ | ||
│ • http://creativecommons.org/publicdomain/zero/1.0/ │ | ||
╚─────────────────────────────────────────────────────────────────*/ | ||
#endif | ||
#include "libc/calls/calls.h" | ||
#include "libc/limits.h" | ||
#include "libc/log/check.h" | ||
#include "libc/log/log.h" | ||
#include "libc/runtime/stack.h" | ||
#include "libc/stdio/stdio.h" | ||
#include "libc/sysv/consts/prot.h" | ||
|
||
/** | ||
* @fileoverview Stack Overflow Demo | ||
*/ | ||
|
||
#define N INT_MAX | ||
|
||
STATIC_STACK_SIZE(FRAMESIZE); | ||
|
||
int A(int f(), int n) { | ||
if (n < N) { | ||
return f(f, n + 1) - 1; | ||
} else { | ||
return N; | ||
} | ||
} | ||
|
||
int (*Ap)(int (*)(), int) = A; | ||
|
||
int main(int argc, char *argv[]) { | ||
ShowCrashReports(); | ||
return !!Ap(Ap, 0); | ||
} | ||
|
||
/* | ||
error: Uncaught SIGSEGV (Stack Overflow) on rhel5 pid 368 | ||
./o//examples/stackoverflow.com | ||
EUNKNOWN[No error information][0] | ||
Linux rhel5 2.6.18-8.el5 #1 SMP Thu Mar 15 19:46:53 EDT 2007 | ||
0x0000000000406896: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
0x0000000000406898: A at examples/stackoverflow.c:24 | ||
etc. etc. | ||
RAX 0000000000000000 RBX 0000000000000001 RDI 000000000040687e ST(0) 0.0 | ||
RCX 0000000000417125 RDX 000000000041cd70 RSI 0000000000000efe ST(1) 0.0 | ||
RBP 00006ffffffe1000 RSP 00006ffffffe1000 RIP 0000000000406897 ST(2) 0.0 | ||
R8 0000000000000000 R9 0000000000000022 R10 0000000000000008 ST(3) 0.0 | ||
R11 0000000000000293 R12 0000000000000001 R13 00007ffc70b4fc48 ST(4) 0.0 | ||
R14 00007ffc70b4fc58 R15 00007ffc70b4fd18 VF IF | ||
XMM0 00000000000000000000000000000000 XMM8 00000000000000000000000000000000 | ||
XMM1 ffffffffffffeb030000000000000000 XMM9 00000000000000000000000000000000 | ||
XMM2 0000000000000000ffffffffffffffff XMM10 00000000000000000000000000000000 | ||
XMM3 00000000000000000000000000000000 XMM11 00000000000000000000000000000000 | ||
XMM4 00000000000000000000000000000000 XMM12 00000000000000000000000000000000 | ||
XMM5 00000000000000000000000000000000 XMM13 00000000000000000000000000000000 | ||
XMM6 00000000000000000000000000000000 XMM14 00000000000000000000000000000000 | ||
XMM7 00000000000000000000000000000000 XMM15 00000000000000000000000000000000 | ||
100080000000-100080030000 rw-pa-- 3x automap | ||
6ffffffe0000-6fffffff0000 rw-paSF 1x stack | ||
# 4 frames mapped w/ 0 frames gapped | ||
*/ |
Oops, something went wrong.