aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/textflag.h
diff options
context:
space:
mode:
authorMichael Munday <mike.munday@ibm.com>2019-03-28 12:51:30 -0400
committerMichael Munday <mike.munday@ibm.com>2019-04-15 13:17:28 +0000
commitaafe257390cc9048e8b5df898fabd79a9e0d4c39 (patch)
tree2c0636b4b1ab59eb4b00a1f185515ce22ee2ff5a /src/runtime/textflag.h
parent0bd101cecc5458a8463b8d672bf1745c3cbb7c02 (diff)
downloadgo-aafe257390cc9048e8b5df898fabd79a9e0d4c39.tar.gz
go-aafe257390cc9048e8b5df898fabd79a9e0d4c39.zip
cmd/link, runtime: mark goexit as the top of the call stack
This CL adds a new attribute, TOPFRAME, which can be used to mark functions that should be treated as being at the top of the call stack. The function `runtime.goexit` has been marked this way on architectures that use a link register. This will stop programs that use DWARF to unwind the call stack from unwinding past `runtime.goexit` on architectures that use a link register. For example, it eliminates "corrupt stack?" warnings when generating a backtrace that hits `runtime.goexit` in GDB on s390x. Similar code should be added for non-link-register architectures (i.e. amd64, 386). They mark the top of the call stack slightly differently to link register architectures so I haven't added that code (they need to mark "rip" as undefined). Fixes #24385. Change-Id: I15b4c69ac75b491daa0acf0d981cb80eb06488de Reviewed-on: https://go-review.googlesource.com/c/go/+/169726 Run-TryBot: Michael Munday <mike.munday@ibm.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/runtime/textflag.h')
-rw-r--r--src/runtime/textflag.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/runtime/textflag.h b/src/runtime/textflag.h
index d1bb52cc00..daca36d948 100644
--- a/src/runtime/textflag.h
+++ b/src/runtime/textflag.h
@@ -32,3 +32,6 @@
#define NOFRAME 512
// Function can call reflect.Type.Method or reflect.Type.MethodByName.
#define REFLECTMETHOD 1024
+// Function is the top of the call stack. Call stack unwinders should stop
+// at this function.
+#define TOPFRAME 2048