Module Name:    src
Committed By:   maxv
Date:           Sun Feb 25 08:09:07 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64: amd64_trap.S

Log Message:
There are two places where we reload %gs:

 * In setusergs. Here we can't fault. So we don't need to handle this
   case.

 * In intrfastexit for 32bit processes. This case needs to be handled,
   and we already have a label.

So use the label instead of disassembling %rip.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/amd64/amd64/amd64_trap.S

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/amd64_trap.S
diff -u src/sys/arch/amd64/amd64/amd64_trap.S:1.33 src/sys/arch/amd64/amd64/amd64_trap.S:1.34
--- src/sys/arch/amd64/amd64/amd64_trap.S:1.33	Thu Feb 22 08:36:31 2018
+++ src/sys/arch/amd64/amd64/amd64_trap.S	Sun Feb 25 08:09:07 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: amd64_trap.S,v 1.33 2018/02/22 08:36:31 maxv Exp $	*/
+/*	$NetBSD: amd64_trap.S,v 1.34 2018/02/25 08:09:07 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008, 2017 The NetBSD Foundation, Inc.
@@ -400,12 +400,12 @@ NENTRY(check_swapgs)
 5:
 
 	/* Case 3: move to %gs? */
-	movq	TF_RIP(%rsp),%rax
-	movw	(%rax),%ax
-	andb	$070,%ah		/* mask mod/rm from mod/reg/rm */
-	cmpw	$0x8e+050*256,%ax	/* Any move to %gs (reg 5) */
-	jne	2b			/* No - normal kernel fault */
-	jmp	1b			/* Yes - restore %gs */
+	leaq	do_mov_gs(%rip),%rdi
+	cmpq	%rdi,TF_RIP(%rsp)
+	je	1b
+
+	/* None of the above cases */
+	jmp	2b	/* normal kernel fault */
 END(check_swapgs)
 #endif
 

Reply via email to