opnsense-src/sys/amd64/linux/linux_genassym.c
Dmitry Chagin 8f9635dc99 linux(4): Retire handmade DWARF annotations from signal trampolines
The Linux exports __kernel_sigreturn and __kernel_rt_sigreturn from the
vdso. Modern glibc's sigaction sets the sa_restorer field of sigaction
to the corresponding vdso __sigreturn, and sets the SA_RESTORER.
Our signal trampolines uses the FreeBSD-way to call a signal handler,
so does not use the sigaction's sa_restorer.

However, as glibc's runtime linker depends on the existment of the vdso
__sigreturn symbols, for all Linuxulators was added separate trampolines
named __sigcode with DWARF anotations and left separate __sigreturn
methods, which are exported.

MFC after:		2 weeks
2022-05-15 21:08:12 +03:00

34 lines
1.4 KiB
C

#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/assym.h>
#include <sys/systm.h>
#include <amd64/linux/linux.h>
#include <compat/linux/linux_mib.h>
#include <x86/linux/linux_x86_sigframe.h>
ASSYM(LINUX_RT_SIGF_UC, offsetof(struct l_rt_sigframe, sf_uc));
ASSYM(LINUX_RT_SIGF_SC, offsetof(struct l_ucontext, uc_mcontext));
ASSYM(L_SC_R8, offsetof(struct l_sigcontext, sc_r8));
ASSYM(L_SC_R9, offsetof(struct l_sigcontext, sc_r9));
ASSYM(L_SC_R10, offsetof(struct l_sigcontext, sc_r10));
ASSYM(L_SC_R11, offsetof(struct l_sigcontext, sc_r11));
ASSYM(L_SC_R12, offsetof(struct l_sigcontext, sc_r12));
ASSYM(L_SC_R13, offsetof(struct l_sigcontext, sc_r13));
ASSYM(L_SC_R14, offsetof(struct l_sigcontext, sc_r14));
ASSYM(L_SC_R15, offsetof(struct l_sigcontext, sc_r15));
ASSYM(L_SC_RDI, offsetof(struct l_sigcontext, sc_rdi));
ASSYM(L_SC_RSI, offsetof(struct l_sigcontext, sc_rsi));
ASSYM(L_SC_RBP, offsetof(struct l_sigcontext, sc_rbp));
ASSYM(L_SC_RBX, offsetof(struct l_sigcontext, sc_rbx));
ASSYM(L_SC_RDX, offsetof(struct l_sigcontext, sc_rdx));
ASSYM(L_SC_RAX, offsetof(struct l_sigcontext, sc_rax));
ASSYM(L_SC_RCX, offsetof(struct l_sigcontext, sc_rcx));
ASSYM(L_SC_RSP, offsetof(struct l_sigcontext, sc_rsp));
ASSYM(L_SC_RIP, offsetof(struct l_sigcontext, sc_rip));
ASSYM(L_SC_RFLAGS, offsetof(struct l_sigcontext, sc_rflags));
ASSYM(L_SC_CS, offsetof(struct l_sigcontext, sc_cs));
ASSYM(LINUX_VERSION_CODE, LINUX_VERSION_CODE);