Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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