diff options
author | Yusuke Endoh <mame@ruby-lang.org> | 2022-12-19 17:15:31 +0900 |
---|---|---|
committer | Yusuke Endoh <mame@ruby-lang.org> | 2022-12-23 23:48:18 +0900 |
commit | 65920cfc40b47e9e037e0536b2b7de8f0cf30fc3 (patch) | |
tree | c7aea8cb8fd376ddbe001d2cf7c353a582e511c4 /addr2line.c | |
parent | 97280faf2818cc464e1ef9e898807c60a2726bf8 (diff) |
addr2line.c: Strip pointer authentication
We need to manually strip pointer authentication bits on M1 mac because
libunwind leaks them out.
Co-Authored-By: NARUSE, Yui <naruse@airemix.jp>
Co-Authored-By: Yuta Saito <kateinoigakukun@gmail.com>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7011
Diffstat (limited to 'addr2line.c')
-rw-r--r-- | addr2line.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/addr2line.c b/addr2line.c index 00f542261e..77538f6eb9 100644 --- a/addr2line.c +++ b/addr2line.c @@ -2548,6 +2548,16 @@ rb_dump_backtrace_with_lines(int num_traces, void **traces) obj_info_t *obj = NULL; /* 2 is NULL + main executable */ void **dladdr_fbases = (void **)calloc(num_traces+2, sizeof(void *)); + +#if defined(__APPLE__) && defined(__aarch64__) + // Strip Arm64's pointer authentication. + for (i = 0; i < num_traces; i++) { + // I wish I could use "ptrauth_strip()" but I get an error: + // "this target does not support pointer authentication" + traces[i] = (void*)(((uint64_t)traces[i]) & 0x7fffffffffffull); + } +#endif + #ifdef HAVE_MAIN_EXE_PATH char *main_path = NULL; /* used on printing backtrace */ ssize_t len; |