From 9016ec056ae3896522798ead39bb2f3ff4f68809 Mon Sep 17 00:00:00 2001 From: Dmitry Chagin Date: Mon, 23 May 2022 13:16:58 +0300 Subject: [PATCH] linux(4): Deduplicate bsd_to_linux_trapcode() As bsd_to_linux_trapcode() is common for x86 Linuxulators, move it under x86/linux. MFC after: 2 weeks --- sys/amd64/linux/linux_sysvec.c | 39 --------------------------- sys/amd64/linux32/linux32_sysvec.c | 39 --------------------------- sys/i386/linux/linux_sysvec.c | 39 --------------------------- sys/x86/linux/linux_x86.c | 43 ++++++++++++++++++++++++++++++ sys/x86/linux/linux_x86.h | 1 + 5 files changed, 44 insertions(+), 117 deletions(-) diff --git a/sys/amd64/linux/linux_sysvec.c b/sys/amd64/linux/linux_sysvec.c index 4592c2c26e1..acfc4d6831f 100644 --- a/sys/amd64/linux/linux_sysvec.c +++ b/sys/amd64/linux/linux_sysvec.c @@ -131,45 +131,6 @@ static int linux_on_exec_vmspace(struct proc *p, static void linux_set_fork_retval(struct thread *td); static int linux_vsyscall(struct thread *td); -#define LINUX_T_UNKNOWN 255 -static int _bsd_to_linux_trapcode[] = { - LINUX_T_UNKNOWN, /* 0 */ - 6, /* 1 T_PRIVINFLT */ - LINUX_T_UNKNOWN, /* 2 */ - 3, /* 3 T_BPTFLT */ - LINUX_T_UNKNOWN, /* 4 */ - LINUX_T_UNKNOWN, /* 5 */ - 16, /* 6 T_ARITHTRAP */ - 254, /* 7 T_ASTFLT */ - LINUX_T_UNKNOWN, /* 8 */ - 13, /* 9 T_PROTFLT */ - 1, /* 10 T_TRCTRAP */ - LINUX_T_UNKNOWN, /* 11 */ - 14, /* 12 T_PAGEFLT */ - LINUX_T_UNKNOWN, /* 13 */ - 17, /* 14 T_ALIGNFLT */ - LINUX_T_UNKNOWN, /* 15 */ - LINUX_T_UNKNOWN, /* 16 */ - LINUX_T_UNKNOWN, /* 17 */ - 0, /* 18 T_DIVIDE */ - 2, /* 19 T_NMI */ - 4, /* 20 T_OFLOW */ - 5, /* 21 T_BOUND */ - 7, /* 22 T_DNA */ - 8, /* 23 T_DOUBLEFLT */ - 9, /* 24 T_FPOPFLT */ - 10, /* 25 T_TSSFLT */ - 11, /* 26 T_SEGNPFLT */ - 12, /* 27 T_STKFLT */ - 18, /* 28 T_MCHK */ - 19, /* 29 T_XMMFLT */ - 15 /* 30 T_RESERVED */ -}; -#define bsd_to_linux_trapcode(code) \ - ((code) +#define LINUX_T_UNKNOWN 255 +static int _bsd_to_linux_trapcode[] = { + LINUX_T_UNKNOWN, /* 0 */ + 6, /* 1 T_PRIVINFLT */ + LINUX_T_UNKNOWN, /* 2 */ + 3, /* 3 T_BPTFLT */ + LINUX_T_UNKNOWN, /* 4 */ + LINUX_T_UNKNOWN, /* 5 */ + 16, /* 6 T_ARITHTRAP */ + 254, /* 7 T_ASTFLT */ + LINUX_T_UNKNOWN, /* 8 */ + 13, /* 9 T_PROTFLT */ + 1, /* 10 T_TRCTRAP */ + LINUX_T_UNKNOWN, /* 11 */ + 14, /* 12 T_PAGEFLT */ + LINUX_T_UNKNOWN, /* 13 */ + 17, /* 14 T_ALIGNFLT */ + LINUX_T_UNKNOWN, /* 15 */ + LINUX_T_UNKNOWN, /* 16 */ + LINUX_T_UNKNOWN, /* 17 */ + 0, /* 18 T_DIVIDE */ + 2, /* 19 T_NMI */ + 4, /* 20 T_OFLOW */ + 5, /* 21 T_BOUND */ + 7, /* 22 T_DNA */ + 8, /* 23 T_DOUBLEFLT */ + 9, /* 24 T_FPOPFLT */ + 10, /* 25 T_TSSFLT */ + 11, /* 26 T_SEGNPFLT */ + 12, /* 27 T_STKFLT */ + 18, /* 28 T_MCHK */ + 19, /* 29 T_XMMFLT */ + 15 /* 30 T_RESERVED */ +}; + /* * If FreeBSD & Linux have a difference of opinion about what a trap * means, deal with it here. @@ -54,3 +89,11 @@ linux_translate_traps(int signal, int trap_code) return (signal); } } + +int +bsd_to_linux_trapcode(int code) +{ + + return (code < nitems(_bsd_to_linux_trapcode) ? + _bsd_to_linux_trapcode[code] : LINUX_T_UNKNOWN); +} \ No newline at end of file diff --git a/sys/x86/linux/linux_x86.h b/sys/x86/linux/linux_x86.h index a7eb871113e..ce083bb1c3f 100644 --- a/sys/x86/linux/linux_x86.h +++ b/sys/x86/linux/linux_x86.h @@ -36,5 +36,6 @@ int linux_vdso_tsc_selector_idx(void); int linux_vdso_cpu_selector_idx(void); int linux_translate_traps(int, int); +int bsd_to_linux_trapcode(int); #endif /* _X86_INCLUDE_LINUX_LINUX_X86_H_ */