MIPS: lib: strlen_user: Use macro to build the strlen_user symbol
Build the __strlen_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: Markos Chandras <markos.chandras@imgtec.com>
This commit is contained in:
		
							parent
							
								
									4968db4b9c
								
							
						
					
					
						commit
						5cc494972a
					
				| @ -22,19 +22,23 @@ | ||||
|  * | ||||
|  * Return 0 for error | ||||
|  */ | ||||
| LEAF(__strlen_user_asm) | ||||
| 	.macro __BUILD_STRLEN_ASM func | ||||
| LEAF(__strlen_\func\()_asm) | ||||
| 	LONG_L		v0, TI_ADDR_LIMIT($28)	# pointer ok? | ||||
| 	and		v0, a0 | ||||
| 	bnez		v0, .Lfault | ||||
| 	bnez		v0, .Lfault\@
 | ||||
| 
 | ||||
| FEXPORT(__strlen_user_nocheck_asm) | ||||
| FEXPORT(__strlen_\func\()_nocheck_asm) | ||||
| 	move		v0, a0 | ||||
| 1:	EX(lbu, v1, (v0), .Lfault) | ||||
| 1:	EX(lbu, v1, (v0), .Lfault\@)
 | ||||
| 	PTR_ADDIU	v0, 1 | ||||
| 	bnez		v1, 1b | ||||
| 	PTR_SUBU	v0, a0 | ||||
| 	jr		ra | ||||
| 	END(__strlen_user_asm) | ||||
| 	END(__strlen_\func\()_asm) | ||||
| 
 | ||||
| .Lfault:	move		v0, zero | ||||
| .Lfault\@:	move		v0, zero
 | ||||
| 	jr		ra | ||||
| 	.endm | ||||
| 
 | ||||
| __BUILD_STRLEN_ASM user | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user