patch-2.1.101 linux/arch/mips/lib/strlen_user.S
Next file: linux/arch/mips/lib/strncpy_user.S
Previous file: linux/arch/mips/lib/pmaxio.S
Back to the patch index
Back to the overall index
- Lines: 59
- Date:
Fri May 8 00:13:24 1998
- Orig file:
v2.1.100/linux/arch/mips/lib/strlen_user.S
- Orig date:
Thu Jun 26 12:33:37 1997
diff -u --recursive --new-file v2.1.100/linux/arch/mips/lib/strlen_user.S linux/arch/mips/lib/strlen_user.S
@@ -5,29 +5,44 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (c) 1996 by Ralf Baechle
+ * Copyright (c) 1996, 1998 by Ralf Baechle
+ *
+ * $Id: strlen_user.S,v 1.2 1998/05/04 09:18:20 ralf Exp $
*/
#include <asm/asm.h>
+#include <asm/offset.h>
#include <asm/regdef.h>
#include <asm/sgidefs.h>
+#define EX(insn,reg,addr,handler) \
+9: insn reg, addr; \
+ .section __ex_table,"a"; \
+ PTR 9b, handler; \
+ .previous
+
/*
* Return the size of a string (including the ending 0)
*
* Return 0 for error
*/
-LEAF(__strlen_user)
- move v0,zero
-1: lb t0,(a0)
- LONG_ADDIU v0,1
- LONG_ADDIU a0,1
- bnez t0,1b
- jr ra
- END(__strlen_user)
+LEAF(__strlen_user_nocheck_asm)
+ lw v0, THREAD_CURDS($28) # pointer ok?
+ subu v0, zero, v0
+ and v0, a0
+ nor v0, zero, v0
+ beqz v0, fault
+EXPORT(__strlen_user_asm)
+ move v0, a0
+1: EX(lb, t0, (v0), fault)
+ LONG_ADDIU v0, 1
+ bnez t0, 1b
+ LONG_SUBU v0, a0
+ jr ra
+ END(__strlen_user_nocheck_asm)
- .section __ex_table,"a"
- PTR 1b,fault
- .previous
+ .section __ex_table,"a"
+ PTR 1b, fault
+ .previous
-fault: move v0,zero
- jr ra
+fault: move v0, zero
+ jr ra
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov