Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mark start_task with ".cfi_undefined rip" #23074

Closed
vtjnash opened this issue Aug 1, 2017 · 4 comments
Closed

mark start_task with ".cfi_undefined rip" #23074

vtjnash opened this issue Aug 1, 2017 · 4 comments
Labels
help wanted Indicates that a maintainer wants help on an issue or pull request

Comments

@vtjnash
Copy link
Member

vtjnash commented Aug 1, 2017

Annotate start_task with asm(".cfi_undefined rip");, just like scylladb/seastar@1fa1323

@vtjnash vtjnash added the help wanted Indicates that a maintainer wants help on an issue or pull request label Aug 1, 2017
@maleadt
Copy link
Member

maleadt commented Aug 2, 2017

So maybe that's why #14727 still had some unannotated frames.

@shivakrishna9
Copy link

@vtjnash I will take this up. Need more info on where to add annotations.

@yuyichao
Copy link
Contributor

yuyichao commented Aug 2, 2017

We set the RIP to 0 so it shouldn't point to garbage at least...

@vtjnash
Copy link
Member Author

vtjnash commented Aug 3, 2017

I think it's just the start_task function that needs annotation, and testing that backtrace()[end] != C_NULL (only seems to be an issue on Linux).

vtjnash added a commit that referenced this issue Jan 26, 2021
ElOceanografo pushed a commit to ElOceanografo/julia that referenced this issue May 4, 2021
antoine-levitt pushed a commit to antoine-levitt/julia that referenced this issue May 9, 2021
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 10, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Feb 14, 2022
Fiber call-chains end at `coro_init`, but unwinders don't stop there,
trying to use `coro_init` 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`'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 and AARCH64.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 7, 2022
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.

Needed for tarantool#4002

NO_DOC=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 11, 2022
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=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 11, 2022
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=bug fix
NO_CHANGELOG=bug fix
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 11, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 13, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 16, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 17, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 17, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 17, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 17, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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.

Zero out rbp on x86_64 (also marks end of call-chain for
unwinders): this requires removing "-fno-omit-frame-pointer" compiler
flag, which is anyway redundant. Also remove redundant
"-fno-stack-protector" compiler flag.

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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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.

Zero out rbp on x86_64 (this also marks end of call-chain for
unwinders): this requires setting "-fomit-frame-pointer" compile
flag for compiling coro.c.

Remove redundant "-fno-omit-frame-pointer" and "-fno-stack-protector"
compile flags.

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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 18, 2022
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.

Zero out rbp on x86_64 (this also marks end of call-chain for
unwinders): this requires setting "-fomit-frame-pointer" compile
flag for compiling coro.c.

Remove redundant "-fno-omit-frame-pointer" and "-fno-stack-protector"
compile flags.

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_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 tarantool#4002

NO_DOC=internal bug fix
NO_CHANGELOG=internal bug fix
NO_TEST=unwind information annotation in inline assembly
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 19, 2022
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
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 25, 2022
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.

Zero out rbp on x86_64 (to conform to x86_64 ABI): this requires setting
"-fomit-frame-pointer" compile flag for coro.c.

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: 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_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 tarantool#4002

NO_DOC=internal bug fix
NO_CHANGELOG=internal bug fix
NO_TEST=unwind information annotation in inline assembly
CuriousGeorgiy added a commit to CuriousGeorgiy/tarantool that referenced this issue Mar 25, 2022
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 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 tarantool#4002

NO_DOC=internal bug fix
NO_CHANGELOG=internal bug fix
NO_TEST=unwind information annotation in inline assembly
locker pushed a commit to tarantool/tarantool that referenced this issue Mar 29, 2022
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 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Indicates that a maintainer wants help on an issue or pull request
Projects
None yet
Development

No branches or pull requests

4 participants