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

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

MIPS: lib: strnlen_user: Add EVA support



In non-EVA mode, a strlen_user* alias is used for the
strlen_kernel* symbols since the code is identical. In EVA
mode, a new strlen_user* symbol is used which uses the EVA
specific instructions to load values from userspace.

Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent c48be43e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ extern long __strncpy_from_user_asm(char *__to, const char *__from,
				    long __len);
extern long __strlen_user_nocheck_asm(const char *s);
extern long __strlen_user_asm(const char *s);
extern long __strnlen_kernel_nocheck_asm(const char *s);
extern long __strnlen_kernel_asm(const char *s);
extern long __strnlen_user_nocheck_asm(const char *s);
extern long __strnlen_user_asm(const char *s);

@@ -48,6 +50,8 @@ EXPORT_SYMBOL(__strncpy_from_user_nocheck_asm);
EXPORT_SYMBOL(__strncpy_from_user_asm);
EXPORT_SYMBOL(__strlen_user_nocheck_asm);
EXPORT_SYMBOL(__strlen_user_asm);
EXPORT_SYMBOL(__strnlen_kernel_nocheck_asm);
EXPORT_SYMBOL(__strnlen_kernel_asm);
EXPORT_SYMBOL(__strnlen_user_nocheck_asm);
EXPORT_SYMBOL(__strnlen_user_asm);

+20 −0
Original line number Diff line number Diff line
@@ -35,7 +35,11 @@ FEXPORT(__strnlen_\func\()_nocheck_asm)
	move		v0, a0
	PTR_ADDU	a1, a0			# stop pointer
1:	beq		v0, a1, 1f		# limit reached?
.ifeqs "\func", "kernel"
	EX(lb, t0, (v0), .Lfault\@)
.else
	EX(lbe, t0, (v0), .Lfault\@)
.endif
	PTR_ADDIU	v0, 1
	bnez		t0, 1b
1:	PTR_SUBU	v0, a0
@@ -47,4 +51,20 @@ FEXPORT(__strnlen_\func\()_nocheck_asm)
	jr		ra
	.endm

#ifndef CONFIG_EVA
	/* Set aliases */
	.global __strnlen_user_asm
	.global __strnlen_user_nocheck_asm
	.set __strnlen_user_asm, __strnlen_kernel_asm
	.set __strnlen_user_nocheck_asm, __strnlen_kernel_nocheck_asm
#endif

__BUILD_STRNLEN_ASM kernel

#ifdef CONFIG_EVA

	.set push
	.set eva
__BUILD_STRNLEN_ASM user
	.set pop
#endif