Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
coro: fix
coro_{init,startup}
unwind information
Fiber call-chains end at `coro_{init, startup}`, but unwinders don't stop there, trying to use `coro_{init, startup}` stack frame's return address (which points to some garbage) and, in turn, failing. A similar issue was experienced by seastar and julia (see JuliaLang/julia#23074 and scylladb/scylladb#1909). In order to make unwinding stop at `coro_{init, startup}`'s stack frame we need to annotate it with CFI assembly: previously, annotation was provided only for GCC on x86_64 — also provide it for clang. For some reason unwinders ignore platform ABIs regarding ending of call-chains: instead of trying to follow platform ABIs, explicitly invalidate the topmost (`coro_{init, startup}`) stack frame information for both x86_64 and AARCH64. References: 1. glibc: * clone: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/ sysv/linux/x86_64/clone.S;h=31ac12da0cc08a934d514fed1de9eba1cb3e8ec5;hb =ebbb8c9f64c3486603ef4ccee4dd2a5574e41039 * start: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/x86_6 4/start.S;h=9edd17b60cd54ec9eef11c76ab02322dcb5d057a;hb=5b736bc9b55115e 67129e77db4de6cf193054cd2 2. seastar: * thread_context::main(): https://github.com/scylladb/seastar/blob/d27b f8b5a14e5b9e9c9df18fd1306489b651aa42/src/core/thread.cc#L278-L293 3. julia: * https://github.com/JuliaLang/julia/blob/2e2b1d2ad50fe12999cbde d0b5acd3f0a36ec8c5/src/julia_internal.h#L90-L106 4. android: * https://cs.android.com/android/platform/superproject/+/master:bionic/ libc/platform/bionic/macros.h;l=52-60;drc=2528dab7419a63f57fe20027886ba 7dd3857aba8 Needed for tarantool#4002 NO_DOC=internal bug fix NO_CHANGELOG=internal bug fix NO_TEST=unwind information annotation in inline assembly
- Loading branch information