Module Name: src Committed By: bouyer Date: Mon Feb 27 19:52:59 UTC 2012
Modified Files: src/sys/arch/i386/i386: machdep.c Log Message: Do not special-case XEN and always use the proper selectors for %fs and %gs in buildcontext() and setregs(). The consequence was that signal handlers would have the wrong %fs/%gs. Found by running atf tests under Xen/i386. To generate a diff of this commit: cvs rdiff -u -r1.721 -r1.722 src/sys/arch/i386/i386/machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/i386/machdep.c diff -u src/sys/arch/i386/i386/machdep.c:1.721 src/sys/arch/i386/i386/machdep.c:1.722 --- src/sys/arch/i386/i386/machdep.c:1.721 Fri Feb 24 08:06:07 2012 +++ src/sys/arch/i386/i386/machdep.c Mon Feb 27 19:52:59 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.721 2012/02/24 08:06:07 cherry Exp $ */ +/* $NetBSD: machdep.c,v 1.722 2012/02/27 19:52:59 bouyer Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2000, 2004, 2006, 2008, 2009 @@ -67,7 +67,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.721 2012/02/24 08:06:07 cherry Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.722 2012/02/27 19:52:59 bouyer Exp $"); #include "opt_beep.h" #include "opt_compat_ibcs2.h" @@ -723,13 +723,8 @@ buildcontext(struct lwp *l, int sel, voi { struct trapframe *tf = l->l_md.md_regs; -#ifndef XEN tf->tf_gs = GSEL(GUGS_SEL, SEL_UPL); tf->tf_fs = GSEL(GUFS_SEL, SEL_UPL); -#else - tf->tf_gs = GSEL(GUDATA_SEL, SEL_UPL); - tf->tf_fs = GSEL(GUDATA_SEL, SEL_UPL); -#endif tf->tf_es = GSEL(GUDATA_SEL, SEL_UPL); tf->tf_ds = GSEL(GUDATA_SEL, SEL_UPL); tf->tf_eip = (int)catcher; @@ -970,13 +965,8 @@ setregs(struct lwp *l, struct exec_packa memcpy(&pcb->pcb_gsd, &gdt[GUDATA_SEL], sizeof(pcb->pcb_gsd)); tf = l->l_md.md_regs; -#ifndef XEN tf->tf_gs = GSEL(GUGS_SEL, SEL_UPL); tf->tf_fs = GSEL(GUFS_SEL, SEL_UPL); -#else - tf->tf_gs = LSEL(LUDATA_SEL, SEL_UPL); - tf->tf_fs = LSEL(LUDATA_SEL, SEL_UPL); -#endif tf->tf_es = LSEL(LUDATA_SEL, SEL_UPL); tf->tf_ds = LSEL(LUDATA_SEL, SEL_UPL); tf->tf_edi = 0;