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

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

MIPS: lib: strlen_user: Add EVA support



In non-EVA mode, strlen_user* aliases are used for the
strlen_kernel* symbols since the code is identical. In EVA
mode, new strlen_user* symbols are used which use the EVA
specific instructions to load values from userspace.

Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
parent 5cc49497
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,8 @@ extern long __strncpy_from_user_nocheck_asm(char *__to,
					    const char *__from, long __len);
					    const char *__from, long __len);
extern long __strncpy_from_user_asm(char *__to, const char *__from,
extern long __strncpy_from_user_asm(char *__to, const char *__from,
				    long __len);
				    long __len);
extern long __strlen_kernel_nocheck_asm(const char *s);
extern long __strlen_kernel_asm(const char *s);
extern long __strlen_user_nocheck_asm(const char *s);
extern long __strlen_user_nocheck_asm(const char *s);
extern long __strlen_user_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_nocheck_asm(const char *s);
@@ -48,6 +50,8 @@ EXPORT_SYMBOL(__copy_user_inatomic);
EXPORT_SYMBOL(__bzero);
EXPORT_SYMBOL(__bzero);
EXPORT_SYMBOL(__strncpy_from_user_nocheck_asm);
EXPORT_SYMBOL(__strncpy_from_user_nocheck_asm);
EXPORT_SYMBOL(__strncpy_from_user_asm);
EXPORT_SYMBOL(__strncpy_from_user_asm);
EXPORT_SYMBOL(__strlen_kernel_nocheck_asm);
EXPORT_SYMBOL(__strlen_kernel_asm);
EXPORT_SYMBOL(__strlen_user_nocheck_asm);
EXPORT_SYMBOL(__strlen_user_nocheck_asm);
EXPORT_SYMBOL(__strlen_user_asm);
EXPORT_SYMBOL(__strlen_user_asm);
EXPORT_SYMBOL(__strnlen_kernel_nocheck_asm);
EXPORT_SYMBOL(__strnlen_kernel_nocheck_asm);
+20 −0
Original line number Original line Diff line number Diff line
@@ -30,7 +30,11 @@ LEAF(__strlen_\func\()_asm)


FEXPORT(__strlen_\func\()_nocheck_asm)
FEXPORT(__strlen_\func\()_nocheck_asm)
	move		v0, a0
	move		v0, a0
.ifeqs "\func", "kernel"
1:	EX(lbu, v1, (v0), .Lfault\@)
1:	EX(lbu, v1, (v0), .Lfault\@)
.else
1:	EX(lbue, v1, (v0), .Lfault\@)
.endif
	PTR_ADDIU	v0, 1
	PTR_ADDIU	v0, 1
	bnez		v1, 1b
	bnez		v1, 1b
	PTR_SUBU	v0, a0
	PTR_SUBU	v0, a0
@@ -41,4 +45,20 @@ FEXPORT(__strlen_\func\()_nocheck_asm)
	jr		ra
	jr		ra
	.endm
	.endm


#ifndef CONFIG_EVA
	/* Set aliases */
	.global __strlen_user_asm
	.global __strlen_user_nocheck_asm
	.set __strlen_user_asm, __strlen_kernel_asm
	.set __strlen_user_nocheck_asm, __strlen_kernel_nocheck_asm
#endif

__BUILD_STRLEN_ASM kernel

#ifdef CONFIG_EVA

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