提交 4e7682d0 编写于 作者: C Catalin Marinas 提交者: Russell King

ARM: 7301/1: Rename the T() macro to TUSER() to avoid namespace conflicts

This macro is used to generate unprivileged accesses (LDRT/STRT) to user
space.
Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
Acked-by: NNicolas Pitre <nico@linaro.org>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 d68133b5
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
*/ */
#ifdef CONFIG_THUMB2_KERNEL #ifdef CONFIG_THUMB2_KERNEL
.macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=T() .macro usraccoff, instr, reg, ptr, inc, off, cond, abort, t=TUSER()
9999: 9999:
.if \inc == 1 .if \inc == 1
\instr\cond\()b\()\t\().w \reg, [\ptr, #\off] \instr\cond\()b\()\t\().w \reg, [\ptr, #\off]
...@@ -277,7 +277,7 @@ ...@@ -277,7 +277,7 @@
#else /* !CONFIG_THUMB2_KERNEL */ #else /* !CONFIG_THUMB2_KERNEL */
.macro usracc, instr, reg, ptr, inc, cond, rept, abort, t=T() .macro usracc, instr, reg, ptr, inc, cond, rept, abort, t=TUSER()
.rept \rept .rept \rept
9999: 9999:
.if \inc == 1 .if \inc == 1
......
...@@ -83,9 +83,9 @@ ...@@ -83,9 +83,9 @@
* instructions (inline assembly) * instructions (inline assembly)
*/ */
#ifdef CONFIG_CPU_USE_DOMAINS #ifdef CONFIG_CPU_USE_DOMAINS
#define T(instr) #instr "t" #define TUSER(instr) #instr "t"
#else #else
#define T(instr) #instr #define TUSER(instr) #instr
#endif #endif
#else /* __ASSEMBLY__ */ #else /* __ASSEMBLY__ */
...@@ -95,9 +95,9 @@ ...@@ -95,9 +95,9 @@
* instructions * instructions
*/ */
#ifdef CONFIG_CPU_USE_DOMAINS #ifdef CONFIG_CPU_USE_DOMAINS
#define T(instr) instr ## t #define TUSER(instr) instr ## t
#else #else
#define T(instr) instr #define TUSER(instr) instr
#endif #endif
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -75,9 +75,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, ...@@ -75,9 +75,9 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
#define __futex_atomic_op(insn, ret, oldval, tmp, uaddr, oparg) \ #define __futex_atomic_op(insn, ret, oldval, tmp, uaddr, oparg) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: " T(ldr) " %1, [%3]\n" \ "1: " TUSER(ldr) " %1, [%3]\n" \
" " insn "\n" \ " " insn "\n" \
"2: " T(str) " %0, [%3]\n" \ "2: " TUSER(str) " %0, [%3]\n" \
" mov %0, #0\n" \ " mov %0, #0\n" \
__futex_atomic_ex_table("%5") \ __futex_atomic_ex_table("%5") \
: "=&r" (ret), "=&r" (oldval), "=&r" (tmp) \ : "=&r" (ret), "=&r" (oldval), "=&r" (tmp) \
...@@ -95,10 +95,10 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, ...@@ -95,10 +95,10 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
return -EFAULT; return -EFAULT;
__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n" __asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
"1: " T(ldr) " %1, [%4]\n" "1: " TUSER(ldr) " %1, [%4]\n"
" teq %1, %2\n" " teq %1, %2\n"
" it eq @ explicit IT needed for the 2b label\n" " it eq @ explicit IT needed for the 2b label\n"
"2: " T(streq) " %3, [%4]\n" "2: " TUSER(streq) " %3, [%4]\n"
__futex_atomic_ex_table("%5") __futex_atomic_ex_table("%5")
: "+r" (ret), "=&r" (val) : "+r" (ret), "=&r" (val)
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT) : "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
......
...@@ -227,7 +227,7 @@ do { \ ...@@ -227,7 +227,7 @@ do { \
#define __get_user_asm_byte(x,addr,err) \ #define __get_user_asm_byte(x,addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: " T(ldrb) " %1,[%2],#0\n" \ "1: " TUSER(ldrb) " %1,[%2],#0\n" \
"2:\n" \ "2:\n" \
" .pushsection .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -263,7 +263,7 @@ do { \ ...@@ -263,7 +263,7 @@ do { \
#define __get_user_asm_word(x,addr,err) \ #define __get_user_asm_word(x,addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: " T(ldr) " %1,[%2],#0\n" \ "1: " TUSER(ldr) " %1,[%2],#0\n" \
"2:\n" \ "2:\n" \
" .pushsection .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -308,7 +308,7 @@ do { \ ...@@ -308,7 +308,7 @@ do { \
#define __put_user_asm_byte(x,__pu_addr,err) \ #define __put_user_asm_byte(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: " T(strb) " %1,[%2],#0\n" \ "1: " TUSER(strb) " %1,[%2],#0\n" \
"2:\n" \ "2:\n" \
" .pushsection .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -341,7 +341,7 @@ do { \ ...@@ -341,7 +341,7 @@ do { \
#define __put_user_asm_word(x,__pu_addr,err) \ #define __put_user_asm_word(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: " T(str) " %1,[%2],#0\n" \ "1: " TUSER(str) " %1,[%2],#0\n" \
"2:\n" \ "2:\n" \
" .pushsection .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -366,10 +366,10 @@ do { \ ...@@ -366,10 +366,10 @@ do { \
#define __put_user_asm_dword(x,__pu_addr,err) \ #define __put_user_asm_dword(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
ARM( "1: " T(str) " " __reg_oper1 ", [%1], #4\n" ) \ ARM( "1: " TUSER(str) " " __reg_oper1 ", [%1], #4\n" ) \
ARM( "2: " T(str) " " __reg_oper0 ", [%1]\n" ) \ ARM( "2: " TUSER(str) " " __reg_oper0 ", [%1]\n" ) \
THUMB( "1: " T(str) " " __reg_oper1 ", [%1]\n" ) \ THUMB( "1: " TUSER(str) " " __reg_oper1 ", [%1]\n" ) \
THUMB( "2: " T(str) " " __reg_oper0 ", [%1, #4]\n" ) \ THUMB( "2: " TUSER(str) " " __reg_oper0 ", [%1, #4]\n" ) \
"3:\n" \ "3:\n" \
" .pushsection .fixup,\"ax\"\n" \ " .pushsection .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
......
...@@ -31,18 +31,18 @@ ...@@ -31,18 +31,18 @@
#include <asm/domain.h> #include <asm/domain.h>
ENTRY(__get_user_1) ENTRY(__get_user_1)
1: T(ldrb) r2, [r0] 1: TUSER(ldrb) r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__get_user_1) ENDPROC(__get_user_1)
ENTRY(__get_user_2) ENTRY(__get_user_2)
#ifdef CONFIG_THUMB2_KERNEL #ifdef CONFIG_THUMB2_KERNEL
2: T(ldrb) r2, [r0] 2: TUSER(ldrb) r2, [r0]
3: T(ldrb) r3, [r0, #1] 3: TUSER(ldrb) r3, [r0, #1]
#else #else
2: T(ldrb) r2, [r0], #1 2: TUSER(ldrb) r2, [r0], #1
3: T(ldrb) r3, [r0] 3: TUSER(ldrb) r3, [r0]
#endif #endif
#ifndef __ARMEB__ #ifndef __ARMEB__
orr r2, r2, r3, lsl #8 orr r2, r2, r3, lsl #8
...@@ -54,7 +54,7 @@ ENTRY(__get_user_2) ...@@ -54,7 +54,7 @@ ENTRY(__get_user_2)
ENDPROC(__get_user_2) ENDPROC(__get_user_2)
ENTRY(__get_user_4) ENTRY(__get_user_4)
4: T(ldr) r2, [r0] 4: TUSER(ldr) r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__get_user_4) ENDPROC(__get_user_4)
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include <asm/domain.h> #include <asm/domain.h>
ENTRY(__put_user_1) ENTRY(__put_user_1)
1: T(strb) r2, [r0] 1: TUSER(strb) r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_1) ENDPROC(__put_user_1)
...@@ -40,19 +40,19 @@ ENTRY(__put_user_2) ...@@ -40,19 +40,19 @@ ENTRY(__put_user_2)
mov ip, r2, lsr #8 mov ip, r2, lsr #8
#ifdef CONFIG_THUMB2_KERNEL #ifdef CONFIG_THUMB2_KERNEL
#ifndef __ARMEB__ #ifndef __ARMEB__
2: T(strb) r2, [r0] 2: TUSER(strb) r2, [r0]
3: T(strb) ip, [r0, #1] 3: TUSER(strb) ip, [r0, #1]
#else #else
2: T(strb) ip, [r0] 2: TUSER(strb) ip, [r0]
3: T(strb) r2, [r0, #1] 3: TUSER(strb) r2, [r0, #1]
#endif #endif
#else /* !CONFIG_THUMB2_KERNEL */ #else /* !CONFIG_THUMB2_KERNEL */
#ifndef __ARMEB__ #ifndef __ARMEB__
2: T(strb) r2, [r0], #1 2: TUSER(strb) r2, [r0], #1
3: T(strb) ip, [r0] 3: TUSER(strb) ip, [r0]
#else #else
2: T(strb) ip, [r0], #1 2: TUSER(strb) ip, [r0], #1
3: T(strb) r2, [r0] 3: TUSER(strb) r2, [r0]
#endif #endif
#endif /* CONFIG_THUMB2_KERNEL */ #endif /* CONFIG_THUMB2_KERNEL */
mov r0, #0 mov r0, #0
...@@ -60,18 +60,18 @@ ENTRY(__put_user_2) ...@@ -60,18 +60,18 @@ ENTRY(__put_user_2)
ENDPROC(__put_user_2) ENDPROC(__put_user_2)
ENTRY(__put_user_4) ENTRY(__put_user_4)
4: T(str) r2, [r0] 4: TUSER(str) r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_4) ENDPROC(__put_user_4)
ENTRY(__put_user_8) ENTRY(__put_user_8)
#ifdef CONFIG_THUMB2_KERNEL #ifdef CONFIG_THUMB2_KERNEL
5: T(str) r2, [r0] 5: TUSER(str) r2, [r0]
6: T(str) r3, [r0, #4] 6: TUSER(str) r3, [r0, #4]
#else #else
5: T(str) r2, [r0], #4 5: TUSER(str) r2, [r0], #4
6: T(str) r3, [r0] 6: TUSER(str) r3, [r0]
#endif #endif
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
......
...@@ -32,11 +32,11 @@ ...@@ -32,11 +32,11 @@
rsb ip, ip, #4 rsb ip, ip, #4
cmp ip, #2 cmp ip, #2
ldrb r3, [r1], #1 ldrb r3, [r1], #1
USER( T(strb) r3, [r0], #1) @ May fault USER( TUSER( strb) r3, [r0], #1) @ May fault
ldrgeb r3, [r1], #1 ldrgeb r3, [r1], #1
USER( T(strgeb) r3, [r0], #1) @ May fault USER( TUSER( strgeb) r3, [r0], #1) @ May fault
ldrgtb r3, [r1], #1 ldrgtb r3, [r1], #1
USER( T(strgtb) r3, [r0], #1) @ May fault USER( TUSER( strgtb) r3, [r0], #1) @ May fault
sub r2, r2, ip sub r2, r2, ip
b .Lc2u_dest_aligned b .Lc2u_dest_aligned
...@@ -59,7 +59,7 @@ ENTRY(__copy_to_user) ...@@ -59,7 +59,7 @@ ENTRY(__copy_to_user)
addmi ip, r2, #4 addmi ip, r2, #4
bmi .Lc2u_0nowords bmi .Lc2u_0nowords
ldr r3, [r1], #4 ldr r3, [r1], #4
USER( T(str) r3, [r0], #4) @ May fault USER( TUSER( str) r3, [r0], #4) @ May fault
mov ip, r0, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction mov ip, r0, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction
rsb ip, ip, #0 rsb ip, ip, #0
movs ip, ip, lsr #32 - PAGE_SHIFT movs ip, ip, lsr #32 - PAGE_SHIFT
...@@ -88,18 +88,18 @@ USER( T(str) r3, [r0], #4) @ May fault ...@@ -88,18 +88,18 @@ USER( T(str) r3, [r0], #4) @ May fault
stmneia r0!, {r3 - r4} @ Shouldnt fault stmneia r0!, {r3 - r4} @ Shouldnt fault
tst ip, #4 tst ip, #4
ldrne r3, [r1], #4 ldrne r3, [r1], #4
T(strne) r3, [r0], #4 @ Shouldnt fault TUSER( strne) r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3 ands ip, ip, #3
beq .Lc2u_0fupi beq .Lc2u_0fupi
.Lc2u_0nowords: teq ip, #0 .Lc2u_0nowords: teq ip, #0
beq .Lc2u_finished beq .Lc2u_finished
.Lc2u_nowords: cmp ip, #2 .Lc2u_nowords: cmp ip, #2
ldrb r3, [r1], #1 ldrb r3, [r1], #1
USER( T(strb) r3, [r0], #1) @ May fault USER( TUSER( strb) r3, [r0], #1) @ May fault
ldrgeb r3, [r1], #1 ldrgeb r3, [r1], #1
USER( T(strgeb) r3, [r0], #1) @ May fault USER( TUSER( strgeb) r3, [r0], #1) @ May fault
ldrgtb r3, [r1], #1 ldrgtb r3, [r1], #1
USER( T(strgtb) r3, [r0], #1) @ May fault USER( TUSER( strgtb) r3, [r0], #1) @ May fault
b .Lc2u_finished b .Lc2u_finished
.Lc2u_not_enough: .Lc2u_not_enough:
...@@ -120,7 +120,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault ...@@ -120,7 +120,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault
mov r3, r7, pull #8 mov r3, r7, pull #8
ldr r7, [r1], #4 ldr r7, [r1], #4
orr r3, r3, r7, push #24 orr r3, r3, r7, push #24
USER( T(str) r3, [r0], #4) @ May fault USER( TUSER( str) r3, [r0], #4) @ May fault
mov ip, r0, lsl #32 - PAGE_SHIFT mov ip, r0, lsl #32 - PAGE_SHIFT
rsb ip, ip, #0 rsb ip, ip, #0
movs ip, ip, lsr #32 - PAGE_SHIFT movs ip, ip, lsr #32 - PAGE_SHIFT
...@@ -155,18 +155,18 @@ USER( T(str) r3, [r0], #4) @ May fault ...@@ -155,18 +155,18 @@ USER( T(str) r3, [r0], #4) @ May fault
movne r3, r7, pull #8 movne r3, r7, pull #8
ldrne r7, [r1], #4 ldrne r7, [r1], #4
orrne r3, r3, r7, push #24 orrne r3, r3, r7, push #24
T(strne) r3, [r0], #4 @ Shouldnt fault TUSER( strne) r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3 ands ip, ip, #3
beq .Lc2u_1fupi beq .Lc2u_1fupi
.Lc2u_1nowords: mov r3, r7, get_byte_1 .Lc2u_1nowords: mov r3, r7, get_byte_1
teq ip, #0 teq ip, #0
beq .Lc2u_finished beq .Lc2u_finished
cmp ip, #2 cmp ip, #2
USER( T(strb) r3, [r0], #1) @ May fault USER( TUSER( strb) r3, [r0], #1) @ May fault
movge r3, r7, get_byte_2 movge r3, r7, get_byte_2
USER( T(strgeb) r3, [r0], #1) @ May fault USER( TUSER( strgeb) r3, [r0], #1) @ May fault
movgt r3, r7, get_byte_3 movgt r3, r7, get_byte_3
USER( T(strgtb) r3, [r0], #1) @ May fault USER( TUSER( strgtb) r3, [r0], #1) @ May fault
b .Lc2u_finished b .Lc2u_finished
.Lc2u_2fupi: subs r2, r2, #4 .Lc2u_2fupi: subs r2, r2, #4
...@@ -175,7 +175,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault ...@@ -175,7 +175,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault
mov r3, r7, pull #16 mov r3, r7, pull #16
ldr r7, [r1], #4 ldr r7, [r1], #4
orr r3, r3, r7, push #16 orr r3, r3, r7, push #16
USER( T(str) r3, [r0], #4) @ May fault USER( TUSER( str) r3, [r0], #4) @ May fault
mov ip, r0, lsl #32 - PAGE_SHIFT mov ip, r0, lsl #32 - PAGE_SHIFT
rsb ip, ip, #0 rsb ip, ip, #0
movs ip, ip, lsr #32 - PAGE_SHIFT movs ip, ip, lsr #32 - PAGE_SHIFT
...@@ -210,18 +210,18 @@ USER( T(str) r3, [r0], #4) @ May fault ...@@ -210,18 +210,18 @@ USER( T(str) r3, [r0], #4) @ May fault
movne r3, r7, pull #16 movne r3, r7, pull #16
ldrne r7, [r1], #4 ldrne r7, [r1], #4
orrne r3, r3, r7, push #16 orrne r3, r3, r7, push #16
T(strne) r3, [r0], #4 @ Shouldnt fault TUSER( strne) r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3 ands ip, ip, #3
beq .Lc2u_2fupi beq .Lc2u_2fupi
.Lc2u_2nowords: mov r3, r7, get_byte_2 .Lc2u_2nowords: mov r3, r7, get_byte_2
teq ip, #0 teq ip, #0
beq .Lc2u_finished beq .Lc2u_finished
cmp ip, #2 cmp ip, #2
USER( T(strb) r3, [r0], #1) @ May fault USER( TUSER( strb) r3, [r0], #1) @ May fault
movge r3, r7, get_byte_3 movge r3, r7, get_byte_3
USER( T(strgeb) r3, [r0], #1) @ May fault USER( TUSER( strgeb) r3, [r0], #1) @ May fault
ldrgtb r3, [r1], #0 ldrgtb r3, [r1], #0
USER( T(strgtb) r3, [r0], #1) @ May fault USER( TUSER( strgtb) r3, [r0], #1) @ May fault
b .Lc2u_finished b .Lc2u_finished
.Lc2u_3fupi: subs r2, r2, #4 .Lc2u_3fupi: subs r2, r2, #4
...@@ -230,7 +230,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault ...@@ -230,7 +230,7 @@ USER( T(strgtb) r3, [r0], #1) @ May fault
mov r3, r7, pull #24 mov r3, r7, pull #24
ldr r7, [r1], #4 ldr r7, [r1], #4
orr r3, r3, r7, push #8 orr r3, r3, r7, push #8
USER( T(str) r3, [r0], #4) @ May fault USER( TUSER( str) r3, [r0], #4) @ May fault
mov ip, r0, lsl #32 - PAGE_SHIFT mov ip, r0, lsl #32 - PAGE_SHIFT
rsb ip, ip, #0 rsb ip, ip, #0
movs ip, ip, lsr #32 - PAGE_SHIFT movs ip, ip, lsr #32 - PAGE_SHIFT
...@@ -265,18 +265,18 @@ USER( T(str) r3, [r0], #4) @ May fault ...@@ -265,18 +265,18 @@ USER( T(str) r3, [r0], #4) @ May fault
movne r3, r7, pull #24 movne r3, r7, pull #24
ldrne r7, [r1], #4 ldrne r7, [r1], #4
orrne r3, r3, r7, push #8 orrne r3, r3, r7, push #8
T(strne) r3, [r0], #4 @ Shouldnt fault TUSER( strne) r3, [r0], #4 @ Shouldnt fault
ands ip, ip, #3 ands ip, ip, #3
beq .Lc2u_3fupi beq .Lc2u_3fupi
.Lc2u_3nowords: mov r3, r7, get_byte_3 .Lc2u_3nowords: mov r3, r7, get_byte_3
teq ip, #0 teq ip, #0
beq .Lc2u_finished beq .Lc2u_finished
cmp ip, #2 cmp ip, #2
USER( T(strb) r3, [r0], #1) @ May fault USER( TUSER( strb) r3, [r0], #1) @ May fault
ldrgeb r3, [r1], #1 ldrgeb r3, [r1], #1
USER( T(strgeb) r3, [r0], #1) @ May fault USER( TUSER( strgeb) r3, [r0], #1) @ May fault
ldrgtb r3, [r1], #0 ldrgtb r3, [r1], #0
USER( T(strgtb) r3, [r0], #1) @ May fault USER( TUSER( strgtb) r3, [r0], #1) @ May fault
b .Lc2u_finished b .Lc2u_finished
ENDPROC(__copy_to_user) ENDPROC(__copy_to_user)
...@@ -295,11 +295,11 @@ ENDPROC(__copy_to_user) ...@@ -295,11 +295,11 @@ ENDPROC(__copy_to_user)
.Lcfu_dest_not_aligned: .Lcfu_dest_not_aligned:
rsb ip, ip, #4 rsb ip, ip, #4
cmp ip, #2 cmp ip, #2
USER( T(ldrb) r3, [r1], #1) @ May fault USER( TUSER( ldrb) r3, [r1], #1) @ May fault
strb r3, [r0], #1 strb r3, [r0], #1
USER( T(ldrgeb) r3, [r1], #1) @ May fault USER( TUSER( ldrgeb) r3, [r1], #1) @ May fault
strgeb r3, [r0], #1 strgeb r3, [r0], #1
USER( T(ldrgtb) r3, [r1], #1) @ May fault USER( TUSER( ldrgtb) r3, [r1], #1) @ May fault
strgtb r3, [r0], #1 strgtb r3, [r0], #1
sub r2, r2, ip sub r2, r2, ip
b .Lcfu_dest_aligned b .Lcfu_dest_aligned
...@@ -322,7 +322,7 @@ ENTRY(__copy_from_user) ...@@ -322,7 +322,7 @@ ENTRY(__copy_from_user)
.Lcfu_0fupi: subs r2, r2, #4 .Lcfu_0fupi: subs r2, r2, #4
addmi ip, r2, #4 addmi ip, r2, #4
bmi .Lcfu_0nowords bmi .Lcfu_0nowords
USER( T(ldr) r3, [r1], #4) USER( TUSER( ldr) r3, [r1], #4)
str r3, [r0], #4 str r3, [r0], #4
mov ip, r1, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction mov ip, r1, lsl #32 - PAGE_SHIFT @ On each page, use a ld/st??t instruction
rsb ip, ip, #0 rsb ip, ip, #0
...@@ -351,18 +351,18 @@ USER( T(ldr) r3, [r1], #4) ...@@ -351,18 +351,18 @@ USER( T(ldr) r3, [r1], #4)
ldmneia r1!, {r3 - r4} @ Shouldnt fault ldmneia r1!, {r3 - r4} @ Shouldnt fault
stmneia r0!, {r3 - r4} stmneia r0!, {r3 - r4}
tst ip, #4 tst ip, #4
T(ldrne) r3, [r1], #4 @ Shouldnt fault TUSER( ldrne) r3, [r1], #4 @ Shouldnt fault
strne r3, [r0], #4 strne r3, [r0], #4
ands ip, ip, #3 ands ip, ip, #3
beq .Lcfu_0fupi beq .Lcfu_0fupi
.Lcfu_0nowords: teq ip, #0 .Lcfu_0nowords: teq ip, #0
beq .Lcfu_finished beq .Lcfu_finished
.Lcfu_nowords: cmp ip, #2 .Lcfu_nowords: cmp ip, #2
USER( T(ldrb) r3, [r1], #1) @ May fault USER( TUSER( ldrb) r3, [r1], #1) @ May fault
strb r3, [r0], #1 strb r3, [r0], #1
USER( T(ldrgeb) r3, [r1], #1) @ May fault USER( TUSER( ldrgeb) r3, [r1], #1) @ May fault
strgeb r3, [r0], #1 strgeb r3, [r0], #1
USER( T(ldrgtb) r3, [r1], #1) @ May fault USER( TUSER( ldrgtb) r3, [r1], #1) @ May fault
strgtb r3, [r0], #1 strgtb r3, [r0], #1
b .Lcfu_finished b .Lcfu_finished
...@@ -375,7 +375,7 @@ USER( T(ldrgtb) r3, [r1], #1) @ May fault ...@@ -375,7 +375,7 @@ USER( T(ldrgtb) r3, [r1], #1) @ May fault
.Lcfu_src_not_aligned: .Lcfu_src_not_aligned:
bic r1, r1, #3 bic r1, r1, #3
USER( T(ldr) r7, [r1], #4) @ May fault USER( TUSER( ldr) r7, [r1], #4) @ May fault
cmp ip, #2 cmp ip, #2
bgt .Lcfu_3fupi bgt .Lcfu_3fupi
beq .Lcfu_2fupi beq .Lcfu_2fupi
...@@ -383,7 +383,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault ...@@ -383,7 +383,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault
addmi ip, r2, #4 addmi ip, r2, #4
bmi .Lcfu_1nowords bmi .Lcfu_1nowords
mov r3, r7, pull #8 mov r3, r7, pull #8
USER( T(ldr) r7, [r1], #4) @ May fault USER( TUSER( ldr) r7, [r1], #4) @ May fault
orr r3, r3, r7, push #24 orr r3, r3, r7, push #24
str r3, [r0], #4 str r3, [r0], #4
mov ip, r1, lsl #32 - PAGE_SHIFT mov ip, r1, lsl #32 - PAGE_SHIFT
...@@ -418,7 +418,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault ...@@ -418,7 +418,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault
stmneia r0!, {r3 - r4} stmneia r0!, {r3 - r4}
tst ip, #4 tst ip, #4
movne r3, r7, pull #8 movne r3, r7, pull #8
USER( T(ldrne) r7, [r1], #4) @ May fault USER( TUSER( ldrne) r7, [r1], #4) @ May fault
orrne r3, r3, r7, push #24 orrne r3, r3, r7, push #24
strne r3, [r0], #4 strne r3, [r0], #4
ands ip, ip, #3 ands ip, ip, #3
...@@ -438,7 +438,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault ...@@ -438,7 +438,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault
addmi ip, r2, #4 addmi ip, r2, #4
bmi .Lcfu_2nowords bmi .Lcfu_2nowords
mov r3, r7, pull #16 mov r3, r7, pull #16
USER( T(ldr) r7, [r1], #4) @ May fault USER( TUSER( ldr) r7, [r1], #4) @ May fault
orr r3, r3, r7, push #16 orr r3, r3, r7, push #16
str r3, [r0], #4 str r3, [r0], #4
mov ip, r1, lsl #32 - PAGE_SHIFT mov ip, r1, lsl #32 - PAGE_SHIFT
...@@ -474,7 +474,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault ...@@ -474,7 +474,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault
stmneia r0!, {r3 - r4} stmneia r0!, {r3 - r4}
tst ip, #4 tst ip, #4
movne r3, r7, pull #16 movne r3, r7, pull #16
USER( T(ldrne) r7, [r1], #4) @ May fault USER( TUSER( ldrne) r7, [r1], #4) @ May fault
orrne r3, r3, r7, push #16 orrne r3, r3, r7, push #16
strne r3, [r0], #4 strne r3, [r0], #4
ands ip, ip, #3 ands ip, ip, #3
...@@ -486,7 +486,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault ...@@ -486,7 +486,7 @@ USER( T(ldrne) r7, [r1], #4) @ May fault
strb r3, [r0], #1 strb r3, [r0], #1
movge r3, r7, get_byte_3 movge r3, r7, get_byte_3
strgeb r3, [r0], #1 strgeb r3, [r0], #1
USER( T(ldrgtb) r3, [r1], #0) @ May fault USER( TUSER( ldrgtb) r3, [r1], #0) @ May fault
strgtb r3, [r0], #1 strgtb r3, [r0], #1
b .Lcfu_finished b .Lcfu_finished
...@@ -494,7 +494,7 @@ USER( T(ldrgtb) r3, [r1], #0) @ May fault ...@@ -494,7 +494,7 @@ USER( T(ldrgtb) r3, [r1], #0) @ May fault
addmi ip, r2, #4 addmi ip, r2, #4
bmi .Lcfu_3nowords bmi .Lcfu_3nowords
mov r3, r7, pull #24 mov r3, r7, pull #24
USER( T(ldr) r7, [r1], #4) @ May fault USER( TUSER( ldr) r7, [r1], #4) @ May fault
orr r3, r3, r7, push #8 orr r3, r3, r7, push #8
str r3, [r0], #4 str r3, [r0], #4
mov ip, r1, lsl #32 - PAGE_SHIFT mov ip, r1, lsl #32 - PAGE_SHIFT
...@@ -529,7 +529,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault ...@@ -529,7 +529,7 @@ USER( T(ldr) r7, [r1], #4) @ May fault
stmneia r0!, {r3 - r4} stmneia r0!, {r3 - r4}
tst ip, #4 tst ip, #4
movne r3, r7, pull #24 movne r3, r7, pull #24
USER( T(ldrne) r7, [r1], #4) @ May fault USER( TUSER( ldrne) r7, [r1], #4) @ May fault
orrne r3, r3, r7, push #8 orrne r3, r3, r7, push #8
strne r3, [r0], #4 strne r3, [r0], #4
ands ip, ip, #3 ands ip, ip, #3
...@@ -539,9 +539,9 @@ USER( T(ldrne) r7, [r1], #4) @ May fault ...@@ -539,9 +539,9 @@ USER( T(ldrne) r7, [r1], #4) @ May fault
beq .Lcfu_finished beq .Lcfu_finished
cmp ip, #2 cmp ip, #2
strb r3, [r0], #1 strb r3, [r0], #1
USER( T(ldrgeb) r3, [r1], #1) @ May fault USER( TUSER( ldrgeb) r3, [r1], #1) @ May fault
strgeb r3, [r0], #1 strgeb r3, [r0], #1
USER( T(ldrgtb) r3, [r1], #1) @ May fault USER( TUSER( ldrgtb) r3, [r1], #1) @ May fault
strgtb r3, [r0], #1 strgtb r3, [r0], #1
b .Lcfu_finished b .Lcfu_finished
ENDPROC(__copy_from_user) ENDPROC(__copy_from_user)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册