Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-6]: src/sys/arch/arm/arm32 Pull up revision 1.4 (requested by t...



details:   https://anonhg.NetBSD.org/src/rev/f3451ea9c8a7
branches:  netbsd-1-6
changeset: 529374:f3451ea9c8a7
user:      he <he%NetBSD.org@localhost>
date:      Sat Nov 16 09:59:17 2002 +0000

description:
Pull up revision 1.4 (requested by thorpej in ticket #658):
  Use ldrbt/strbt, and some other cleanups.

diffstat:

 sys/arch/arm/arm32/copystr.S |  128 ++++++++++++++++++------------------------
 1 files changed, 56 insertions(+), 72 deletions(-)

diffs (202 lines):

diff -r dc9b9ad7d545 -r f3451ea9c8a7 sys/arch/arm/arm32/copystr.S
--- a/sys/arch/arm/arm32/copystr.S      Sat Nov 16 09:57:18 2002 +0000
+++ b/sys/arch/arm/arm32/copystr.S      Sat Nov 16 09:59:17 2002 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: copystr.S,v 1.3 2002/03/03 11:22:59 chris Exp $        */
+/*     $NetBSD: copystr.S,v 1.3.8.1 2002/11/16 09:59:17 he Exp $       */
 
 /*
  * Copyright (c) 1995 Mark Brinicombe.
@@ -47,13 +47,6 @@
 Lcurpcb:
        .word   _C_LABEL(curpcb)
 
-Lvm_min_address:
-       .word   VM_MIN_ADDRESS
-Lvm_maxuser_address:
-       .word   VM_MAXUSER_ADDRESS
-Lvm_maxkern_address:
-       .word   _C_LABEL(pmap_curmaxkvaddr)
-
 /*
  * r0 - from
  * r1 - to
@@ -62,28 +55,25 @@
  *
  * Copy string from r0 to r1
  */
-
 ENTRY(copystr)
        stmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
        teq     r2, #0x00000000
        mov     r5, #0x00000000
        moveq   r0, #ENAMETOOLONG
-       beq     Lcopystrexit
+       beq     2f
 
-Lcopystr_loop:
-       ldrb    r4, [r0], #0x0001
+1:     ldrb    r4, [r0], #0x0001
        strb    r4, [r1], #0x0001
        add     r5, r5, #0x00000001
        teq     r4, #0x00000000
        teqne   r5, r2
-       bne     Lcopystr_loop
+       bne     1b
 
        teq     r4, #0x00000000
        moveq   r0, #0x00000000
        movne   r0, #ENAMETOOLONG
 
-Lcopystrexit:
-       teq     r3, #0x00000000
+2:     teq     r3, #0x00000000
        strne   r5, [r3]
 
        ldmfd   sp!, {r4-r5}                    /* stack is 8 byte aligned */
@@ -98,59 +88,13 @@
  *
  * Copy string from user space to kernel space
  */
-
 ENTRY(copyinstr)
        stmfd   sp!, {r4-r6}
 
-       /* Validate user and kernel addresses */
-       ldr     r4, Lvm_min_address
-       cmp     r0, r4
-       bcc     Lbadaddress
-       ldr     r4, Lvm_maxuser_address
-       cmp     r0, r4
-       bcs     Lbadaddress
-       cmp     r1, r4
-       bcc     Lbadaddress
-       ldr     r4, Lvm_maxkern_address
-       ldr     r5, [r4]
-       cmp     r1, r5
-       bcs     Lbadaddress
-
-       /* Do the actual copy */
-       b       do_copyinoutstr
-
-/*
- * r0 - kernel space address
- * r1 - user space address
- * r2 - maxlens
- * r3 - lencopied
- *
- * Copy string from kernel space to user space
- */
-
-ENTRY(copyoutstr)
-       stmfd   sp!, {r4-r6}            /* stack isn't 8 byte aligned */
-
-       /* Validate user and kernel addresses */
-       ldr     r4, Lvm_min_address
-       cmp     r1, r4
-       bcc     Lbadaddress
-       ldr     r4, Lvm_maxuser_address
-       cmp     r1, r4
-       bcs     Lbadaddress
-       cmp     r0, r4
-       bcc     Lbadaddress
-       ldr     r4, Lvm_maxkern_address
-       ldr     r5, [r4]
-       cmp     r0, r5
-       bcs     Lbadaddress
-
-       /* Do the actual copy */
-do_copyinoutstr:
        teq     r2, #0x00000000
        mov     r6, #0x00000000
        moveq   r0, #ENAMETOOLONG
-       beq     Lcopyinoutstrexit
+       beq     2f
 
        ldr     r4, Lcurpcb
        ldr     r4, [r4]
@@ -163,13 +107,12 @@
        add     r5, pc, #Lcopystrfault - . - 8
        str     r5, [r4, #PCB_ONFAULT]
 
-Lcopyinoutstr_loop:
-       ldrb    r5, [r0], #0x0001
+1:     ldrbt   r5, [r0], #0x0001
        strb    r5, [r1], #0x0001
        add     r6, r6, #0x00000001
        teq     r5, #0x00000000
        teqne   r6, r2
-       bne     Lcopyinoutstr_loop
+       bne     1b
 
        mov     r0, #0x00000000
        str     r0, [r4, #PCB_ONFAULT]
@@ -178,8 +121,54 @@
        moveq   r0, #0x00000000
        movne   r0, #ENAMETOOLONG
 
-Lcopyinoutstrexit:
-       teq     r3, #0x00000000
+2:     teq     r3, #0x00000000
+       strne   r6, [r3]
+
+       ldmfd   sp!, {r4-r6}                    /* stack is 8 byte aligned */
+       mov     pc, lr
+
+/*
+ * r0 - kernel space address
+ * r1 - user space address
+ * r2 - maxlens
+ * r3 - lencopied
+ *
+ * Copy string from kernel space to user space
+ */
+ENTRY(copyoutstr)
+       stmfd   sp!, {r4-r6}            /* stack isn't 8 byte aligned */
+
+       teq     r2, #0x00000000
+       mov     r6, #0x00000000
+       moveq   r0, #ENAMETOOLONG
+       beq     2f
+
+       ldr     r4, Lcurpcb
+       ldr     r4, [r4]
+
+#ifdef DIAGNOSTIC
+       teq     r4, #0x00000000
+       beq     Lcopystrpcbfault
+#endif
+
+       add     r5, pc, #Lcopystrfault - . - 8
+       str     r5, [r4, #PCB_ONFAULT]
+
+1:     ldrb    r5, [r0], #0x0001
+       strbt   r5, [r1], #0x0001
+       add     r6, r6, #0x00000001
+       teq     r5, #0x00000000
+       teqne   r6, r2
+       bne     1b
+
+       mov     r0, #0x00000000
+       str     r0, [r4, #PCB_ONFAULT]
+
+       teq     r5, #0x00000000
+       moveq   r0, #0x00000000
+       movne   r0, #ENAMETOOLONG
+
+2:     teq     r3, #0x00000000
        strne   r6, [r3]
 
        ldmfd   sp!, {r4-r6}                    /* stack is 8 byte aligned */
@@ -189,11 +178,6 @@
 Lcopystrfault:
        mov     r0, #0x00000000
        str     r0, [r4, #PCB_ONFAULT]
-
-       /* FALLTHROUGH */
-
-/* Source or Destination address was bad so fail */
-Lbadaddress:
        ldmfd   sp!, {r4-r6}                    /* stack is 8 byte aligned */
        mov     r0, #EFAULT
        mov     pc, lr



Home | Main Index | Thread Index | Old Index