summaryrefslogtreecommitdiff
path: root/system/gcc/341-gccgo-libucontext-stack.patch
diff options
context:
space:
mode:
authorA. Wilcox <AWilcox@Wilcox-Tech.com>2022-12-25 01:49:26 -0600
committerZach van Rijn <me@zv.io>2022-12-25 11:03:04 -0600
commit0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988 (patch)
tree5ae067a124c5eb5a161542a1d83625ccba13906c /system/gcc/341-gccgo-libucontext-stack.patch
parent0f40628d7db93efde48cc048e7c9068e1aa84a17 (diff)
downloadpackages-0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988.tar.gz
packages-0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988.tar.bz2
packages-0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988.tar.xz
packages-0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988.zip
system/gcc: Ensure gccgo doesn't run off the stack
libucontext doesn't clear the stack frame below makecontext. This caused us to end up crashing like Solaris[1]. Fixes: #832 [1]: https://gcc.gnu.org/PR52583#c21
Diffstat (limited to 'system/gcc/341-gccgo-libucontext-stack.patch')
-rw-r--r--system/gcc/341-gccgo-libucontext-stack.patch18
1 files changed, 18 insertions, 0 deletions
diff --git a/system/gcc/341-gccgo-libucontext-stack.patch b/system/gcc/341-gccgo-libucontext-stack.patch
new file mode 100644
index 000000000..2befc5d32
--- /dev/null
+++ b/system/gcc/341-gccgo-libucontext-stack.patch
@@ -0,0 +1,18 @@
+Similar to Solaris, libucontext does not clear the stack below makecontext.
+This causes the Go frontend to sometimes go below the stack.
+
+On 32-bit Arm systems, this resulted in #832. It is likely, though not known,
+that this could have caused other issues we've seen in gccgo as well.
+
+--- gcc-8.5.0/libgo/runtime/go-callers.c.old 2021-05-14 03:42:11.000000000 -0500
++++ gcc-8.5.0/libgo/runtime/go-callers.c 2022-12-25 01:46:15.834110528 -0600
+@@ -117,7 +117,8 @@
+ Solaris (http://gcc.gnu.org/PR52583 comment #21). */
+ if (function != NULL)
+ {
+- if (__builtin_strcmp (function, "makecontext") == 0)
++ if (__builtin_strcmp (function, "makecontext") == 0
++ || __builtin_strcmp (function, "libucontext_makecontext") == 0)
+ return 1;
+ if (filename != NULL)
+ {