|
@@ -14,6 +14,7 @@
|
|
#include <linux/linkage.h>
|
|
#include <linux/linkage.h>
|
|
#include <asm/assembler.h>
|
|
#include <asm/assembler.h>
|
|
#include <asm/errno.h>
|
|
#include <asm/errno.h>
|
|
|
|
+#include <asm/domain.h>
|
|
|
|
|
|
.text
|
|
.text
|
|
|
|
|
|
@@ -31,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( strbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strb) r3, [r0], #1) @ May fault
|
|
ldrgeb r3, [r1], #1
|
|
ldrgeb r3, [r1], #1
|
|
-USER( strgebt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgeb) r3, [r0], #1) @ May fault
|
|
ldrgtb r3, [r1], #1
|
|
ldrgtb r3, [r1], #1
|
|
-USER( strgtbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgtb) r3, [r0], #1) @ May fault
|
|
sub r2, r2, ip
|
|
sub r2, r2, ip
|
|
b .Lc2u_dest_aligned
|
|
b .Lc2u_dest_aligned
|
|
|
|
|
|
@@ -58,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( strt r3, [r0], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -87,18 +88,18 @@ USER( strt 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
|
|
- strnet r3, [r0], #4 @ Shouldnt fault
|
|
|
|
|
|
+ T(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( strbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strb) r3, [r0], #1) @ May fault
|
|
ldrgeb r3, [r1], #1
|
|
ldrgeb r3, [r1], #1
|
|
-USER( strgebt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgeb) r3, [r0], #1) @ May fault
|
|
ldrgtb r3, [r1], #1
|
|
ldrgtb r3, [r1], #1
|
|
-USER( strgtbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgtb) r3, [r0], #1) @ May fault
|
|
b .Lc2u_finished
|
|
b .Lc2u_finished
|
|
|
|
|
|
.Lc2u_not_enough:
|
|
.Lc2u_not_enough:
|
|
@@ -119,7 +120,7 @@ USER( strgtbt 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( strt r3, [r0], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -154,18 +155,18 @@ USER( strt 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
|
|
- strnet r3, [r0], #4 @ Shouldnt fault
|
|
|
|
|
|
+ T(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( strbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strb) r3, [r0], #1) @ May fault
|
|
movge r3, r7, get_byte_2
|
|
movge r3, r7, get_byte_2
|
|
-USER( strgebt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgeb) r3, [r0], #1) @ May fault
|
|
movgt r3, r7, get_byte_3
|
|
movgt r3, r7, get_byte_3
|
|
-USER( strgtbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgtb) r3, [r0], #1) @ May fault
|
|
b .Lc2u_finished
|
|
b .Lc2u_finished
|
|
|
|
|
|
.Lc2u_2fupi: subs r2, r2, #4
|
|
.Lc2u_2fupi: subs r2, r2, #4
|
|
@@ -174,7 +175,7 @@ USER( strgtbt 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( strt r3, [r0], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -209,18 +210,18 @@ USER( strt 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
|
|
- strnet r3, [r0], #4 @ Shouldnt fault
|
|
|
|
|
|
+ T(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( strbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strb) r3, [r0], #1) @ May fault
|
|
movge r3, r7, get_byte_3
|
|
movge r3, r7, get_byte_3
|
|
-USER( strgebt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgeb) r3, [r0], #1) @ May fault
|
|
ldrgtb r3, [r1], #0
|
|
ldrgtb r3, [r1], #0
|
|
-USER( strgtbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgtb) r3, [r0], #1) @ May fault
|
|
b .Lc2u_finished
|
|
b .Lc2u_finished
|
|
|
|
|
|
.Lc2u_3fupi: subs r2, r2, #4
|
|
.Lc2u_3fupi: subs r2, r2, #4
|
|
@@ -229,7 +230,7 @@ USER( strgtbt 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( strt r3, [r0], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -264,18 +265,18 @@ USER( strt 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
|
|
- strnet r3, [r0], #4 @ Shouldnt fault
|
|
|
|
|
|
+ T(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( strbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strb) r3, [r0], #1) @ May fault
|
|
ldrgeb r3, [r1], #1
|
|
ldrgeb r3, [r1], #1
|
|
-USER( strgebt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgeb) r3, [r0], #1) @ May fault
|
|
ldrgtb r3, [r1], #0
|
|
ldrgtb r3, [r1], #0
|
|
-USER( strgtbt r3, [r0], #1) @ May fault
|
|
|
|
|
|
+USER( T(strgtb) r3, [r0], #1) @ May fault
|
|
b .Lc2u_finished
|
|
b .Lc2u_finished
|
|
ENDPROC(__copy_to_user)
|
|
ENDPROC(__copy_to_user)
|
|
|
|
|
|
@@ -294,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( ldrbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrb) r3, [r1], #1) @ May fault
|
|
strb r3, [r0], #1
|
|
strb r3, [r0], #1
|
|
-USER( ldrgebt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrgeb) r3, [r1], #1) @ May fault
|
|
strgeb r3, [r0], #1
|
|
strgeb r3, [r0], #1
|
|
-USER( ldrgtbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -321,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( ldrt r3, [r1], #4)
|
|
|
|
|
|
+USER( T(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
|
|
@@ -350,18 +351,18 @@ USER( ldrt 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
|
|
- ldrnet r3, [r1], #4 @ Shouldnt fault
|
|
|
|
|
|
+ T(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( ldrbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrb) r3, [r1], #1) @ May fault
|
|
strb r3, [r0], #1
|
|
strb r3, [r0], #1
|
|
-USER( ldrgebt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrgeb) r3, [r1], #1) @ May fault
|
|
strgeb r3, [r0], #1
|
|
strgeb r3, [r0], #1
|
|
-USER( ldrgtbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrgtb) r3, [r1], #1) @ May fault
|
|
strgtb r3, [r0], #1
|
|
strgtb r3, [r0], #1
|
|
b .Lcfu_finished
|
|
b .Lcfu_finished
|
|
|
|
|
|
@@ -374,7 +375,7 @@ USER( ldrgtbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
.Lcfu_src_not_aligned:
|
|
.Lcfu_src_not_aligned:
|
|
bic r1, r1, #3
|
|
bic r1, r1, #3
|
|
-USER( ldrt r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(ldr) r7, [r1], #4) @ May fault
|
|
cmp ip, #2
|
|
cmp ip, #2
|
|
bgt .Lcfu_3fupi
|
|
bgt .Lcfu_3fupi
|
|
beq .Lcfu_2fupi
|
|
beq .Lcfu_2fupi
|
|
@@ -382,7 +383,7 @@ USER( ldrt 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( ldrt r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -417,7 +418,7 @@ USER( ldrt 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( ldrnet r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -437,7 +438,7 @@ USER( ldrnet 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( ldrt r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -473,7 +474,7 @@ USER( ldrt 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( ldrnet r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -485,7 +486,7 @@ USER( ldrnet 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( ldrgtbt r3, [r1], #0) @ May fault
|
|
|
|
|
|
+USER( T(ldrgtb) r3, [r1], #0) @ May fault
|
|
strgtb r3, [r0], #1
|
|
strgtb r3, [r0], #1
|
|
b .Lcfu_finished
|
|
b .Lcfu_finished
|
|
|
|
|
|
@@ -493,7 +494,7 @@ USER( ldrgtbt 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( ldrt r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -528,7 +529,7 @@ USER( ldrt 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( ldrnet r7, [r1], #4) @ May fault
|
|
|
|
|
|
+USER( T(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
|
|
@@ -538,9 +539,9 @@ USER( ldrnet 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( ldrgebt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(ldrgeb) r3, [r1], #1) @ May fault
|
|
strgeb r3, [r0], #1
|
|
strgeb r3, [r0], #1
|
|
-USER( ldrgtbt r3, [r1], #1) @ May fault
|
|
|
|
|
|
+USER( T(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)
|