diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2014-01-02 11:19:49 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-03-26 18:09:13 -0400 |
commit | c48be43eb5248ff96dacda58f9e51ee8bfd058ac (patch) | |
tree | ecb47c1da760cfd105a1ae5fb9a6ac8862246f48 /arch/mips/lib/strnlen_user.S | |
parent | 078dde5e21dba9f4186ebfc2aef06341fd20efb4 (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.S | 16 |
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 | */ |
28 | LEAF(__strnlen_user_asm) | 28 | .macro __BUILD_STRNLEN_ASM func |
29 | LEAF(__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 | ||
33 | FEXPORT(__strnlen_user_nocheck_asm) | 34 | FEXPORT(__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 |
36 | 1: beq v0, a1, 1f # limit reached? | 37 | 1: 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 |
40 | 1: PTR_SUBU v0, a0 | 41 | 1: 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 | ||