Commit c48be43e authored by Markos Chandras's avatar Markos Chandras Committed by Ralf Baechle

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: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent 078dde5e
......@@ -25,22 +25,26 @@
* bytes. There's nothing secret there. On 64-bit accessing beyond
* the maximum is a tad hairier ...
*/
LEAF(__strnlen_user_asm)
.macro __BUILD_STRNLEN_ASM func
LEAF(__strnlen_\func\()_asm)
LONG_L v0, TI_ADDR_LIMIT($28) # pointer ok?
and v0, a0
bnez v0, .Lfault
bnez v0, .Lfault\@
FEXPORT(__strnlen_user_nocheck_asm)
FEXPORT(__strnlen_\func\()_nocheck_asm)
move v0, a0
PTR_ADDU a1, a0 # stop pointer
1: beq v0, a1, 1f # limit reached?
EX(lb, t0, (v0), .Lfault)
EX(lb, t0, (v0), .Lfault\@)
PTR_ADDIU v0, 1
bnez t0, 1b
1: PTR_SUBU v0, a0
jr ra
END(__strnlen_user_asm)
END(__strnlen_\func\()_asm)
.Lfault:
.Lfault\@:
move v0, zero
jr ra
.endm
__BUILD_STRNLEN_ASM user
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment