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 | |
| 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>
| -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 | ||
