From 0dd86764f0e6c25e6f6e6f38c72c35f4d34d6988 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Sun, 25 Dec 2022 01:49:26 -0600 Subject: 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 --- system/gcc/341-gccgo-libucontext-stack.patch | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 system/gcc/341-gccgo-libucontext-stack.patch (limited to 'system/gcc/341-gccgo-libucontext-stack.patch') 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) + { -- cgit v1.2.3-60-g2f50