diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2014-01-02 16:36:49 (GMT) |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-03-26 22:09:14 (GMT) |
commit | cc59fe5b88bff926376019851aa88e96b6039eea (patch) | |
tree | 772641ee2d5e6c3dd4fc116a7dd1586da694e60d /arch/mips/lib | |
parent | 053970542f049d3e30dc4be6eb19e92ff1f70f00 (diff) | |
download | linux-cc59fe5b88bff926376019851aa88e96b6039eea.tar.xz |
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: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/lib')
-rw-r--r-- | arch/mips/lib/strncpy_user.S | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/arch/mips/lib/strncpy_user.S b/arch/mips/lib/strncpy_user.S index 92870b6..51b38ab 100644 --- a/arch/mips/lib/strncpy_user.S +++ b/arch/mips/lib/strncpy_user.S @@ -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 |