From 3b39a75826362826518c252c2a9a9c8c862e9336 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 4 Oct 2002 02:44:47 +0000 Subject: 2002-10-03 Roland McGrath * i386/include/mach/i386/mach_i386.defs (i386_set_gdt, i386_get_gdt): New routines. * i386/i386/user_ldt.c (i386_set_gdt, i386_get_gdt): New functions. * i386/i386/gdt.h (USER_GDT, USER_GDT_SLOTS): New macros. * i386/i386/thread.h (struct i386_machine_state): New member user_gdt. * i386/i386/pcb.c (switch_ktss): Copy those slots into the GDT. --- i386/include/mach/i386/mach_i386.defs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/i386/include/mach/i386/mach_i386.defs b/i386/include/mach/i386/mach_i386.defs index 57f43188..b8357ccc 100644 --- a/i386/include/mach/i386/mach_i386.defs +++ b/i386/include/mach/i386/mach_i386.defs @@ -94,3 +94,19 @@ routine i386_io_perm_modify( target_task : task_t; io_perm : io_perm_t; enable : boolean_t); + +/* Modify one of a few available thread-specific segment descriptor slots. + The SELECTOR must be a value from a previous call (on any thread), + or -1 to allocate an available slot and return the segment selector for it. + These slots are copied into the CPU on each thread switch. + Returns KERN_NO_SPACE when there are no more slots available. */ +routine i386_set_gdt( + target_thread : thread_t; + inout selector : int; + desc : descriptor_t); + +/* Fetch a segment descriptor set with a prior i386_set_gdt call. */ +routine i386_get_gdt( + target_thread : thread_t; + selector : int; + out desc : descriptor_t); -- cgit v1.2.3