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/scylla#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 if ENABLE_BACKTRACE is set during configuration. Zero out rbp on x86_64 (to conform to x86_64 ABI): this requires setting "-fomit-frame-pointer" compile flag for coro.c. Backtrace collection from inactive fiber based on pseudo context-switch relied on the stack frame structure: remove redundant "-fno-omit-frame-pointer" and "-fno-stack-protector" compile flags for other Tarantool sources. For some reason unwinders ignore platform ABIs regarding ending of call-chains: explicitly invalidate the topmost (`coro_{init, startup}`) current frame information (CFI) 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_64/start.S;h=9edd17b60cd54ec9eef11c76ab02322dcb5d057a;hb=5b736bc9b55115e67129e77db4de6cf193054cd2 2. seastar: * thread_context::main(): https://github.com/scylladb/seastar/blob/d27bf8b5a14e5b9e9c9df18fd1306489b651aa42/src/core/thread.cc#L278-L293 3. julia: * https://github.com/JuliaLang/julia/blob/2e2b1d2ad50fe12999cbded0b5acd3f0a36ec8c5/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=2528dab7419a63f57fe20027886ba7dd3857aba8 Needed for #4002 NO_DOC=internal bug fix NO_CHANGELOG=internal bug fix NO_TEST=unwind information annotation in inline assembly
Loading
Please register or sign in to comment