aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/lib/strnlen_user.S
diff options
context:
space:
mode:
authorMarkos Chandras <markos.chandras@imgtec.com>2014-01-02 11:19:49 -0500
committerRalf Baechle <ralf@linux-mips.org>2014-03-26 18:09:13 -0400
commitc48be43eb5248ff96dacda58f9e51ee8bfd058ac (patch)
treeecb47c1da760cfd105a1ae5fb9a6ac8862246f48 /arch/mips/lib/strnlen_user.S
parent078dde5e21dba9f4186ebfc2aef06341fd20efb4 (diff)
MIPS: lib: strnlen_user: Use macro to build the strnlen_user symbol
Build the __strnlen_user symbol using a macro. In EVA mode we will need to use similar code to do the userspace load operations so it is better if we use a macro to avoid code duplications. Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/lib/strnlen_user.S')
-rw-r--r--arch/mips/lib/strnlen_user.S16
1 files changed, 10 insertions, 6 deletions
diff --git a/arch/mips/lib/strnlen_user.S b/arch/mips/lib/strnlen_user.S
index fcacea5e61f1..44221602ce1c 100644
--- a/arch/mips/lib/strnlen_user.S
+++ b/arch/mips/lib/strnlen_user.S
@@ -25,22 +25,26 @@
25 * bytes. There's nothing secret there. On 64-bit accessing beyond 25 * bytes. There's nothing secret there. On 64-bit accessing beyond
26 * the maximum is a tad hairier ... 26 * the maximum is a tad hairier ...
27 */ 27 */
28LEAF(__strnlen_user_asm) 28 .macro __BUILD_STRNLEN_ASM func
29LEAF(__strnlen_\func\()_asm)
29 LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok? 30 LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
30 and v0, a0 31 and v0, a0
31 bnez v0, .Lfault 32 bnez v0, .Lfault\@
32 33
33FEXPORT(__strnlen_user_nocheck_asm) 34FEXPORT(__strnlen_\func\()_nocheck_asm)
34 move v0, a0 35 move v0, a0
35 PTR_ADDU a1, a0 # stop pointer 36 PTR_ADDU a1, a0 # stop pointer
361: beq v0, a1, 1f # limit reached? 371: beq v0, a1, 1f # limit reached?
37 EX(lb, t0, (v0), .Lfault) 38 EX(lb, t0, (v0), .Lfault\@)
38 PTR_ADDIU v0, 1 39 PTR_ADDIU v0, 1
39 bnez t0, 1b 40 bnez t0, 1b
401: PTR_SUBU v0, a0 411: PTR_SUBU v0, a0
41 jr ra 42 jr ra
42 END(__strnlen_user_asm) 43 END(__strnlen_\func\()_asm)
43 44
44.Lfault: 45.Lfault\@:
45 move v0, zero 46 move v0, zero
46 jr ra 47 jr ra
48 .endm
49
50__BUILD_STRNLEN_ASM user