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 | |||||