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: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
d68133b5a8
commit
4e7682d077
@ -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 @@
|
|||||||
|
|
||||||
#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 @@
|
|||||||
* 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 @@
|
|||||||
* 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,
|
|||||||
|
|
||||||
#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,
|
|||||||
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 { \
|
|||||||
|
|
||||||
#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 { \
|
|||||||
|
|
||||||
#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 { \
|
|||||||
|
|
||||||
#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 { \
|
|||||||
|
|
||||||
#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 { \
|
|||||||
|
|
||||||
#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 @@
|
|||||||
#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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
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)
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
|||||||
.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)
|
|||||||
.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)
|
|||||||
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
|
|||||||
|
|
||||||
.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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user