linux-mips
[Top] [All Lists]

memcpy.S patch in 64-bit

To: Ralf Baechle <ralf@oss.sgi.com>, "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>, linux-mips@oss.sgi.com
Subject: memcpy.S patch in 64-bit
From: Carsten Langgaard <carstenl@mips.com>
Date: Thu, 08 Aug 2002 15:24:47 +0200
Sender: owner-linux-mips@oss.sgi.com
The __copy_user function (in arch/mips64/lib/memcpy.S) calls __bzero.
We can't do that because __bzero might modify len, which we want to
return in case of an error.
The following patch take care of the problem.

/Carsten


--
_    _ ____  ___   Carsten Langgaard   Mailto:carstenl@mips.com
|\  /|||___)(___   MIPS Denmark        Direct: +45 4486 5527
| \/ |||    ____)  Lautrupvang 4B      Switch: +45 4486 5555
  TECHNOLOGIES     2750 Ballerup       Fax...: +45 4486 5556
                   Denmark             http://www.mips.com


Index: arch/mips64/lib/memcpy.S
===================================================================
RCS file: /cvs/linux/arch/mips64/lib/memcpy.S,v
retrieving revision 1.9.2.1
diff -u -r1.9.2.1 memcpy.S
--- arch/mips64/lib/memcpy.S    2002/08/05 23:53:36     1.9.2.1
+++ arch/mips64/lib/memcpy.S    2002/08/08 13:19:10
@@ -762,8 +762,18 @@
        dsubu   a2, AT, ta0                     # a2 bytes to go
        daddu   a0, ta0                         # compute start address in a1
        dsubu   a0, a1
-       j       __bzero
-        move   a1, zero
+       /*
+        * Clear len bytes starting at dst.  Can't call __bzero because it
+        * might modify len.  An inefficient loop for these rare times...
+        */
+       beqz    a2, 2f
+        dsubu  a1, a2, 1
+1:     sb      zero, 0(a0)
+       daddu   a0, a0, 1
+       bnez    a1, 1b
+        dsubu  a1, a1, 1
+2:     jr      ra
+        nop
 
 s_fixup:
        jr      ra
<Prev in Thread] Current Thread [Next in Thread>