Module Name:    src
Committed By:   martin
Date:           Sun Feb  4 12:40:31 UTC 2018

Modified Files:
        src/sys/arch/i386/i386 [netbsd-8]: copy.S
Removed Files:
        src/sys/arch/i386/conf [netbsd-8]: kern.ldscript.4MB largepages.inc

Log Message:
Pull up following revision(s) (requested by maxv519):
        sys/arch/i386/conf/largepages.inc: file removal
        sys/arch/i386/conf/kern.ldscript.4MB: file removal
        sys/arch/i386/i386/copy.S: revision 1.26
Sync with amd64, in particular, add END() markers, don't fall through
functions, narrow the copy windows, and remove suword.
Remove these files. No one cares about this on i386, and there is no
point in keeping undocumented options nobody understands anyway.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r0 src/sys/arch/i386/conf/kern.ldscript.4MB
cvs rdiff -u -r1.4 -r0 src/sys/arch/i386/conf/largepages.inc
cvs rdiff -u -r1.25 -r1.25.8.1 src/sys/arch/i386/i386/copy.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/i386/i386/copy.S
diff -u src/sys/arch/i386/i386/copy.S:1.25 src/sys/arch/i386/i386/copy.S:1.25.8.1
--- src/sys/arch/i386/i386/copy.S:1.25	Fri Sep 16 12:28:41 2016
+++ src/sys/arch/i386/i386/copy.S	Sun Feb  4 12:40:31 2018
@@ -1,7 +1,6 @@
-/*	$NetBSD: copy.S,v 1.25 2016/09/16 12:28:41 maxv Exp $	*/
-/*	NetBSD: locore.S,v 1.34 2005/04/01 11:59:31 yamt Exp $	*/
+/*	$NetBSD: copy.S,v 1.25.8.1 2018/02/04 12:40:31 martin Exp $	*/
 
-/*-
+/*
  * Copyright (c) 1998, 2000, 2004, 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
@@ -30,7 +29,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*-
+/*
  * Copyright (c) 1990 The Regents of the University of California.
  * All rights reserved.
  *
@@ -65,7 +64,7 @@
  */
 
 #include <machine/asm.h>
-__KERNEL_RCSID(0, "$NetBSD: copy.S,v 1.25 2016/09/16 12:28:41 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: copy.S,v 1.25.8.1 2018/02/04 12:40:31 martin Exp $");
 
 #include "assym.h"
 
