diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2023-01-01 18:00:08 -0600 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2023-01-02 23:15:26 -0600 |
commit | e16b285c8e8c54bed0ec0eba419c2959e7e22b07 (patch) | |
tree | 632ddb138790b5d19010444d9eecb55462fb2c42 /system/gcc/342-gccgo-more-unwinding.patch | |
parent | 775611f4880c202bc3fd1a693d9c1ad006456372 (diff) | |
download | packages-e16b285c8e8c54bed0ec0eba419c2959e7e22b07.tar.gz packages-e16b285c8e8c54bed0ec0eba419c2959e7e22b07.tar.bz2 packages-e16b285c8e8c54bed0ec0eba419c2959e7e22b07.tar.xz packages-e16b285c8e8c54bed0ec0eba419c2959e7e22b07.zip |
system/gcc: Finish fixing unwinding in GCC Go rt
We add more functions to the unwind string comparisons, and pull in the
symbols for libucontext.
Fixes: 0dd86764 ("system/gcc: Ensure gccgo doesn't run off the stack")
Refs: #832
Diffstat (limited to 'system/gcc/342-gccgo-more-unwinding.patch')
-rw-r--r-- | system/gcc/342-gccgo-more-unwinding.patch | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/system/gcc/342-gccgo-more-unwinding.patch b/system/gcc/342-gccgo-more-unwinding.patch new file mode 100644 index 000000000..7f059b4dc --- /dev/null +++ b/system/gcc/342-gccgo-more-unwinding.patch @@ -0,0 +1,37 @@ +The fix for #832 was incomplete. Since we strip libgo.so, filename is +always NULL. This caused the unwinder to continue through +runtime_mstart which caused the same issue. +--- gcc-8.5.0/libgo/runtime/go-callers.c.old 2023-01-01 17:56:27.302982459 -0600 ++++ gcc-8.5.0/libgo/runtime/go-callers.c 2023-01-01 17:58:00.612903483 -0600 +@@ -118,27 +118,11 @@ + if (function != NULL) + { + if (__builtin_strcmp (function, "makecontext") == 0 +- || __builtin_strcmp (function, "libucontext_makecontext") == 0) ++ || __builtin_strcmp (function, "libucontext_makecontext") == 0 ++ || __builtin_strcmp (function, "runtime_mstart") == 0 ++ || __builtin_strcmp (function, "runtime.kickoff") == 0 ++ || __builtin_strcmp (function, "runtime.main") == 0) + return 1; +- if (filename != NULL) +- { +- const char *p; +- +- p = strrchr (filename, '/'); +- if (p == NULL) +- p = filename; +- if (__builtin_strcmp (p, "/proc.c") == 0) +- { +- if (__builtin_strcmp (function, "runtime_mstart") == 0) +- return 1; +- } +- else if (__builtin_strcmp (p, "/proc.go") == 0) +- { +- if (__builtin_strcmp (function, "runtime.kickoff") == 0 +- || __builtin_strcmp (function, "runtime.main") == 0) +- return 1; +- } +- } + } + + return arg->index >= arg->max; |