aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2013-10-09 00:02:14 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2013-10-09 00:02:14 +0000
commit7af190f113aecdbed44c6406ccefb81681580021 (patch)
tree4161ee09ad51349a5080a6442ff772c8c3e965ae /libgo/runtime
parent8ae4c35c1e267d5cfe10693dd0f81eb1883c0f59 (diff)
downloadgcc-7af190f113aecdbed44c6406ccefb81681580021.zip
gcc-7af190f113aecdbed44c6406ccefb81681580021.tar.gz
gcc-7af190f113aecdbed44c6406ccefb81681580021.tar.bz2
runtime: Do not report thunks and recover functions in backtrace.
From-SVN: r203294
Diffstat (limited to 'libgo/runtime')
-rw-r--r--libgo/runtime/go-callers.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/libgo/runtime/go-callers.c b/libgo/runtime/go-callers.c
index dd1cf79..291dfd0 100644
--- a/libgo/runtime/go-callers.c
+++ b/libgo/runtime/go-callers.c
@@ -53,6 +53,21 @@ callback (void *data, uintptr_t pc, const char *filename, int lineno,
return 0;
}
+ /* Skip thunks and recover functions. There is no equivalent to
+ these functions in the gc toolchain, so returning them here means
+ significantly different results for runtime.Caller(N). */
+ if (function != NULL)
+ {
+ const char *p;
+
+ p = __builtin_strchr (function, '.');
+ if (p != NULL && __builtin_strncmp (p + 1, "$thunk", 6) == 0)
+ return 0;
+ p = __builtin_strrchr (function, '$');
+ if (p != NULL && __builtin_strcmp(p, "$recover") == 0)
+ return 0;
+ }
+
if (arg->skip > 0)
{
--arg->skip;