authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-02 13:38:33-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-07-02 13:41:17-04:00
log7d4a0cfed0fe03e3642a9b1518b8fb5b4a302f50
tree101f5fa50efa5484a04ec1d1403ccdeaedd71108
parent1a1598c58cf506217355c6b8eec84c0e9a3a6d2e
signature Commit is signed but in an unrecognized format.

enable segfault stack traces in stage1 compiler


4 files changed, 14 insertions(+), 0 deletions(-)

src-self-hosted/stage1.zig+7
...@@ -455,3 +455,10 @@ export const stage2_DepNextResult = extern struct {...@@ -455,3 +455,10 @@ export const stage2_DepNextResult = extern struct {
455 prereq,455 prereq,
456 };456 };
457};457};
458
459// ABI warning
460export fn stage2_attach_segfault_handler() void {
461 if (std.debug.runtime_safety and std.debug.have_segfault_handling_support) {
462 std.debug.attachSegfaultHandler();
463 }
464}
src/main.cpp+2
...@@ -262,6 +262,8 @@ static bool get_cache_opt(CacheOpt opt, bool default_value) {...@@ -262,6 +262,8 @@ static bool get_cache_opt(CacheOpt opt, bool default_value) {
262extern "C" int ZigClang_main(int argc, char **argv);262extern "C" int ZigClang_main(int argc, char **argv);
263263
264int main(int argc, char **argv) {264int main(int argc, char **argv) {
265 stage2_attach_segfault_handler();
266
265 char *arg0 = argv[0];267 char *arg0 = argv[0];
266 Error err;268 Error err;
267269
src/userland.cpp+2
...@@ -26,6 +26,8 @@ void stage2_zen(const char **ptr, size_t *len) {...@@ -26,6 +26,8 @@ void stage2_zen(const char **ptr, size_t *len) {
26 stage2_panic(msg, strlen(msg));26 stage2_panic(msg, strlen(msg));
27}27}
2828
29void stage2_attach_segfault_handler(void) { }
30
29void stage2_panic(const char *ptr, size_t len) {31void stage2_panic(const char *ptr, size_t len) {
30 fwrite(ptr, 1, len, stderr);32 fwrite(ptr, 1, len, stderr);
31 fprintf(stderr, "\n");33 fprintf(stderr, "\n");
src/userland.h+3
...@@ -113,6 +113,9 @@ ZIG_EXTERN_C void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file);...@@ -113,6 +113,9 @@ ZIG_EXTERN_C void stage2_render_ast(struct Stage2Ast *ast, FILE *output_file);
113// ABI warning113// ABI warning
114ZIG_EXTERN_C void stage2_zen(const char **ptr, size_t *len);114ZIG_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
115115
116// ABI warning
117ZIG_EXTERN_C void stage2_attach_segfault_handler(void);
118
116// ABI warning119// ABI warning
117ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);120ZIG_EXTERN_C ZIG_ATTRIBUTE_NORETURN void stage2_panic(const char *ptr, size_t len);
118121