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
This commit is contained in:
parent
2434137f69
commit
9016ec056a
@ -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)<nitems(_bsd_to_linux_trapcode)? \
|
||||
_bsd_to_linux_trapcode[(code)]: \
|
||||
LINUX_T_UNKNOWN)
|
||||
|
||||
LINUX_VDSO_SYM_INTPTR(linux_rt_sigcode);
|
||||
LINUX_VDSO_SYM_CHAR(linux_platform);
|
||||
LINUX_VDSO_SYM_INTPTR(kern_timekeep_base);
|
||||
|
@ -134,45 +134,6 @@ static void linux_vdso_reloc(char *mapping, Elf_Addr offset);
|
||||
static void linux32_set_fork_retval(struct thread *td);
|
||||
static void linux32_set_syscall_retval(struct thread *td, int error);
|
||||
|
||||
#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)<nitems(_bsd_to_linux_trapcode)? \
|
||||
_bsd_to_linux_trapcode[(code)]: \
|
||||
LINUX_T_UNKNOWN)
|
||||
|
||||
struct linux32_ps_strings {
|
||||
u_int32_t ps_argvstr; /* first of 0 or more argument strings */
|
||||
u_int ps_nargvstr; /* the number of argument strings */
|
||||
|
@ -117,45 +117,6 @@ static void linux_vdso_install(const void *param);
|
||||
static void linux_vdso_deinstall(const void *param);
|
||||
static void linux_vdso_reloc(char *mapping, Elf_Addr offset);
|
||||
|
||||
#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)<nitems(_bsd_to_linux_trapcode)? \
|
||||
_bsd_to_linux_trapcode[(code)]: \
|
||||
LINUX_T_UNKNOWN)
|
||||
|
||||
LINUX_VDSO_SYM_CHAR(linux_platform);
|
||||
LINUX_VDSO_SYM_INTPTR(__kernel_vsyscall);
|
||||
LINUX_VDSO_SYM_INTPTR(linux_vdso_sigcode);
|
||||
|
@ -35,6 +35,41 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
#include <x86/linux/linux_x86.h>
|
||||
|
||||
#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);
|
||||
}
|
@ -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_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user