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

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

MIPS: lib: strncpy_user: Use macro to build the strncpy_from_user symbol



Build the __strncpy_from_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 05397054
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -28,16 +28,17 @@
 * it happens at most some bytes of the exceptions handlers will be copied.
 */

LEAF(__strncpy_from_user_asm)
	.macro __BUILD_STRNCPY_ASM func
LEAF(__strncpy_from_\func\()_asm)
	LONG_L		v0, TI_ADDR_LIMIT($28)	# pointer ok?
	and		v0, a1
	bnez		v0, .Lfault
	bnez		v0, .Lfault\@

FEXPORT(__strncpy_from_user_nocheck_asm)
FEXPORT(__strncpy_from_\func\()_nocheck_asm)
	.set		noreorder
	move		t0, zero
	move		v1, a1
1:	EX(lbu, v0, (v1), .Lfault)
1:	EX(lbu, v0, (v1), .Lfault\@)
	PTR_ADDIU	v1, 1
	R10KCBARRIER(0(ra))
	beqz		v0, 2f
@@ -47,15 +48,19 @@ FEXPORT(__strncpy_from_user_nocheck_asm)
	 PTR_ADDIU	a0, 1
2:	PTR_ADDU	v0, a1, t0
	xor		v0, a1
	bltz		v0, .Lfault
	bltz		v0, .Lfault\@
	 nop
	jr		ra			# return n
	 move		v0, t0
	END(__strncpy_from_user_asm)
	END(__strncpy_from_\func\()_asm)

.Lfault: jr		ra
.Lfault\@: jr		ra
	  li		v0, -EFAULT

	.section	__ex_table,"a"
	PTR		1b, .Lfault
	PTR		1b, .Lfault\@
	.previous

	.endm

__BUILD_STRNCPY_ASM user