Re: [PATCH v4.1 06/10] x86/entry/vdso32: remove open-coded DWARF in sigreturn.S
"H. Peter Anvin" <[email protected]> Mon, 9 Feb 2026 20:53:37 -0800
| Newsgroups | org.kernel.vger.linux-sgx,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 2026-02-09 20:45, Xi Ruoyao wrote: >> >> Oh, good grief... >> >> How does this possibly work on non-x86 platforms? > > On ARM64 the vdso does not have eh_frame_hdr at all, on LoongArch > eh_frame_hdr is empty (note that an ampty en_frame_hdr is actually buggy > and I'm trying to fix it), so _Unwind_Find_FDE returns NULL and libgcc > falls back to MD_FALLBACK_FRAME_STATE_FOR, which handles the sigreturn > trampoline using some machine-dependant logic. > > On RISC-V things are more theatrical: the sigreturn trampoline happens > to be at the beginning of the vdso .text section, so after subtracting 1 > from the PC, the result is out of the .text section and so not in any > FDE. Thus _Unwind_Find_FDE returns NULL and libgcc again falls back to > MD_FALLBACK_FRAME_STATE_FOR. > > If the RISC-V sigreturn trampoline was not the first in .text, > subtracting 1 would cause the PC to be in the FDE of the previous > function and then _Unwind_Find_FDE would return that FDE, then RISC-V > would have some big trouble. > > I've not taken a serious look at other architectures yet. > In other words, it is broken on pretty much all architectures and it ends up using the hacky fallbacks on every single platform... -hpa