git: eca368ecb6e0 - main - Retire sv_transtrap
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 20 May 2022 11:55:06 UTC
The branch main has been updated by dchagin:
URL: https://cgit.FreeBSD.org/src/commit/?id=eca368ecb6e00e9db7e1c090e98a29439d255895
commit eca368ecb6e00e9db7e1c090e98a29439d255895
Author: Dmitry Chagin <dchagin@FreeBSD.org>
AuthorDate: 2022-05-20 11:54:03 +0000
Commit: Dmitry Chagin <dchagin@FreeBSD.org>
CommitDate: 2022-05-20 11:54:03 +0000
Retire sv_transtrap
Call translate_traps directly from sendsig().
MFC after: 2 weeks
---
sys/amd64/amd64/elf_machdep.c | 2 --
sys/amd64/amd64/trap.c | 4 ----
sys/amd64/linux/linux_sysvec.c | 3 +--
sys/amd64/linux32/linux32_sysvec.c | 5 ++---
sys/arm/arm/elf_machdep.c | 1 -
sys/arm64/arm64/elf32_machdep.c | 1 -
sys/arm64/arm64/elf_machdep.c | 1 -
sys/arm64/linux/linux_sysvec.c | 1 -
sys/compat/ia32/ia32_sysvec.c | 1 -
sys/i386/i386/elf_machdep.c | 1 -
sys/i386/i386/trap.c | 4 ----
sys/i386/linux/linux_sysvec.c | 6 ++----
sys/kern/imgact_aout.c | 2 --
sys/kern/init_main.c | 1 -
sys/powerpc/powerpc/elf32_machdep.c | 1 -
sys/powerpc/powerpc/elf64_machdep.c | 2 --
sys/powerpc/powerpc/trap.c | 2 --
sys/riscv/riscv/elf_machdep.c | 1 -
sys/sys/sysent.h | 2 --
19 files changed, 5 insertions(+), 36 deletions(-)
diff --git a/sys/amd64/amd64/elf_machdep.c b/sys/amd64/amd64/elf_machdep.c
index 1237eadcd239..3dc606edc04d 100644
--- a/sys/amd64/amd64/elf_machdep.c
+++ b/sys/amd64/amd64/elf_machdep.c
@@ -59,7 +59,6 @@ extern char _binary_elf_vdso_so_1_size;
struct sysentvec elf64_freebsd_sysvec_la48 = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = _binary_elf_vdso_so_1_start,
@@ -103,7 +102,6 @@ struct sysentvec elf64_freebsd_sysvec_la48 = {
struct sysentvec elf64_freebsd_sysvec_la57 = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = _binary_elf_vdso_so_1_start,
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 19b0c5065e68..df26797ca129 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -620,10 +620,6 @@ trap(struct trapframe *frame)
return;
}
- /* Translate fault for emulators (e.g. Linux) */
- if (*p->p_sysent->sv_transtrap != NULL)
- signo = (*p->p_sysent->sv_transtrap)(signo, type);
-
ksiginfo_init_trap(&ksi);
ksi.ksi_signo = signo;
ksi.ksi_code = ucode;
diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c
index fe7796179e4b..fbdd40433198 100644
--- a/sys/amd64/linux/linux_sysvec.c
+++ b/sys/amd64/linux/linux_sysvec.c
@@ -627,7 +627,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
td = curthread;
p = td->td_proc;
PROC_LOCK_ASSERT(p, MA_OWNED);
- sig = ksi->ksi_signo;
+ sig = linux_translate_traps(ksi->ksi_signo, ksi->ksi_trapno);
psp = p->p_sigacts;
code = ksi->ksi_code;
mtx_assert(&psp->ps_mtx, MA_OWNED);
@@ -763,7 +763,6 @@ linux_vsyscall(struct thread *td)
struct sysentvec elf_linux_sysvec = {
.sv_size = LINUX_SYS_MAXSYSCALL,
.sv_table = linux_sysent,
- .sv_transtrap = linux_translate_traps,
.sv_fixup = linux_fixup_elf,
.sv_sendsig = linux_rt_sendsig,
.sv_sigcode = &_binary_linux_vdso_so_o_start,
diff --git a/sys/amd64/linux32/linux32_sysvec.c b/sys/amd64/linux32/linux32_sysvec.c
index 79409fc63828..991047571e7d 100644
--- a/sys/amd64/linux32/linux32_sysvec.c
+++ b/sys/amd64/linux32/linux32_sysvec.c
@@ -294,7 +294,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
int sig;
int code;
- sig = ksi->ksi_signo;
+ sig = linux_translate_traps(ksi->ksi_signo, ksi->ksi_trapno);
code = ksi->ksi_code;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
@@ -404,7 +404,7 @@ linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
int oonstack;
int sig, code;
- sig = ksi->ksi_signo;
+ sig = linux_translate_traps(ksi->ksi_signo, ksi->ksi_trapno);
code = ksi->ksi_code;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
@@ -924,7 +924,6 @@ linux32_fixlimit(struct rlimit *rl, int which)
struct sysentvec elf_linux_sysvec = {
.sv_size = LINUX32_SYS_MAXSYSCALL,
.sv_table = linux32_sysent,
- .sv_transtrap = linux_translate_traps,
.sv_fixup = linux_fixup_elf,
.sv_sendsig = linux_sendsig,
.sv_sigcode = &_binary_linux32_vdso_so_o_start,
diff --git a/sys/arm/arm/elf_machdep.c b/sys/arm/arm/elf_machdep.c
index 735c00766f9b..724b3437458e 100644
--- a/sys/arm/arm/elf_machdep.c
+++ b/sys/arm/arm/elf_machdep.c
@@ -66,7 +66,6 @@ u_long elf_hwcap2;
struct sysentvec elf32_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode,
diff --git a/sys/arm64/arm64/elf32_machdep.c b/sys/arm64/arm64/elf32_machdep.c
index 685a328a9595..f637c5a65c05 100644
--- a/sys/arm64/arm64/elf32_machdep.c
+++ b/sys/arm64/arm64/elf32_machdep.c
@@ -84,7 +84,6 @@ u_long __read_frequently elf32_hwcap2;
static struct sysentvec elf32_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = freebsd32_sysent,
- .sv_transtrap = NULL,
.sv_fixup = elf32_freebsd_fixup,
.sv_sendsig = freebsd32_sendsig,
.sv_sigcode = aarch32_sigcode,
diff --git a/sys/arm64/arm64/elf_machdep.c b/sys/arm64/arm64/elf_machdep.c
index 57c43ed8206d..0247641d9652 100644
--- a/sys/arm64/arm64/elf_machdep.c
+++ b/sys/arm64/arm64/elf_machdep.c
@@ -64,7 +64,6 @@ struct arm64_addr_mask elf64_addr_mask;
static struct sysentvec elf64_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode,
diff --git a/sys/arm64/linux/linux_sysvec.c b/sys/arm64/linux/linux_sysvec.c
index 04467b25ca6e..72465285dfed 100644
--- a/sys/arm64/linux/linux_sysvec.c
+++ b/sys/arm64/linux/linux_sysvec.c
@@ -544,7 +544,6 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
struct sysentvec elf_linux_sysvec = {
.sv_size = LINUX_SYS_MAXSYSCALL,
.sv_table = linux_sysent,
- .sv_transtrap = NULL,
.sv_fixup = linux_elf_fixup,
.sv_sendsig = linux_rt_sendsig,
.sv_sigcode = &_binary_linux_vdso_so_o_start,
diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c
index 8e6024524614..8d4f316349bb 100644
--- a/sys/compat/ia32/ia32_sysvec.c
+++ b/sys/compat/ia32/ia32_sysvec.c
@@ -106,7 +106,6 @@ SYSCTL_ULONG(_compat_ia32, OID_AUTO, maxvmem, CTLFLAG_RWTUN, &ia32_maxvmem, 0, "
struct sysentvec ia32_freebsd_sysvec = {
.sv_size = FREEBSD32_SYS_MAXSYSCALL,
.sv_table = freebsd32_sysent,
- .sv_transtrap = NULL,
.sv_fixup = elf32_freebsd_fixup,
.sv_sendsig = ia32_sendsig,
.sv_sigcode = _binary_elf_vdso32_so_1_start,
diff --git a/sys/i386/i386/elf_machdep.c b/sys/i386/i386/elf_machdep.c
index e3994335eba5..ddde964973b4 100644
--- a/sys/i386/i386/elf_machdep.c
+++ b/sys/i386/i386/elf_machdep.c
@@ -55,7 +55,6 @@ __FBSDID("$FreeBSD$");
struct sysentvec elf32_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode,
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 9da5a177906c..578aa0ad49d9 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -685,10 +685,6 @@ kernel_trctrap:
return;
}
- /* Translate fault for emulators (e.g. Linux) */
- if (*p->p_sysent->sv_transtrap != NULL)
- signo = (*p->p_sysent->sv_transtrap)(signo, type);
-
ksiginfo_init_trap(&ksi);
ksi.ksi_signo = signo;
ksi.ksi_code = ucode;
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c
index a4d1980fd33e..2fd259aca1e5 100644
--- a/sys/i386/linux/linux_sysvec.c
+++ b/sys/i386/linux/linux_sysvec.c
@@ -402,7 +402,7 @@ linux_rt_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
int sig, code;
int oonstack;
- sig = ksi->ksi_signo;
+ sig = linux_translate_traps(ksi->ksi_signo, ksi->ksi_trapno);
code = ksi->ksi_code;
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
@@ -509,7 +509,7 @@ linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask)
PROC_LOCK_ASSERT(p, MA_OWNED);
psp = p->p_sigacts;
- sig = ksi->ksi_signo;
+ sig = linux_translate_traps(ksi->ksi_signo, ksi->ksi_trapno);
mtx_assert(&psp->ps_mtx, MA_OWNED);
if (SIGISMEMBER(psp->ps_siginfo, sig)) {
/* Signal handler installed with SA_SIGINFO. */
@@ -827,7 +827,6 @@ linux_exec_setregs(struct thread *td, struct image_params *imgp,
struct sysentvec linux_sysvec = {
.sv_size = LINUX_SYS_MAXSYSCALL,
.sv_table = linux_sysent,
- .sv_transtrap = linux_translate_traps,
.sv_fixup = linux_fixup,
.sv_sendsig = linux_sendsig,
.sv_sigcode = &_binary_linux_vdso_so_o_start,
@@ -865,7 +864,6 @@ INIT_SYSENTVEC(aout_sysvec, &linux_sysvec);
struct sysentvec elf_linux_sysvec = {
.sv_size = LINUX_SYS_MAXSYSCALL,
.sv_table = linux_sysent,
- .sv_transtrap = linux_translate_traps,
.sv_fixup = linux_fixup_elf,
.sv_sendsig = linux_sendsig,
.sv_sigcode = &_binary_linux_vdso_so_o_start,
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index 1818e5665caf..ceb305e33756 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -76,7 +76,6 @@ static int aout_fixup(uintptr_t *stack_base, struct image_params *imgp);
struct sysentvec aout_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = aout_fixup,
.sv_sendsig = sendsig,
.sv_sigcode = sigcode,
@@ -127,7 +126,6 @@ static int aout_szsigcode;
struct sysentvec aout_sysvec = {
.sv_size = FREEBSD32_SYS_MAXSYSCALL,
.sv_table = freebsd32_sysent,
- .sv_transtrap = NULL,
.sv_fixup = aout_fixup,
.sv_sendsig = ia32_sendsig,
.sv_sigcode = _binary_elf_vdso32_so_1_start,
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 52a0aae6de71..eb1323d12f61 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -416,7 +416,6 @@ null_set_fork_retval(struct thread *td __unused)
struct sysentvec null_sysvec = {
.sv_size = 0,
.sv_table = NULL,
- .sv_transtrap = NULL,
.sv_fixup = NULL,
.sv_sendsig = NULL,
.sv_sigcode = NULL,
diff --git a/sys/powerpc/powerpc/elf32_machdep.c b/sys/powerpc/powerpc/elf32_machdep.c
index fd88900292ac..2efe9a5fdca8 100644
--- a/sys/powerpc/powerpc/elf32_machdep.c
+++ b/sys/powerpc/powerpc/elf32_machdep.c
@@ -90,7 +90,6 @@ struct sysentvec elf32_freebsd_sysvec = {
#else
.sv_table = sysent,
#endif
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_copyout_auxargs = __elfN(powerpc_copyout_auxargs),
.sv_sendsig = sendsig,
diff --git a/sys/powerpc/powerpc/elf64_machdep.c b/sys/powerpc/powerpc/elf64_machdep.c
index 5c2e26d064b5..93b66461308d 100644
--- a/sys/powerpc/powerpc/elf64_machdep.c
+++ b/sys/powerpc/powerpc/elf64_machdep.c
@@ -64,7 +64,6 @@ static void exec_setregs_funcdesc(struct thread *td, struct image_params *imgp,
struct sysentvec elf64_freebsd_sysvec_v1 = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode64,
@@ -108,7 +107,6 @@ struct sysentvec elf64_freebsd_sysvec_v1 = {
struct sysentvec elf64_freebsd_sysvec_v2 = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode64, /* Fixed up in ppc64_init_sysvecs(). */
diff --git a/sys/powerpc/powerpc/trap.c b/sys/powerpc/powerpc/trap.c
index 3fb1badd7ba8..be08473fae03 100644
--- a/sys/powerpc/powerpc/trap.c
+++ b/sys/powerpc/powerpc/trap.c
@@ -495,8 +495,6 @@ trap(struct trapframe *frame)
}
if (sig != 0) {
- if (p->p_sysent->sv_transtrap != NULL)
- sig = (p->p_sysent->sv_transtrap)(sig, type);
ksiginfo_init_trap(&ksi);
ksi.ksi_signo = sig;
ksi.ksi_code = (int) ucode; /* XXX, not POSIX */
diff --git a/sys/riscv/riscv/elf_machdep.c b/sys/riscv/riscv/elf_machdep.c
index 0ed8b762ef7e..68c7afb4d09f 100644
--- a/sys/riscv/riscv/elf_machdep.c
+++ b/sys/riscv/riscv/elf_machdep.c
@@ -66,7 +66,6 @@ u_long elf_hwcap;
static struct sysentvec elf64_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
- .sv_transtrap = NULL,
.sv_fixup = __elfN(freebsd_fixup),
.sv_sendsig = sendsig,
.sv_sigcode = sigcode,
diff --git a/sys/sys/sysent.h b/sys/sys/sysent.h
index 7551b8ec92c4..f677050db769 100644
--- a/sys/sys/sysent.h
+++ b/sys/sys/sysent.h
@@ -103,8 +103,6 @@ struct note_info_list;
struct sysentvec {
int sv_size; /* number of entries */
struct sysent *sv_table; /* pointer to sysent */
- int (*sv_transtrap)(int, int);
- /* translate trap-to-signal mapping */
int (*sv_fixup)(uintptr_t *, struct image_params *);
/* stack fixup function */
void (*sv_sendsig)(void (*)(int), struct ksiginfo *, struct __sigset *);