Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/ia32/ia32_syscall.c
Show First 20 Lines • Show All 89 Lines • ▼ Show 20 Lines | |||||
#include <machine/sysarch.h> | #include <machine/sysarch.h> | ||||
#include <machine/frame.h> | #include <machine/frame.h> | ||||
#include <machine/md_var.h> | #include <machine/md_var.h> | ||||
#include <machine/pcb.h> | #include <machine/pcb.h> | ||||
#include <machine/cpufunc.h> | #include <machine/cpufunc.h> | ||||
#define IDTVEC(name) __CONCAT(X,name) | #define IDTVEC(name) __CONCAT(X,name) | ||||
extern inthand_t IDTVEC(int0x80_syscall), IDTVEC(rsvd); | extern inthand_t IDTVEC(int0x80_syscall), IDTVEC(int0x80_syscall_pti), | ||||
IDTVEC(rsvd), IDTVEC(rsvd_pti); | |||||
void ia32_syscall(struct trapframe *frame); /* Called from asm code */ | void ia32_syscall(struct trapframe *frame); /* Called from asm code */ | ||||
void | void | ||||
ia32_set_syscall_retval(struct thread *td, int error) | ia32_set_syscall_retval(struct thread *td, int error) | ||||
{ | { | ||||
cpu_set_syscall_retval(td, error); | cpu_set_syscall_retval(td, error); | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | ia32_syscall(struct trapframe *frame) | ||||
syscallret(td, error); | syscallret(td, error); | ||||
} | } | ||||
static void | static void | ||||
ia32_syscall_enable(void *dummy) | ia32_syscall_enable(void *dummy) | ||||
{ | { | ||||
setidt(IDT_SYSCALL, &IDTVEC(int0x80_syscall), SDT_SYSIGT, SEL_UPL, 0); | setidt(IDT_SYSCALL, pti ? &IDTVEC(int0x80_syscall_pti) : | ||||
&IDTVEC(int0x80_syscall), SDT_SYSIGT, SEL_UPL, 0); | |||||
} | } | ||||
static void | static void | ||||
ia32_syscall_disable(void *dummy) | ia32_syscall_disable(void *dummy) | ||||
{ | { | ||||
setidt(IDT_SYSCALL, &IDTVEC(rsvd), SDT_SYSIGT, SEL_KPL, 0); | setidt(IDT_SYSCALL, pti ? &IDTVEC(rsvd_pti) : &IDTVEC(rsvd), | ||||
SDT_SYSIGT, SEL_KPL, 0); | |||||
} | } | ||||
SYSINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_enable, NULL); | SYSINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_enable, NULL); | ||||
SYSUNINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_disable, NULL); | SYSUNINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_disable, NULL); | ||||
#ifdef COMPAT_43 | #ifdef COMPAT_43 | ||||
int | int | ||||
setup_lcall_gate(void) | setup_lcall_gate(void) | ||||
Show All 27 Lines |