Module Name: src Committed By: maxv Date: Fri Dec 1 21:22:45 UTC 2017
Modified Files: src/sys/arch/amd64/amd64: machdep.c process_machdep.c Log Message: Don't even bother with the trap frame, and force the default values. To generate a diff of this commit: cvs rdiff -u -r1.278 -r1.279 src/sys/arch/amd64/amd64/machdep.c cvs rdiff -u -r1.37 -r1.38 src/sys/arch/amd64/amd64/process_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/amd64/amd64/machdep.c diff -u src/sys/arch/amd64/amd64/machdep.c:1.278 src/sys/arch/amd64/amd64/machdep.c:1.279 --- src/sys/arch/amd64/amd64/machdep.c:1.278 Mon Nov 27 09:18:01 2017 +++ src/sys/arch/amd64/amd64/machdep.c Fri Dec 1 21:22:45 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.278 2017/11/27 09:18:01 maxv Exp $ */ +/* $NetBSD: machdep.c,v 1.279 2017/12/01 21:22:45 maxv Exp $ */ /* * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011 @@ -110,7 +110,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.278 2017/11/27 09:18:01 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.279 2017/12/01 21:22:45 maxv Exp $"); /* #define XENDEBUG_LOW */ @@ -1892,17 +1892,17 @@ cpu_getmcontext(struct lwp *l, mcontext_ mcp->__gregs[_REG_RBP] = tf->tf_rbp; mcp->__gregs[_REG_RBX] = tf->tf_rbx; mcp->__gregs[_REG_RAX] = tf->tf_rax; - mcp->__gregs[_REG_GS] = tf->tf_gs & 0xFFFF; - mcp->__gregs[_REG_FS] = tf->tf_fs & 0xFFFF; - mcp->__gregs[_REG_ES] = tf->tf_es & 0xFFFF; - mcp->__gregs[_REG_DS] = tf->tf_ds & 0xFFFF; + mcp->__gregs[_REG_GS] = 0; + mcp->__gregs[_REG_FS] = 0; + mcp->__gregs[_REG_ES] = GSEL(GUDATA_SEL, SEL_UPL); + mcp->__gregs[_REG_DS] = GSEL(GUDATA_SEL, SEL_UPL); mcp->__gregs[_REG_TRAPNO] = tf->tf_trapno; mcp->__gregs[_REG_ERR] = tf->tf_err; mcp->__gregs[_REG_RIP] = tf->tf_rip; - mcp->__gregs[_REG_CS] = tf->tf_cs & 0xFFFF; + mcp->__gregs[_REG_CS] = LSEL(LUCODE_SEL, SEL_UPL); mcp->__gregs[_REG_RFLAGS] = tf->tf_rflags; mcp->__gregs[_REG_RSP] = tf->tf_rsp; - mcp->__gregs[_REG_SS] = tf->tf_ss & 0xFFFF; + mcp->__gregs[_REG_SS] = LSEL(LUDATA_SEL, SEL_UPL); if ((ras_rip = (__greg_t)ras_lookup(l->l_proc, (void *) mcp->__gregs[_REG_RIP])) != -1) @@ -1949,18 +1949,18 @@ cpu_setmcontext(struct lwp *l, const mco tf->tf_rbp = gr[_REG_RBP]; tf->tf_rbx = gr[_REG_RBX]; tf->tf_rax = gr[_REG_RAX]; - tf->tf_gs = gr[_REG_GS] & 0xFFFF; - tf->tf_fs = gr[_REG_FS] & 0xFFFF; - tf->tf_es = gr[_REG_ES] & 0xFFFF; - tf->tf_ds = gr[_REG_DS] & 0xFFFF; + tf->tf_gs = 0; + tf->tf_fs = 0; + tf->tf_es = GSEL(GUDATA_SEL, SEL_UPL); + tf->tf_ds = GSEL(GUDATA_SEL, SEL_UPL); /* trapno, err not touched */ tf->tf_rip = gr[_REG_RIP]; - tf->tf_cs = gr[_REG_CS] & 0xFFFF; + tf->tf_cs = LSEL(LUCODE_SEL, SEL_UPL); rflags = tf->tf_rflags; rflags &= ~PSL_USER; tf->tf_rflags = rflags | (gr[_REG_RFLAGS] & PSL_USER); tf->tf_rsp = gr[_REG_RSP]; - tf->tf_ss = gr[_REG_SS] & 0xFFFF; + tf->tf_ss = LSEL(LUDATA_SEL, SEL_UPL); #ifdef XEN /* Index: src/sys/arch/amd64/amd64/process_machdep.c diff -u src/sys/arch/amd64/amd64/process_machdep.c:1.37 src/sys/arch/amd64/amd64/process_machdep.c:1.38 --- src/sys/arch/amd64/amd64/process_machdep.c:1.37 Mon Nov 27 09:18:01 2017 +++ src/sys/arch/amd64/amd64/process_machdep.c Fri Dec 1 21:22:45 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: process_machdep.c,v 1.37 2017/11/27 09:18:01 maxv Exp $ */ +/* $NetBSD: process_machdep.c,v 1.38 2017/12/01 21:22:45 maxv Exp $ */ /* * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc. @@ -74,7 +74,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.37 2017/11/27 09:18:01 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.38 2017/12/01 21:22:45 maxv Exp $"); #include "opt_xen.h" #include <sys/param.h> @@ -125,17 +125,17 @@ process_read_regs(struct lwp *l, struct regs->regs[_REG_RBP] = tf->tf_rbp; regs->regs[_REG_RBX] = tf->tf_rbx; regs->regs[_REG_RAX] = tf->tf_rax; - regs->regs[_REG_GS] = tf->tf_gs & 0xFFFF; - regs->regs[_REG_FS] = tf->tf_fs & 0xFFFF; - regs->regs[_REG_ES] = tf->tf_es & 0xFFFF; - regs->regs[_REG_DS] = tf->tf_ds & 0xFFFF; + regs->regs[_REG_GS] = 0; + regs->regs[_REG_FS] = 0; + regs->regs[_REG_ES] = GSEL(GUDATA_SEL, SEL_UPL); + regs->regs[_REG_DS] = GSEL(GUDATA_SEL, SEL_UPL); regs->regs[_REG_TRAPNO] = tf->tf_trapno; regs->regs[_REG_ERR] = tf->tf_err; regs->regs[_REG_RIP] = tf->tf_rip; - regs->regs[_REG_CS] = tf->tf_cs & 0xFFFF; + regs->regs[_REG_CS] = LSEL(LUCODE_SEL, SEL_UPL); regs->regs[_REG_RFLAGS] = tf->tf_rflags; regs->regs[_REG_RSP] = tf->tf_rsp; - regs->regs[_REG_SS] = tf->tf_ss & 0xFFFF; + regs->regs[_REG_SS] = LSEL(LUDATA_SEL, SEL_UPL); return 0; } @@ -204,16 +204,16 @@ process_write_regs(struct lwp *l, const tf->tf_rbp = regs[_REG_RBP]; tf->tf_rbx = regs[_REG_RBX]; tf->tf_rax = regs[_REG_RAX]; - tf->tf_gs = regs[_REG_GS] & 0xFFFF; - tf->tf_fs = regs[_REG_FS] & 0xFFFF; - tf->tf_es = regs[_REG_ES] & 0xFFFF; - tf->tf_ds = regs[_REG_DS] & 0xFFFF; + tf->tf_gs = 0; + tf->tf_fs = 0; + tf->tf_es = GSEL(GUDATA_SEL, SEL_UPL); + tf->tf_ds = GSEL(GUDATA_SEL, SEL_UPL); /* trapno, err not touched */ tf->tf_rip = regs[_REG_RIP]; - tf->tf_cs = regs[_REG_CS] & 0xFFFF; + tf->tf_cs = LSEL(LUCODE_SEL, SEL_UPL); tf->tf_rflags = regs[_REG_RFLAGS]; tf->tf_rsp = regs[_REG_RSP]; - tf->tf_ss = regs[_REG_SS] & 0xFFFF; + tf->tf_ss = LSEL(LUDATA_SEL, SEL_UPL); #ifdef XEN /* see comment in cpu_setmcontext */