Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/ia32/ia32_syscall.c
Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | |||||
#include <machine/segments.h> | #include <machine/segments.h> | ||||
#include <machine/specialreg.h> | #include <machine/specialreg.h> | ||||
#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> | ||||
#include "vdso_ia32_offsets.h" | |||||
extern const char _binary_elf_vdso32_so_1_start[]; | |||||
extern const char _binary_elf_vdso32_so_1_end[]; | |||||
extern char _binary_elf_vdso32_so_1_size; | |||||
#define IDTVEC(name) __CONCAT(X,name) | #define IDTVEC(name) __CONCAT(X,name) | ||||
extern inthand_t IDTVEC(int0x80_syscall), IDTVEC(int0x80_syscall_pti), | extern inthand_t IDTVEC(int0x80_syscall), IDTVEC(int0x80_syscall_pti), | ||||
IDTVEC(rsvd), IDTVEC(rsvd_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 | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | setup_lcall_gate(void) | ||||
struct i386_ldt_args uap; | struct i386_ldt_args uap; | ||||
struct user_segment_descriptor desc; | struct user_segment_descriptor desc; | ||||
uint32_t lcall_addr; | uint32_t lcall_addr; | ||||
int error; | int error; | ||||
bzero(&uap, sizeof(uap)); | bzero(&uap, sizeof(uap)); | ||||
uap.start = 0; | uap.start = 0; | ||||
uap.num = 1; | uap.num = 1; | ||||
lcall_addr = curproc->p_sysent->sv_psstrings - sz_lcall_tramp; | lcall_addr = curproc->p_sysent->sv_psstrings - | ||||
(_binary_elf_vdso32_so_1_end - _binary_elf_vdso32_so_1_start) + | |||||
VDSO_LCALL_TRAMP_OFFSET; | |||||
bzero(&desc, sizeof(desc)); | bzero(&desc, sizeof(desc)); | ||||
desc.sd_type = SDT_MEMERA; | desc.sd_type = SDT_MEMERA; | ||||
desc.sd_dpl = SEL_UPL; | desc.sd_dpl = SEL_UPL; | ||||
desc.sd_p = 1; | desc.sd_p = 1; | ||||
desc.sd_def32 = 1; | desc.sd_def32 = 1; | ||||
desc.sd_gran = 1; | desc.sd_gran = 1; | ||||
desc.sd_lolimit = 0xffff; | desc.sd_lolimit = 0xffff; | ||||
desc.sd_hilimit = 0xf; | desc.sd_hilimit = 0xf; | ||||
Show All 9 Lines |