@@ -75,8 +74,8 @@ __KERNEL_RCSID(0, "$NetBSD: copy.S,v 1.2
 #include <machine/cputypes.h>
 
 #define GET_CURPCB(reg)	\
-	movl	CPUVAR(CURLWP), reg; \
-	movl	L_PCB(reg), reg
+	movl	CPUVAR(CURLWP),reg; \
+	movl	L_PCB(reg),reg
 
 /*
  * These are arranged so that the abnormal case is a forwards
@@ -86,10 +85,10 @@ __KERNEL_RCSID(0, "$NetBSD: copy.S,v 1.2
 #define DEFERRED_SWITCH_CHECK \
 	CHECK_DEFERRED_SWITCH			; \
 	jnz	99f				; \
-	98:
+98:
 
 #define DEFERRED_SWITCH_CALL \
-	99:						; \
+99:						; \
 	call	_C_LABEL(do_pmap_load)		; \
 	jmp	98b
 
@@ -109,25 +108,26 @@ LABEL(x86_copyfunc_start)
  */
 NENTRY(do_pmap_load)
 	pushl	%ebp
-	movl	%esp, %ebp
+	movl	%esp,%ebp
 	pushl	%ebx
-	movl	CPUVAR(CURLWP), %ebx
+	movl	CPUVAR(CURLWP),%ebx
 1:
 	incl	L_NOPREEMPT(%ebx)
 	call	_C_LABEL(pmap_load)
 	decl	L_NOPREEMPT(%ebx)
 	jnz	2f
-	cmpl	$0, L_DOPREEMPT(%ebx)
+	cmpl	$0,L_DOPREEMPT(%ebx)
 	jz	2f
 	pushl	$0
 	call	_C_LABEL(kpreempt)
-	addl	$4, %esp
+	addl	$4,%esp
 2:
-	cmpl	$0, CPUVAR(WANT_PMAPLOAD)
+	cmpl	$0,CPUVAR(WANT_PMAPLOAD)
 	jnz	1b
 	popl	%ebx
 	leave
 	ret
+END(do_pmap_load)
 
 /*
  * void *return_address(unsigned int level);
@@ -151,12 +151,12 @@ ENTRY(return_address)
 	movl	0x4(%eax),%eax
 	movl	$0,PCB_ONFAULT(%edx)
 	ret
+END(return_address)
 
 /*
  * int kcopy(const void *from, void *to, size_t len);
- * Copy len bytes, abort on fault.
+ * Copy len bytes from and to kernel memory, and abort on fault.
  */
-/* LINTSTUB: Func: int kcopy(const void *from, void *to, size_t len) */
 ENTRY(kcopy)
 	pushl	%esi
 	pushl	%edi
@@ -206,6 +206,7 @@ ENTRY(kcopy)
 	popl	%esi
 	xorl	%eax,%eax
 	ret
+END(kcopy)
 
 /*****************************************************************************/
 
@@ -219,110 +220,107 @@ ENTRY(kcopy)
  * Copy len bytes into the user's address space.
  * see copyout(9)
  */
-
-/* LINTSTUB: Func: int copyout(const void *kaddr, void *uaddr, size_t len) */
 ENTRY(copyout)
 	DEFERRED_SWITCH_CHECK
 	pushl	%esi
 	pushl	%edi
-	movl	12(%esp),%esi
-	movl	16(%esp),%edi
-	movl	20(%esp),%eax
-.Lcopyout_start:
-	/*
-	 * We check that the end of the destination buffer is not past the end
-	 * of the user's address space.
-	 */
+	movl	12(%esp),%esi	/* from */
+	movl	16(%esp),%edi	/* to */
+	movl	20(%esp),%eax	/* len */
+
 	movl	%edi,%edx
 	addl	%eax,%edx
 	jc	_C_LABEL(copy_efault)
 	cmpl	$VM_MAXUSER_ADDRESS,%edx
 	ja	_C_LABEL(copy_efault)
+
+.Lcopyout_start:
 	movl	%eax,%ecx
 	shrl	$2,%ecx
 	rep
 	movsl
 	andl	$3,%eax
-	jz	1f
+	jz	.Lcopyout_end
 	movl	%eax,%ecx
 	rep
 	movsb
-1:
 .Lcopyout_end:
+
 	popl	%edi
 	popl	%esi
 	xorl	%eax,%eax
 	ret
 	DEFERRED_SWITCH_CALL
+END(copyout)
 
 /*
  * int copyin(const void *from, void *to, size_t len);
  * Copy len bytes from the user's address space.
  * see copyin(9)
  */
-
-/* LINTSTUB: Func: int copyin(const void *uaddr, void *kaddr, size_t len) */
 ENTRY(copyin)
 	DEFERRED_SWITCH_CHECK
 	pushl	%esi
 	pushl	%edi
-	movl	12(%esp),%esi
-	movl	16(%esp),%edi
-	movl	20(%esp),%eax
-	/*
-	 * We check that the end of the source buffer is not past the end of
-	 * the user's address space.  If it's not, then we only need to check
-	 * that each page is readable, and the CPU will do that for us.
-	 */
-.Lcopyin_start:
+	movl	12(%esp),%esi	/* from */
+	movl	16(%esp),%edi	/* to */
+	movl	20(%esp),%eax	/* len */
+
 	movl	%esi,%edx
 	addl	%eax,%edx
 	jc	_C_LABEL(copy_efault)
 	cmpl	$VM_MAXUSER_ADDRESS,%edx
 	ja	_C_LABEL(copy_efault)
+
+.Lcopyin_start:
 	movl	%eax,%ecx
 	shrl	$2,%ecx
 	rep
 	movsl
 	andl	$3,%eax
-	jz	1f
+	jz	.Lcopyin_end
 	movl	%eax,%ecx
 	rep
 	movsb
-1:
 .Lcopyin_end:
+
 	popl	%edi
 	popl	%esi
 	xorl	%eax,%eax
 	ret
 	DEFERRED_SWITCH_CALL
+END(copyin)
 
-/* LINTSTUB: Ignore */
 NENTRY(copy_efault)
 	movl	$EFAULT,%eax
+	popl	%edi
+	popl	%esi
+	ret
+END(copy_efault)
 
 /*
  * kcopy_fault is used by kcopy and copy_fault is used by copyin/out.
  *
  * they're distinguished for lazy pmap switching.  see trap().
  */
-/* LINTSTUB: Ignore */
+
 NENTRY(kcopy_fault)
 	popl	%edi
 	popl	%esi
 	ret
+END(kcopy_fault)
 
-/* LINTSTUB: Ignore */
 NENTRY(copy_fault)
 	popl	%edi
 	popl	%esi
 	ret
+END(copy_fault)
 
-/* LINTSTUB: Ignore */
 NENTRY(return_address_fault)
-	movl $0,PCB_ONFAULT(%edx)
-	movl $0,%eax
+	movl	$0,PCB_ONFAULT(%edx)
+	movl	$0,%eax
 	ret
+END(return_address_fault)
 
 /*
  * int copyoutstr(const void *from, void *to, size_t maxlen, size_t *lencopied);
@@ -332,16 +330,14 @@ NENTRY(return_address_fault)
  * return 0 or EFAULT.
  * see copyoutstr(9)
  */
-/* LINTSTUB: Func: int copyoutstr(const void *kaddr, void *uaddr, size_t len, size_t *done) */
 ENTRY(copyoutstr)
 	DEFERRED_SWITCH_CHECK
 	pushl	%esi
 	pushl	%edi
-	movl	12(%esp),%esi		/* esi = from */
-	movl	16(%esp),%edi		/* edi = to */
-	movl	20(%esp),%edx		/* edx = maxlen */
-.Lcopyoutstr_start:
-5:
+	movl	12(%esp),%esi	/* esi = from */
+	movl	16(%esp),%edi	/* edi = to */
+	movl	20(%esp),%edx	/* edx = maxlen */
+
 	/*
 	 * Get min(%edx, VM_MAXUSER_ADDRESS-%edi).
 	 */
@@ -352,16 +348,16 @@ ENTRY(copyoutstr)
 	jae	1f
 	movl	%eax,%edx
 	movl	%eax,20(%esp)
-
 1:	incl	%edx
 
+.Lcopyoutstr_start:
 1:	decl	%edx
 	jz	2f
 	lodsb
 	stosb
 	testb	%al,%al
-.Lcopyoutstr_end:
 	jnz	1b
+.Lcopyoutstr_end:
 
 	/* Success -- 0 byte reached. */
 	decl	%edx
@@ -374,6 +370,7 @@ ENTRY(copyoutstr)
 	movl	$ENAMETOOLONG,%eax
 	jmp	copystr_return
 	DEFERRED_SWITCH_CALL
+END(copyoutstr)
 
 /*
  * int copyinstr(const void *from, void *to, size_t maxlen, size_t *lencopied);
@@ -383,7 +380,6 @@ ENTRY(copyoutstr)
  * return 0 or EFAULT.
  * see copyinstr(9)
  */
-/* LINTSTUB: Func: int copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done) */
 ENTRY(copyinstr)
 	DEFERRED_SWITCH_CHECK
 	pushl	%esi
@@ -395,7 +391,6 @@ ENTRY(copyinstr)
 	/*
 	 * Get min(%edx, VM_MAXUSER_ADDRESS-%esi).
 	 */
-.Lcopyinstr_start:
 	movl	$VM_MAXUSER_ADDRESS,%eax
 	subl	%esi,%eax
 	jc	_C_LABEL(copystr_efault)
@@ -403,16 +398,16 @@ ENTRY(copyinstr)
 	jae	1f
 	movl	%eax,%edx
 	movl	%eax,20(%esp)
-
 1:	incl	%edx
 
+.Lcopyinstr_start:
 1:	decl	%edx
 	jz	2f
 	lodsb
 	stosb
 	testb	%al,%al
-.Lcopyinstr_end:
 	jnz	1b
+.Lcopyinstr_end:
 
 	/* Success -- 0 byte reached. */
 	decl	%edx
@@ -425,12 +420,13 @@ ENTRY(copyinstr)
 	movl	$ENAMETOOLONG,%eax
 	jmp	copystr_return
 	DEFERRED_SWITCH_CALL
+END(copyinstr)
 
-/* LINTSTUB: Ignore */
 NENTRY(copystr_efault)
 	movl	$EFAULT,%eax
+	jmp	copystr_return
+END(copystr_efault)
 
-/* LINTSTUB: Ignore */
 NENTRY(copystr_fault)
 copystr_return:
 	/* Set *lencopied and return %eax. */
@@ -444,6 +440,7 @@ copystr_return:
 8:	popl	%edi
 	popl	%esi
 	ret
+END(copystr_fault)
 
 /*
  * int copystr(const void *from, void *to, size_t maxlen, size_t *lencopied);
@@ -452,7 +449,6 @@ copystr_return:
  * string is too long, return ENAMETOOLONG; else return 0.
  * see copystr(9)
  */
-/* LINTSTUB: Func: int copystr(const void *kfaddr, void *kdaddr, size_t len, size_t *done) */
 ENTRY(copystr)
 	pushl	%esi
 	pushl	%edi
@@ -488,13 +484,13 @@ ENTRY(copystr)
 7:	popl	%edi
 	popl	%esi
 	ret
+END(copystr)
 
 /*
  * long fuword(const void *uaddr);
  * Fetch an int from the user's address space.
  * see fuword(9)
  */
-/* LINTSTUB: Func: long fuword(const void *base) */
 ENTRY(fuword)
 	DEFERRED_SWITCH_CHECK
 	movl	4(%esp),%edx
@@ -502,10 +498,13 @@ ENTRY(fuword)
 	ja	_C_LABEL(fusuaddrfault)
 	GET_CURPCB(%ecx)
 	movl	$_C_LABEL(fusufault),PCB_ONFAULT(%ecx)
+
 	movl	(%edx),%eax
+
 	movl	$0,PCB_ONFAULT(%ecx)
 	ret
 	DEFERRED_SWITCH_CALL
+END(fuword)
 
 /*
  * int fuswintr(const void *uaddr);
@@ -513,9 +512,8 @@ ENTRY(fuword)
  * interrupt.
  * see fuswintr(9)
  */
-/* LINTSTUB: Func: int fuswintr(const void *base) */
 ENTRY(fuswintr)
-	cmpl	$TLBSTATE_VALID, CPUVAR(TLBSTATE)
+	cmpl	$TLBSTATE_VALID,CPUVAR(TLBSTATE)
 	jnz	_C_LABEL(fusuaddrfault)
 	movl	4(%esp),%edx
 	cmpl	$VM_MAXUSER_ADDRESS-2,%edx
@@ -523,16 +521,18 @@ ENTRY(fuswintr)
 	movl	CPUVAR(CURLWP),%ecx
 	movl	L_PCB(%ecx),%ecx
 	movl	$_C_LABEL(fusubail),PCB_ONFAULT(%ecx)
+
 	movzwl	(%edx),%eax
+
 	movl	$0,PCB_ONFAULT(%ecx)
 	ret
+END(fuswintr)
 
 /*
  * int fubyte(const void *uaddr);
  * Fetch a byte from the user's address space.
  * see fubyte(9)
  */
-/* LINTSTUB: Func: int fubyte(const void *base) */
 ENTRY(fubyte)
 	DEFERRED_SWITCH_CHECK
 	movl	4(%esp),%edx
@@ -540,58 +540,41 @@ ENTRY(fubyte)
 	ja	_C_LABEL(fusuaddrfault)
 	GET_CURPCB(%ecx)
 	movl	$_C_LABEL(fusufault),PCB_ONFAULT(%ecx)
+
 	movzbl	(%edx),%eax
+
 	movl	$0,PCB_ONFAULT(%ecx)
 	ret
 	DEFERRED_SWITCH_CALL
+END(fubyte)
 
 /*
  * Handle faults from [fs]u*().  Clean up and return -1.
  */
-/* LINTSTUB: Ignore */
 NENTRY(fusufault)
 	movl	$0,PCB_ONFAULT(%ecx)
 	movl	$-1,%eax
 	ret
+END(fusufault)
 
 /*
  * Handle faults from [fs]u*().  Clean up and return -1.  This differs from
  * fusufault() in that trap() will recognize it and return immediately rather
  * than trying to page fault.
  */
-/* LINTSTUB: Ignore */
 NENTRY(fusubail)
 	movl	$0,PCB_ONFAULT(%ecx)
 	movl	$-1,%eax
 	ret
+END(fusubail)
 
 /*
  * Handle earlier faults from [fs]u*(), due to our of range addresses.
  */
-/* LINTSTUB: Ignore */
 NENTRY(fusuaddrfault)
 	movl	$-1,%eax
 	ret
-
-/*
- * int suword(void *uaddr, long x);
- * Store an int in the user's address space.
- * see suword(9)
- */
-/* LINTSTUB: Func: int suword(void *base, long c) */
-ENTRY(suword)
-	DEFERRED_SWITCH_CHECK
-	movl	4(%esp),%edx
-	cmpl	$VM_MAXUSER_ADDRESS-4,%edx
-	ja	_C_LABEL(fusuaddrfault)
-	GET_CURPCB(%ecx)
-	movl	$_C_LABEL(fusufault),PCB_ONFAULT(%ecx)
-	movl	8(%esp),%eax
-	movl	%eax,(%edx)
-	xorl	%eax,%eax
-	movl	%eax,PCB_ONFAULT(%ecx)
-	ret
-	DEFERRED_SWITCH_CALL
+END(fusuaddrfault)
 
 /*
  * int suswintr(void *uaddr, short x);
@@ -599,9 +582,8 @@ ENTRY(suword)
  * interrupt.
  * see suswintr(9)
  */
-/* LINTSTUB: Func: int suswintr(void *base, short c) */
 ENTRY(suswintr)
-	cmpl	$TLBSTATE_VALID, CPUVAR(TLBSTATE)
+	cmpl	$TLBSTATE_VALID,CPUVAR(TLBSTATE)
 	jnz	_C_LABEL(fusuaddrfault)
 	movl	4(%esp),%edx
 	cmpl	$VM_MAXUSER_ADDRESS-2,%edx
@@ -610,17 +592,19 @@ ENTRY(suswintr)
 	movl	L_PCB(%ecx),%ecx
 	movl	$_C_LABEL(fusubail),PCB_ONFAULT(%ecx)
 	movl	8(%esp),%eax
+
 	movw	%ax,(%edx)
+
 	xorl	%eax,%eax
 	movl	%eax,PCB_ONFAULT(%ecx)
 	ret
+END(suswintr)
 
 /*
  * int subyte(void *uaddr, char x);
  * Store a byte in the user's address space.
  * see subyte(9)
  */
-/* LINTSTUB: Func: int subyte(void *base, int c) */
 ENTRY(subyte)
 	DEFERRED_SWITCH_CHECK
 	movl	4(%esp),%edx
@@ -629,11 +613,14 @@ ENTRY(subyte)
 	GET_CURPCB(%ecx)
 	movl	$_C_LABEL(fusufault),PCB_ONFAULT(%ecx)
 	movb	8(%esp),%al
+
 	movb	%al,(%edx)
+
 	xorl	%eax,%eax
 	movl	%eax,PCB_ONFAULT(%ecx)
 	ret
 	DEFERRED_SWITCH_CALL
+END(subyte)
 
 /*
  * Compare-and-swap the 32-bit integer in the user-space.
@@ -642,32 +629,38 @@ ENTRY(subyte)
  */
 ENTRY(ucas_32)
 	DEFERRED_SWITCH_CHECK
-	movl	4(%esp), %edx
-	movl	8(%esp), %eax
-	movl	12(%esp), %ecx
+	movl	4(%esp),%edx
+	movl	8(%esp),%eax
+	movl	12(%esp),%ecx
 	/* Fail if kernel-space */
-	cmpl	$VM_MAXUSER_ADDRESS-4, %edx
+	cmpl	$VM_MAXUSER_ADDRESS-4,%edx
 	ja	_C_LABEL(ucas_efault)
-	/* Label for fault handler */
+
 .Lucas32_start:
 	/* Perform the CAS */
 	lock
-	cmpxchgl %ecx, (%edx)
+	cmpxchgl %ecx,(%edx)
 .Lucas32_end:
+
 	/*
 	 * Note: %eax is "old" value.
 	 * Set the return values.
 	 */
-	movl	16(%esp), %edx
-	movl	%eax, (%edx)
-	xorl	%eax, %eax
+	movl	16(%esp),%edx
+	movl	%eax,(%edx)
+	xorl	%eax,%eax
 	ret
 	DEFERRED_SWITCH_CALL
+END(ucas_32)
 
 NENTRY(ucas_efault)
-	mov	$EFAULT, %eax
+	movl	$EFAULT,%eax
+	ret
+END(ucas_efault)
+
 NENTRY(ucas_fault)
 	ret
+END(ucas_fault)
 
 /*
  * int	ucas_int(volatile int *uptr, int old, int new, int *ret);
@@ -694,12 +687,13 @@ ENTRY(x86_copyargs)
 	 * is:
 	 * 	(2 + SYS_MAXSYSARGS) * 4 = 10 * 4
 	 */
-.Lx86_copyargs_start:
 	movl	%esi,%eax
 	addl	$(10 * 4),%eax
 	jc	_C_LABEL(x86_copyargs_efault)
 	cmpl	$VM_MAXUSER_ADDRESS,%eax
 	ja	_C_LABEL(x86_copyargs_efault)
+
+.Lx86_copyargs_start:
 	/* There are a maximum of 8 args + 2 for syscall indirect */
 	cmp	$16,%ecx
 	movl	(%esi),%eax
@@ -710,12 +704,11 @@ ENTRY(x86_copyargs)
 	movl	12(%esi),%ecx
 	movl	%eax,8(%edx)
 	movl	%ecx,12(%edx)
+
 	ja	2f		/* Optimise since most sycalls have <= 4 args */
-1:
-	popl	%esi
-	xorl	%eax,%eax
-	ret
+	jmp	.Lx86_copyargs_end
 2:
+
 	movl	16(%esi),%eax
 	movl	20(%esi),%ecx
 	movl	%eax,16(%edx)
@@ -729,17 +722,23 @@ ENTRY(x86_copyargs)
 	movl	%eax,32(%edx)
 	movl	%ecx,36(%edx)
 .Lx86_copyargs_end:
-	jmp 1b
 
-/* LINTSTUB: Ignore */
+	popl	%esi
+	xorl	%eax,%eax
+	ret
+	DEFERRED_SWITCH_CALL
+END(x86_copyargs)
+
 NENTRY(x86_copyargs_efault)
 	movl	$EFAULT,%eax
+	popl	%esi
+	ret
+END(x86_copyargs_efault)
 
-/* LINTSTUB: Ignore */
 NENTRY(x86_copyargs_fault)
 	popl	%esi
 	ret
-	DEFERRED_SWITCH_CALL
+END(x86_copyargs_fault)
 
 /*
  * Label must be after all copy functions.
@@ -751,6 +750,7 @@ LABEL(x86_copyfunc_end)
  */
 	.section ".rodata"
 	.globl _C_LABEL(onfault_table)
+
 _C_LABEL(onfault_table):
 	.long .Lcopyin_start
 	.long .Lcopyin_end

Reply via email to