diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2006-11-05 20:39:25 +0000 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gnu.org> | 2009-06-18 00:26:50 +0200 |
commit | 851fdb496728e83cdb3f591a674d3425efc1f11c (patch) | |
tree | db509b0e1331721cfc4228fbdd85a111692d148e /i386/i386/pcb.c | |
parent | 0487d0193161eae0f56d2f9eab0d901dc8d0fe07 (diff) |
2006-11-05 Barry deFreese <bddebian@comcast.net>
[task #5878 --- ``Backport code from GNU Mach's trunk to
gnumach-1-branch: i386_set_gdt, i386_get_gdt'']
* 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.
(GDTSZ): Compute it from USER_GDT and USER_GDT_SLOTS.
* i386/i386/thread.h: Include `gdt.h'.
(struct i386_machine_state): New member `user_gdt'.
* i386/i386/pcb.c (switch_ktss): Copy those slots into the GDT.
* linux/dev/include/linux/head.h: New file.
Diffstat (limited to 'i386/i386/pcb.c')
-rw-r--r-- | i386/i386/pcb.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/i386/i386/pcb.c b/i386/i386/pcb.c index 9665caa..a18a5e6 100644 --- a/i386/i386/pcb.c +++ b/i386/i386/pcb.c @@ -191,6 +191,13 @@ void switch_ktss(pcb) set_ldt(USER_LDT); } } + + /* Copy in the per-thread GDT slots. No reloading is necessary + because just restoring the segment registers on the way back to + user mode reloads the shadow registers from the in-memory GDT. */ + memcpy (gdt_desc_p (mycpu, USER_GDT), + pcb->ims.user_gdt, sizeof pcb->ims.user_gdt); + /* * Load the floating-point context, if necessary. */ |