Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/linux32/linux32_machdep.c
Show First 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#include <sys/unistd.h> | #include <sys/unistd.h> | ||||
#include <sys/wait.h> | #include <sys/wait.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/psl.h> | #include <machine/psl.h> | ||||
#include <machine/reg.h> | |||||
#include <machine/segments.h> | #include <machine/segments.h> | ||||
#include <machine/specialreg.h> | #include <machine/specialreg.h> | ||||
#include <x86/ifunc.h> | #include <x86/ifunc.h> | ||||
#include <vm/pmap.h> | #include <vm/pmap.h> | ||||
#include <vm/vm.h> | #include <vm/vm.h> | ||||
#include <vm/vm_map.h> | #include <vm/vm_map.h> | ||||
▲ Show 20 Lines • Show All 642 Lines • ▼ Show 20 Lines | if (error) | ||||
return (error); | return (error); | ||||
pcb = td->td_pcb; | pcb = td->td_pcb; | ||||
update_pcb_bases(pcb); | update_pcb_bases(pcb); | ||||
pcb->pcb_gsbase = (register_t)info.base_addr; | pcb->pcb_gsbase = (register_t)info.base_addr; | ||||
update_gdt_gsbase(td, info.base_addr); | update_gdt_gsbase(td, info.base_addr); | ||||
return (0); | return (0); | ||||
} | |||||
void | |||||
bsd_to_linux_regset32(struct reg32 *b_reg, struct linux_pt_regset32 *l_regset) | |||||
{ | |||||
l_regset->ebx = b_reg->r_ebx; | |||||
l_regset->ecx = b_reg->r_ecx; | |||||
l_regset->edx = b_reg->r_edx; | |||||
l_regset->esi = b_reg->r_esi; | |||||
l_regset->edi = b_reg->r_edi; | |||||
l_regset->ebp = b_reg->r_ebp; | |||||
l_regset->eax = b_reg->r_eax; | |||||
l_regset->ds = b_reg->r_ds; | |||||
l_regset->es = b_reg->r_es; | |||||
l_regset->fs = b_reg->r_fs; | |||||
l_regset->gs = b_reg->r_gs; | |||||
l_regset->orig_eax = b_reg->r_eax; | |||||
l_regset->eip = b_reg->r_eip; | |||||
l_regset->cs = b_reg->r_cs; | |||||
l_regset->eflags = b_reg->r_eflags; | |||||
l_regset->esp = b_reg->r_esp; | |||||
l_regset->ss = b_reg->r_ss; | |||||
} | } | ||||
int futex_xchgl_nosmap(int oparg, uint32_t *uaddr, int *oldval); | int futex_xchgl_nosmap(int oparg, uint32_t *uaddr, int *oldval); | ||||
int futex_xchgl_smap(int oparg, uint32_t *uaddr, int *oldval); | int futex_xchgl_smap(int oparg, uint32_t *uaddr, int *oldval); | ||||
DEFINE_IFUNC(, int, futex_xchgl, (int, uint32_t *, int *)) | DEFINE_IFUNC(, int, futex_xchgl, (int, uint32_t *, int *)) | ||||
{ | { | ||||
return ((cpu_stdext_feature & CPUID_STDEXT_SMAP) != 0 ? | return ((cpu_stdext_feature & CPUID_STDEXT_SMAP) != 0 ? | ||||
Show All 38 Lines |