diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-06-30 11:29:12 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-07-18 07:29:04 -0400 |
commit | 6ebbf2ce437b33022d30badd49dc94d33ecfa498 (patch) | |
tree | bc015e35b456a28bb0e501803a454dc0c0d3291a /arch/arm/lib | |
parent | af040ffc9ba1e079ee4c0748aff64fa3d4716fa5 (diff) |
ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+
ARMv6 and greater introduced a new instruction ("bx") which can be used
to return from function calls. Recent CPUs perform better when the
"bx lr" instruction is used rather than the "mov pc, lr" instruction,
and this sequence is strongly recommended to be used by the ARM
architecture manual (section A.4.1.1).
We provide a new macro "ret" with all its variants for the condition
code which will resolve to the appropriate instruction.
Rather than doing this piecemeal, and miss some instances, change all
the "mov pc" instances to use the new macro, with the exception of
the "movs" instruction and the kprobes code. This allows us to detect
the "mov pc, lr" case and fix it up - and also gives us the possibility
of deploying this for other registers depending on the CPU selection.
Reported-by: Will Deacon <will.deacon@arm.com>
Tested-by: Stephen Warren <swarren@nvidia.com> # Tegra Jetson TK1
Tested-by: Robert Jarzmik <robert.jarzmik@free.fr> # mioa701_bootresume.S
Tested-by: Andrew Lunn <andrew@lunn.ch> # Kirkwood
Tested-by: Shawn Guo <shawn.guo@freescale.com>
Tested-by: Tony Lindgren <tony@atomide.com> # OMAPs
Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com> # Armada XP, 375, 385
Acked-by: Sekhar Nori <nsekhar@ti.com> # DaVinci
Acked-by: Christoffer Dall <christoffer.dall@linaro.org> # kvm/hyp
Acked-by: Haojian Zhuang <haojian.zhuang@gmail.com> # PXA3xx
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> # Xen
Tested-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> # ARMv7M
Tested-by: Simon Horman <horms+renesas@verge.net.au> # Shmobile
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/lib')
30 files changed, 89 insertions, 80 deletions
diff --git a/arch/arm/lib/ashldi3.S b/arch/arm/lib/ashldi3.S index 638deb13da1c..b05e95840651 100644 --- a/arch/arm/lib/ashldi3.S +++ b/arch/arm/lib/ashldi3.S | |||
@@ -27,6 +27,7 @@ Boston, MA 02110-1301, USA. */ | |||
27 | 27 | ||
28 | 28 | ||
29 | #include <linux/linkage.h> | 29 | #include <linux/linkage.h> |
30 | #include <asm/assembler.h> | ||
30 | 31 | ||
31 | #ifdef __ARMEB__ | 32 | #ifdef __ARMEB__ |
32 | #define al r1 | 33 | #define al r1 |
@@ -47,7 +48,7 @@ ENTRY(__aeabi_llsl) | |||
47 | THUMB( lsrmi r3, al, ip ) | 48 | THUMB( lsrmi r3, al, ip ) |
48 | THUMB( orrmi ah, ah, r3 ) | 49 | THUMB( orrmi ah, ah, r3 ) |
49 | mov al, al, lsl r2 | 50 | mov al, al, lsl r2 |
50 | mov pc, lr | 51 | ret lr |
51 | 52 | ||
52 | ENDPROC(__ashldi3) | 53 | ENDPROC(__ashldi3) |
53 | ENDPROC(__aeabi_llsl) | 54 | ENDPROC(__aeabi_llsl) |
diff --git a/arch/arm/lib/ashrdi3.S b/arch/arm/lib/ashrdi3.S index 015e8aa5a1d1..275d7d2341a4 100644 --- a/arch/arm/lib/ashrdi3.S +++ b/arch/arm/lib/ashrdi3.S | |||
@@ -27,6 +27,7 @@ Boston, MA 02110-1301, USA. */ | |||
27 | 27 | ||
28 | 28 | ||
29 | #include <linux/linkage.h> | 29 | #include <linux/linkage.h> |
30 | #include <asm/assembler.h> | ||
30 | 31 | ||
31 | #ifdef __ARMEB__ | 32 | #ifdef __ARMEB__ |
32 | #define al r1 | 33 | #define al r1 |
@@ -47,7 +48,7 @@ ENTRY(__aeabi_lasr) | |||
47 | THUMB( lslmi r3, ah, ip ) | 48 | THUMB( lslmi r3, ah, ip ) |
48 | THUMB( orrmi al, al, r3 ) | 49 | THUMB( orrmi al, al, r3 ) |
49 | mov ah, ah, asr r2 | 50 | mov ah, ah, asr r2 |
50 | mov pc, lr | 51 | ret lr |
51 | 52 | ||
52 | ENDPROC(__ashrdi3) | 53 | ENDPROC(__ashrdi3) |
53 | ENDPROC(__aeabi_lasr) | 54 | ENDPROC(__aeabi_lasr) |
diff --git a/arch/arm/lib/backtrace.S b/arch/arm/lib/backtrace.S index 4102be617fce..fab5a50503ae 100644 --- a/arch/arm/lib/backtrace.S +++ b/arch/arm/lib/backtrace.S | |||
@@ -25,7 +25,7 @@ | |||
25 | ENTRY(c_backtrace) | 25 | ENTRY(c_backtrace) |
26 | 26 | ||
27 | #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK) | 27 | #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK) |
28 | mov pc, lr | 28 | ret lr |
29 | ENDPROC(c_backtrace) | 29 | ENDPROC(c_backtrace) |
30 | #else | 30 | #else |
31 | stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... | 31 | stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... |
diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h index 9f12ed1eea86..7d807cfd8ef5 100644 --- a/arch/arm/lib/bitops.h +++ b/arch/arm/lib/bitops.h | |||
@@ -1,3 +1,4 @@ | |||
1 | #include <asm/assembler.h> | ||
1 | #include <asm/unwind.h> | 2 | #include <asm/unwind.h> |
2 | 3 | ||
3 | #if __LINUX_ARM_ARCH__ >= 6 | 4 | #if __LINUX_ARM_ARCH__ >= 6 |
@@ -70,7 +71,7 @@ UNWIND( .fnstart ) | |||
70 | \instr r2, r2, r3 | 71 | \instr r2, r2, r3 |
71 | str r2, [r1, r0, lsl #2] | 72 | str r2, [r1, r0, lsl #2] |
72 | restore_irqs ip | 73 | restore_irqs ip |
73 | mov pc, lr | 74 | ret lr |
74 | UNWIND( .fnend ) | 75 | UNWIND( .fnend ) |
75 | ENDPROC(\name ) | 76 | ENDPROC(\name ) |
76 | .endm | 77 | .endm |
@@ -98,7 +99,7 @@ UNWIND( .fnstart ) | |||
98 | \store r2, [r1] | 99 | \store r2, [r1] |
99 | moveq r0, #0 | 100 | moveq r0, #0 |
100 | restore_irqs ip | 101 | restore_irqs ip |
101 | mov pc, lr | 102 | ret lr |
102 | UNWIND( .fnend ) | 103 | UNWIND( .fnend ) |
103 | ENDPROC(\name ) | 104 | ENDPROC(\name ) |
104 | .endm | 105 | .endm |
diff --git a/arch/arm/lib/bswapsdi2.S b/arch/arm/lib/bswapsdi2.S index 9fcdd154eff9..07cda737bb11 100644 --- a/arch/arm/lib/bswapsdi2.S +++ b/arch/arm/lib/bswapsdi2.S | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <linux/linkage.h> | 1 | #include <linux/linkage.h> |
2 | #include <asm/assembler.h> | ||
2 | 3 | ||
3 | #if __LINUX_ARM_ARCH__ >= 6 | 4 | #if __LINUX_ARM_ARCH__ >= 6 |
4 | ENTRY(__bswapsi2) | 5 | ENTRY(__bswapsi2) |
@@ -18,7 +19,7 @@ ENTRY(__bswapsi2) | |||
18 | mov r3, r3, lsr #8 | 19 | mov r3, r3, lsr #8 |
19 | bic r3, r3, #0xff00 | 20 | bic r3, r3, #0xff00 |
20 | eor r0, r3, r0, ror #8 | 21 | eor r0, r3, r0, ror #8 |
21 | mov pc, lr | 22 | ret lr |
22 | ENDPROC(__bswapsi2) | 23 | ENDPROC(__bswapsi2) |
23 | 24 | ||
24 | ENTRY(__bswapdi2) | 25 | ENTRY(__bswapdi2) |
@@ -31,6 +32,6 @@ ENTRY(__bswapdi2) | |||
31 | bic r1, r1, #0xff00 | 32 | bic r1, r1, #0xff00 |
32 | eor r1, r1, r0, ror #8 | 33 | eor r1, r1, r0, ror #8 |
33 | eor r0, r3, ip, ror #8 | 34 | eor r0, r3, ip, ror #8 |
34 | mov pc, lr | 35 | ret lr |
35 | ENDPROC(__bswapdi2) | 36 | ENDPROC(__bswapdi2) |
36 | #endif | 37 | #endif |
diff --git a/arch/arm/lib/call_with_stack.S b/arch/arm/lib/call_with_stack.S index 916c80f13ae7..ed1a421813cb 100644 --- a/arch/arm/lib/call_with_stack.S +++ b/arch/arm/lib/call_with_stack.S | |||
@@ -36,9 +36,9 @@ ENTRY(call_with_stack) | |||
36 | mov r0, r1 | 36 | mov r0, r1 |
37 | 37 | ||
38 | adr lr, BSYM(1f) | 38 | adr lr, BSYM(1f) |
39 | mov pc, r2 | 39 | ret r2 |
40 | 40 | ||
41 | 1: ldr lr, [sp] | 41 | 1: ldr lr, [sp] |
42 | ldr sp, [sp, #4] | 42 | ldr sp, [sp, #4] |
43 | mov pc, lr | 43 | ret lr |
44 | ENDPROC(call_with_stack) | 44 | ENDPROC(call_with_stack) |
diff --git a/arch/arm/lib/csumpartial.S b/arch/arm/lib/csumpartial.S index 31d3cb34740d..984e0f29d548 100644 --- a/arch/arm/lib/csumpartial.S +++ b/arch/arm/lib/csumpartial.S | |||
@@ -97,7 +97,7 @@ td3 .req lr | |||
97 | #endif | 97 | #endif |
98 | #endif | 98 | #endif |
99 | adcnes sum, sum, td0 @ update checksum | 99 | adcnes sum, sum, td0 @ update checksum |
100 | mov pc, lr | 100 | ret lr |
101 | 101 | ||
102 | ENTRY(csum_partial) | 102 | ENTRY(csum_partial) |
103 | stmfd sp!, {buf, lr} | 103 | stmfd sp!, {buf, lr} |
diff --git a/arch/arm/lib/csumpartialcopygeneric.S b/arch/arm/lib/csumpartialcopygeneric.S index d6e742d24007..10b45909610c 100644 --- a/arch/arm/lib/csumpartialcopygeneric.S +++ b/arch/arm/lib/csumpartialcopygeneric.S | |||
@@ -7,6 +7,7 @@ | |||
7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | #include <asm/assembler.h> | ||
10 | 11 | ||
11 | /* | 12 | /* |
12 | * unsigned int | 13 | * unsigned int |
@@ -40,7 +41,7 @@ sum .req r3 | |||
40 | adcs sum, sum, ip, put_byte_1 @ update checksum | 41 | adcs sum, sum, ip, put_byte_1 @ update checksum |
41 | strb ip, [dst], #1 | 42 | strb ip, [dst], #1 |
42 | tst dst, #2 | 43 | tst dst, #2 |
43 | moveq pc, lr @ dst is now 32bit aligned | 44 | reteq lr @ dst is now 32bit aligned |
44 | 45 | ||
45 | .Ldst_16bit: load2b r8, ip | 46 | .Ldst_16bit: load2b r8, ip |
46 | sub len, len, #2 | 47 | sub len, len, #2 |
@@ -48,7 +49,7 @@ sum .req r3 | |||
48 | strb r8, [dst], #1 | 49 | strb r8, [dst], #1 |
49 | adcs sum, sum, ip, put_byte_1 | 50 | adcs sum, sum, ip, put_byte_1 |
50 | strb ip, [dst], #1 | 51 | strb ip, [dst], #1 |
51 | mov pc, lr @ dst is now 32bit aligned | 52 | ret lr @ dst is now 32bit aligned |
52 | 53 | ||
53 | /* | 54 | /* |
54 | * Handle 0 to 7 bytes, with any alignment of source and | 55 | * Handle 0 to 7 bytes, with any alignment of source and |
diff --git a/arch/arm/lib/delay-loop.S b/arch/arm/lib/delay-loop.S index bc1033b897b4..518bf6e93f78 100644 --- a/arch/arm/lib/delay-loop.S +++ b/arch/arm/lib/delay-loop.S | |||
@@ -35,7 +35,7 @@ ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0x7fffff06 | |||
35 | mul r0, r2, r0 @ max = 2^32-1 | 35 | mul r0, r2, r0 @ max = 2^32-1 |
36 | add r0, r0, r1, lsr #32-6 | 36 | add r0, r0, r1, lsr #32-6 |
37 | movs r0, r0, lsr #6 | 37 | movs r0, r0, lsr #6 |
38 | moveq pc, lr | 38 | reteq lr |
39 | 39 | ||
40 | /* | 40 | /* |
41 | * loops = r0 * HZ * loops_per_jiffy / 1000000 | 41 | * loops = r0 * HZ * loops_per_jiffy / 1000000 |
@@ -46,23 +46,23 @@ ENTRY(__loop_const_udelay) @ 0 <= r0 <= 0x7fffff06 | |||
46 | ENTRY(__loop_delay) | 46 | ENTRY(__loop_delay) |
47 | subs r0, r0, #1 | 47 | subs r0, r0, #1 |
48 | #if 0 | 48 | #if 0 |
49 | movls pc, lr | 49 | retls lr |
50 | subs r0, r0, #1 | 50 | subs r0, r0, #1 |
51 | movls pc, lr | 51 | retls lr |
52 | subs r0, r0, #1 | 52 | subs r0, r0, #1 |
53 | movls pc, lr | 53 | retls lr |
54 | subs r0, r0, #1 | 54 | subs r0, r0, #1 |
55 | movls pc, lr | 55 | retls lr |
56 | subs r0, r0, #1 | 56 | subs r0, r0, #1 |
57 | movls pc, lr | 57 | retls lr |
58 | subs r0, r0, #1 | 58 | subs r0, r0, #1 |
59 | movls pc, lr | 59 | retls lr |
60 | subs r0, r0, #1 | 60 | subs r0, r0, #1 |
61 | movls pc, lr | 61 | retls lr |
62 | subs r0, r0, #1 | 62 | subs r0, r0, #1 |
63 | #endif | 63 | #endif |
64 | bhi __loop_delay | 64 | bhi __loop_delay |
65 | mov pc, lr | 65 | ret lr |
66 | ENDPROC(__loop_udelay) | 66 | ENDPROC(__loop_udelay) |
67 | ENDPROC(__loop_const_udelay) | 67 | ENDPROC(__loop_const_udelay) |
68 | ENDPROC(__loop_delay) | 68 | ENDPROC(__loop_delay) |
diff --git a/arch/arm/lib/div64.S b/arch/arm/lib/div64.S index e55c4842c290..a9eafe4981eb 100644 --- a/arch/arm/lib/div64.S +++ b/arch/arm/lib/div64.S | |||
@@ -13,6 +13,7 @@ | |||
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/linkage.h> | 15 | #include <linux/linkage.h> |
16 | #include <asm/assembler.h> | ||
16 | #include <asm/unwind.h> | 17 | #include <asm/unwind.h> |
17 | 18 | ||
18 | #ifdef __ARMEB__ | 19 | #ifdef __ARMEB__ |
@@ -97,7 +98,7 @@ UNWIND(.fnstart) | |||
97 | mov yl, #0 | 98 | mov yl, #0 |
98 | cmpeq xl, r4 | 99 | cmpeq xl, r4 |
99 | movlo xh, xl | 100 | movlo xh, xl |
100 | movlo pc, lr | 101 | retlo lr |
101 | 102 | ||
102 | @ The division loop for lower bit positions. | 103 | @ The division loop for lower bit positions. |
103 | @ Here we shift remainer bits leftwards rather than moving the | 104 | @ Here we shift remainer bits leftwards rather than moving the |
@@ -111,14 +112,14 @@ UNWIND(.fnstart) | |||
111 | subcs xh, xh, r4 | 112 | subcs xh, xh, r4 |
112 | movs ip, ip, lsr #1 | 113 | movs ip, ip, lsr #1 |
113 | bne 4b | 114 | bne 4b |
114 | mov pc, lr | 115 | ret lr |
115 | 116 | ||
116 | @ The top part of remainder became zero. If carry is set | 117 | @ The top part of remainder became zero. If carry is set |
117 | @ (the 33th bit) this is a false positive so resume the loop. | 118 | @ (the 33th bit) this is a false positive so resume the loop. |
118 | @ Otherwise, if lower part is also null then we are done. | 119 | @ Otherwise, if lower part is also null then we are done. |
119 | 6: bcs 5b | 120 | 6: bcs 5b |
120 | cmp xl, #0 | 121 | cmp xl, #0 |
121 | moveq pc, lr | 122 | reteq lr |
122 | 123 | ||
123 | @ We still have remainer bits in the low part. Bring them up. | 124 | @ We still have remainer bits in the low part. Bring them up. |
124 | 125 | ||
@@ -144,7 +145,7 @@ UNWIND(.fnstart) | |||
144 | movs ip, ip, lsr #1 | 145 | movs ip, ip, lsr #1 |
145 | mov xh, #1 | 146 | mov xh, #1 |
146 | bne 4b | 147 | bne 4b |
147 | mov pc, lr | 148 | ret lr |
148 | 149 | ||
149 | 8: @ Division by a power of 2: determine what that divisor order is | 150 | 8: @ Division by a power of 2: determine what that divisor order is |
150 | @ then simply shift values around | 151 | @ then simply shift values around |
@@ -184,13 +185,13 @@ UNWIND(.fnstart) | |||
184 | THUMB( orr yl, yl, xh ) | 185 | THUMB( orr yl, yl, xh ) |
185 | mov xh, xl, lsl ip | 186 | mov xh, xl, lsl ip |
186 | mov xh, xh, lsr ip | 187 | mov xh, xh, lsr ip |
187 | mov pc, lr | 188 | ret lr |
188 | 189 | ||
189 | @ eq -> division by 1: obvious enough... | 190 | @ eq -> division by 1: obvious enough... |
190 | 9: moveq yl, xl | 191 | 9: moveq yl, xl |
191 | moveq yh, xh | 192 | moveq yh, xh |
192 | moveq xh, #0 | 193 | moveq xh, #0 |
193 | moveq pc, lr | 194 | reteq lr |
194 | UNWIND(.fnend) | 195 | UNWIND(.fnend) |
195 | 196 | ||
196 | UNWIND(.fnstart) | 197 | UNWIND(.fnstart) |
diff --git a/arch/arm/lib/findbit.S b/arch/arm/lib/findbit.S index 64f6bc1a9132..7848780e8834 100644 --- a/arch/arm/lib/findbit.S +++ b/arch/arm/lib/findbit.S | |||
@@ -35,7 +35,7 @@ ENTRY(_find_first_zero_bit_le) | |||
35 | 2: cmp r2, r1 @ any more? | 35 | 2: cmp r2, r1 @ any more? |
36 | blo 1b | 36 | blo 1b |
37 | 3: mov r0, r1 @ no free bits | 37 | 3: mov r0, r1 @ no free bits |
38 | mov pc, lr | 38 | ret lr |
39 | ENDPROC(_find_first_zero_bit_le) | 39 | ENDPROC(_find_first_zero_bit_le) |
40 | 40 | ||
41 | /* | 41 | /* |
@@ -76,7 +76,7 @@ ENTRY(_find_first_bit_le) | |||
76 | 2: cmp r2, r1 @ any more? | 76 | 2: cmp r2, r1 @ any more? |
77 | blo 1b | 77 | blo 1b |
78 | 3: mov r0, r1 @ no free bits | 78 | 3: mov r0, r1 @ no free bits |
79 | mov pc, lr | 79 | ret lr |
80 | ENDPROC(_find_first_bit_le) | 80 | ENDPROC(_find_first_bit_le) |
81 | 81 | ||
82 | /* | 82 | /* |
@@ -114,7 +114,7 @@ ENTRY(_find_first_zero_bit_be) | |||
114 | 2: cmp r2, r1 @ any more? | 114 | 2: cmp r2, r1 @ any more? |
115 | blo 1b | 115 | blo 1b |
116 | 3: mov r0, r1 @ no free bits | 116 | 3: mov r0, r1 @ no free bits |
117 | mov pc, lr | 117 | ret lr |
118 | ENDPROC(_find_first_zero_bit_be) | 118 | ENDPROC(_find_first_zero_bit_be) |
119 | 119 | ||
120 | ENTRY(_find_next_zero_bit_be) | 120 | ENTRY(_find_next_zero_bit_be) |
@@ -148,7 +148,7 @@ ENTRY(_find_first_bit_be) | |||
148 | 2: cmp r2, r1 @ any more? | 148 | 2: cmp r2, r1 @ any more? |
149 | blo 1b | 149 | blo 1b |
150 | 3: mov r0, r1 @ no free bits | 150 | 3: mov r0, r1 @ no free bits |
151 | mov pc, lr | 151 | ret lr |
152 | ENDPROC(_find_first_bit_be) | 152 | ENDPROC(_find_first_bit_be) |
153 | 153 | ||
154 | ENTRY(_find_next_bit_be) | 154 | ENTRY(_find_next_bit_be) |
@@ -192,5 +192,5 @@ ENDPROC(_find_next_bit_be) | |||
192 | #endif | 192 | #endif |
193 | cmp r1, r0 @ Clamp to maxbit | 193 | cmp r1, r0 @ Clamp to maxbit |
194 | movlo r0, r1 | 194 | movlo r0, r1 |
195 | mov pc, lr | 195 | ret lr |
196 | 196 | ||
diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S index 9b06bb41fca6..0f958e3d8180 100644 --- a/arch/arm/lib/getuser.S +++ b/arch/arm/lib/getuser.S | |||
@@ -36,7 +36,7 @@ ENTRY(__get_user_1) | |||
36 | check_uaccess r0, 1, r1, r2, __get_user_bad | 36 | check_uaccess r0, 1, r1, r2, __get_user_bad |
37 | 1: TUSER(ldrb) r2, [r0] | 37 | 1: TUSER(ldrb) r2, [r0] |
38 | mov r0, #0 | 38 | mov r0, #0 |
39 | mov pc, lr | 39 | ret lr |
40 | ENDPROC(__get_user_1) | 40 | ENDPROC(__get_user_1) |
41 | 41 | ||
42 | ENTRY(__get_user_2) | 42 | ENTRY(__get_user_2) |
@@ -56,20 +56,20 @@ rb .req r0 | |||
56 | orr r2, rb, r2, lsl #8 | 56 | orr r2, rb, r2, lsl #8 |
57 | #endif | 57 | #endif |
58 | mov r0, #0 | 58 | mov r0, #0 |
59 | mov pc, lr | 59 | ret lr |
60 | ENDPROC(__get_user_2) | 60 | ENDPROC(__get_user_2) |
61 | 61 | ||
62 | ENTRY(__get_user_4) | 62 | ENTRY(__get_user_4) |
63 | check_uaccess r0, 4, r1, r2, __get_user_bad | 63 | check_uaccess r0, 4, r1, r2, __get_user_bad |
64 | 4: TUSER(ldr) r2, [r0] | 64 | 4: TUSER(ldr) r2, [r0] |
65 | mov r0, #0 | 65 | mov r0, #0 |
66 | mov pc, lr | 66 | ret lr |
67 | ENDPROC(__get_user_4) | 67 | ENDPROC(__get_user_4) |
68 | 68 | ||
69 | __get_user_bad: | 69 | __get_user_bad: |
70 | mov r2, #0 | 70 | mov r2, #0 |
71 | mov r0, #-EFAULT | 71 | mov r0, #-EFAULT |
72 | mov pc, lr | 72 | ret lr |
73 | ENDPROC(__get_user_bad) | 73 | ENDPROC(__get_user_bad) |
74 | 74 | ||
75 | .pushsection __ex_table, "a" | 75 | .pushsection __ex_table, "a" |
diff --git a/arch/arm/lib/io-readsb.S b/arch/arm/lib/io-readsb.S index 9f4238987fe9..c31b2f3153f1 100644 --- a/arch/arm/lib/io-readsb.S +++ b/arch/arm/lib/io-readsb.S | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | ENTRY(__raw_readsb) | 26 | ENTRY(__raw_readsb) |
27 | teq r2, #0 @ do we have to check for the zero len? | 27 | teq r2, #0 @ do we have to check for the zero len? |
28 | moveq pc, lr | 28 | reteq lr |
29 | ands ip, r1, #3 | 29 | ands ip, r1, #3 |
30 | bne .Linsb_align | 30 | bne .Linsb_align |
31 | 31 | ||
diff --git a/arch/arm/lib/io-readsl.S b/arch/arm/lib/io-readsl.S index 7a7430950c79..2ed86fa5465f 100644 --- a/arch/arm/lib/io-readsl.S +++ b/arch/arm/lib/io-readsl.S | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | ENTRY(__raw_readsl) | 13 | ENTRY(__raw_readsl) |
14 | teq r2, #0 @ do we have to check for the zero len? | 14 | teq r2, #0 @ do we have to check for the zero len? |
15 | moveq pc, lr | 15 | reteq lr |
16 | ands ip, r1, #3 | 16 | ands ip, r1, #3 |
17 | bne 3f | 17 | bne 3f |
18 | 18 | ||
@@ -33,7 +33,7 @@ ENTRY(__raw_readsl) | |||
33 | stmcsia r1!, {r3, ip} | 33 | stmcsia r1!, {r3, ip} |
34 | ldrne r3, [r0, #0] | 34 | ldrne r3, [r0, #0] |
35 | strne r3, [r1, #0] | 35 | strne r3, [r1, #0] |
36 | mov pc, lr | 36 | ret lr |
37 | 37 | ||
38 | 3: ldr r3, [r0] | 38 | 3: ldr r3, [r0] |
39 | cmp ip, #2 | 39 | cmp ip, #2 |
@@ -75,5 +75,5 @@ ENTRY(__raw_readsl) | |||
75 | strb r3, [r1, #1] | 75 | strb r3, [r1, #1] |
76 | 8: mov r3, ip, get_byte_0 | 76 | 8: mov r3, ip, get_byte_0 |
77 | strb r3, [r1, #0] | 77 | strb r3, [r1, #0] |
78 | mov pc, lr | 78 | ret lr |
79 | ENDPROC(__raw_readsl) | 79 | ENDPROC(__raw_readsl) |
diff --git a/arch/arm/lib/io-readsw-armv3.S b/arch/arm/lib/io-readsw-armv3.S index 88487c8c4f23..413da9914529 100644 --- a/arch/arm/lib/io-readsw-armv3.S +++ b/arch/arm/lib/io-readsw-armv3.S | |||
@@ -27,11 +27,11 @@ | |||
27 | strb r3, [r1], #1 | 27 | strb r3, [r1], #1 |
28 | 28 | ||
29 | subs r2, r2, #1 | 29 | subs r2, r2, #1 |
30 | moveq pc, lr | 30 | reteq lr |
31 | 31 | ||
32 | ENTRY(__raw_readsw) | 32 | ENTRY(__raw_readsw) |
33 | teq r2, #0 @ do we have to check for the zero len? | 33 | teq r2, #0 @ do we have to check for the zero len? |
34 | moveq pc, lr | 34 | reteq lr |
35 | tst r1, #3 | 35 | tst r1, #3 |
36 | bne .Linsw_align | 36 | bne .Linsw_align |
37 | 37 | ||
diff --git a/arch/arm/lib/io-readsw-armv4.S b/arch/arm/lib/io-readsw-armv4.S index 1f393d42593d..d9a45e9692ae 100644 --- a/arch/arm/lib/io-readsw-armv4.S +++ b/arch/arm/lib/io-readsw-armv4.S | |||
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | ENTRY(__raw_readsw) | 27 | ENTRY(__raw_readsw) |
28 | teq r2, #0 | 28 | teq r2, #0 |
29 | moveq pc, lr | 29 | reteq lr |
30 | tst r1, #3 | 30 | tst r1, #3 |
31 | bne .Linsw_align | 31 | bne .Linsw_align |
32 | 32 | ||
diff --git a/arch/arm/lib/io-writesb.S b/arch/arm/lib/io-writesb.S index 68b92f4acaeb..a46bbc9b168b 100644 --- a/arch/arm/lib/io-writesb.S +++ b/arch/arm/lib/io-writesb.S | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | ENTRY(__raw_writesb) | 46 | ENTRY(__raw_writesb) |
47 | teq r2, #0 @ do we have to check for the zero len? | 47 | teq r2, #0 @ do we have to check for the zero len? |
48 | moveq pc, lr | 48 | reteq lr |
49 | ands ip, r1, #3 | 49 | ands ip, r1, #3 |
50 | bne .Loutsb_align | 50 | bne .Loutsb_align |
51 | 51 | ||
diff --git a/arch/arm/lib/io-writesl.S b/arch/arm/lib/io-writesl.S index d0d104a0dd11..4ea2435988c1 100644 --- a/arch/arm/lib/io-writesl.S +++ b/arch/arm/lib/io-writesl.S | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | ENTRY(__raw_writesl) | 13 | ENTRY(__raw_writesl) |
14 | teq r2, #0 @ do we have to check for the zero len? | 14 | teq r2, #0 @ do we have to check for the zero len? |
15 | moveq pc, lr | 15 | reteq lr |
16 | ands ip, r1, #3 | 16 | ands ip, r1, #3 |
17 | bne 3f | 17 | bne 3f |
18 | 18 | ||
@@ -33,7 +33,7 @@ ENTRY(__raw_writesl) | |||
33 | ldrne r3, [r1, #0] | 33 | ldrne r3, [r1, #0] |
34 | strcs ip, [r0, #0] | 34 | strcs ip, [r0, #0] |
35 | strne r3, [r0, #0] | 35 | strne r3, [r0, #0] |
36 | mov pc, lr | 36 | ret lr |
37 | 37 | ||
38 | 3: bic r1, r1, #3 | 38 | 3: bic r1, r1, #3 |
39 | ldr r3, [r1], #4 | 39 | ldr r3, [r1], #4 |
@@ -47,7 +47,7 @@ ENTRY(__raw_writesl) | |||
47 | orr ip, ip, r3, lspush #16 | 47 | orr ip, ip, r3, lspush #16 |
48 | str ip, [r0] | 48 | str ip, [r0] |
49 | bne 4b | 49 | bne 4b |
50 | mov pc, lr | 50 | ret lr |
51 | 51 | ||
52 | 5: mov ip, r3, lspull #8 | 52 | 5: mov ip, r3, lspull #8 |
53 | ldr r3, [r1], #4 | 53 | ldr r3, [r1], #4 |
@@ -55,7 +55,7 @@ ENTRY(__raw_writesl) | |||
55 | orr ip, ip, r3, lspush #24 | 55 | orr ip, ip, r3, lspush #24 |
56 | str ip, [r0] | 56 | str ip, [r0] |
57 | bne 5b | 57 | bne 5b |
58 | mov pc, lr | 58 | ret lr |
59 | 59 | ||
60 | 6: mov ip, r3, lspull #24 | 60 | 6: mov ip, r3, lspull #24 |
61 | ldr r3, [r1], #4 | 61 | ldr r3, [r1], #4 |
@@ -63,5 +63,5 @@ ENTRY(__raw_writesl) | |||
63 | orr ip, ip, r3, lspush #8 | 63 | orr ip, ip, r3, lspush #8 |
64 | str ip, [r0] | 64 | str ip, [r0] |
65 | bne 6b | 65 | bne 6b |
66 | mov pc, lr | 66 | ret lr |
67 | ENDPROC(__raw_writesl) | 67 | ENDPROC(__raw_writesl) |
diff --git a/arch/arm/lib/io-writesw-armv3.S b/arch/arm/lib/io-writesw-armv3.S index 49b800419e32..121789eb6802 100644 --- a/arch/arm/lib/io-writesw-armv3.S +++ b/arch/arm/lib/io-writesw-armv3.S | |||
@@ -28,11 +28,11 @@ | |||
28 | orr r3, r3, r3, lsl #16 | 28 | orr r3, r3, r3, lsl #16 |
29 | str r3, [r0] | 29 | str r3, [r0] |
30 | subs r2, r2, #1 | 30 | subs r2, r2, #1 |
31 | moveq pc, lr | 31 | reteq lr |
32 | 32 | ||
33 | ENTRY(__raw_writesw) | 33 | ENTRY(__raw_writesw) |
34 | teq r2, #0 @ do we have to check for the zero len? | 34 | teq r2, #0 @ do we have to check for the zero len? |
35 | moveq pc, lr | 35 | reteq lr |
36 | tst r1, #3 | 36 | tst r1, #3 |
37 | bne .Loutsw_align | 37 | bne .Loutsw_align |
38 | 38 | ||
diff --git a/arch/arm/lib/io-writesw-armv4.S b/arch/arm/lib/io-writesw-armv4.S index ff4f71b579ee..269f90c51ad2 100644 --- a/arch/arm/lib/io-writesw-armv4.S +++ b/arch/arm/lib/io-writesw-armv4.S | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | ENTRY(__raw_writesw) | 32 | ENTRY(__raw_writesw) |
33 | teq r2, #0 | 33 | teq r2, #0 |
34 | moveq pc, lr | 34 | reteq lr |
35 | ands r3, r1, #3 | 35 | ands r3, r1, #3 |
36 | bne .Loutsw_align | 36 | bne .Loutsw_align |
37 | 37 | ||
@@ -96,5 +96,5 @@ ENTRY(__raw_writesw) | |||
96 | tst r2, #1 | 96 | tst r2, #1 |
97 | 3: movne ip, r3, lsr #8 | 97 | 3: movne ip, r3, lsr #8 |
98 | strneh ip, [r0] | 98 | strneh ip, [r0] |
99 | mov pc, lr | 99 | ret lr |
100 | ENDPROC(__raw_writesw) | 100 | ENDPROC(__raw_writesw) |
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S index c562f649734c..947567ff67f9 100644 --- a/arch/arm/lib/lib1funcs.S +++ b/arch/arm/lib/lib1funcs.S | |||
@@ -210,7 +210,7 @@ ENTRY(__aeabi_uidiv) | |||
210 | UNWIND(.fnstart) | 210 | UNWIND(.fnstart) |
211 | 211 | ||
212 | subs r2, r1, #1 | 212 | subs r2, r1, #1 |
213 | moveq pc, lr | 213 | reteq lr |
214 | bcc Ldiv0 | 214 | bcc Ldiv0 |
215 | cmp r0, r1 | 215 | cmp r0, r1 |
216 | bls 11f | 216 | bls 11f |
@@ -220,16 +220,16 @@ UNWIND(.fnstart) | |||
220 | ARM_DIV_BODY r0, r1, r2, r3 | 220 | ARM_DIV_BODY r0, r1, r2, r3 |
221 | 221 | ||
222 | mov r0, r2 | 222 | mov r0, r2 |
223 | mov pc, lr | 223 | ret lr |
224 | 224 | ||
225 | 11: moveq r0, #1 | 225 | 11: moveq r0, #1 |
226 | movne r0, #0 | 226 | movne r0, #0 |
227 | mov pc, lr | 227 | ret lr |
228 | 228 | ||
229 | 12: ARM_DIV2_ORDER r1, r2 | 229 | 12: ARM_DIV2_ORDER r1, r2 |
230 | 230 | ||
231 | mov r0, r0, lsr r2 | 231 | mov r0, r0, lsr r2 |
232 | mov pc, lr | 232 | ret lr |
233 | 233 | ||
234 | UNWIND(.fnend) | 234 | UNWIND(.fnend) |
235 | ENDPROC(__udivsi3) | 235 | ENDPROC(__udivsi3) |
@@ -244,11 +244,11 @@ UNWIND(.fnstart) | |||
244 | moveq r0, #0 | 244 | moveq r0, #0 |
245 | tsthi r1, r2 @ see if divisor is power of 2 | 245 | tsthi r1, r2 @ see if divisor is power of 2 |
246 | andeq r0, r0, r2 | 246 | andeq r0, r0, r2 |
247 | movls pc, lr | 247 | retls lr |
248 | 248 | ||
249 | ARM_MOD_BODY r0, r1, r2, r3 | 249 | ARM_MOD_BODY r0, r1, r2, r3 |
250 | 250 | ||
251 | mov pc, lr | 251 | ret lr |
252 | 252 | ||
253 | UNWIND(.fnend) | 253 | UNWIND(.fnend) |
254 | ENDPROC(__umodsi3) | 254 | ENDPROC(__umodsi3) |
@@ -274,23 +274,23 @@ UNWIND(.fnstart) | |||
274 | 274 | ||
275 | cmp ip, #0 | 275 | cmp ip, #0 |
276 | rsbmi r0, r0, #0 | 276 | rsbmi r0, r0, #0 |
277 | mov pc, lr | 277 | ret lr |
278 | 278 | ||
279 | 10: teq ip, r0 @ same sign ? | 279 | 10: teq ip, r0 @ same sign ? |
280 | rsbmi r0, r0, #0 | 280 | rsbmi r0, r0, #0 |
281 | mov pc, lr | 281 | ret lr |
282 | 282 | ||
283 | 11: movlo r0, #0 | 283 | 11: movlo r0, #0 |
284 | moveq r0, ip, asr #31 | 284 | moveq r0, ip, asr #31 |
285 | orreq r0, r0, #1 | 285 | orreq r0, r0, #1 |
286 | mov pc, lr | 286 | ret lr |
287 | 287 | ||
288 | 12: ARM_DIV2_ORDER r1, r2 | 288 | 12: ARM_DIV2_ORDER r1, r2 |
289 | 289 | ||
290 | cmp ip, #0 | 290 | cmp ip, #0 |
291 | mov r0, r3, lsr r2 | 291 | mov r0, r3, lsr r2 |
292 | rsbmi r0, r0, #0 | 292 | rsbmi r0, r0, #0 |
293 | mov pc, lr | 293 | ret lr |
294 | 294 | ||
295 | UNWIND(.fnend) | 295 | UNWIND(.fnend) |
296 | ENDPROC(__divsi3) | 296 | ENDPROC(__divsi3) |
@@ -315,7 +315,7 @@ UNWIND(.fnstart) | |||
315 | 315 | ||
316 | 10: cmp ip, #0 | 316 | 10: cmp ip, #0 |
317 | rsbmi r0, r0, #0 | 317 | rsbmi r0, r0, #0 |
318 | mov pc, lr | 318 | ret lr |
319 | 319 | ||
320 | UNWIND(.fnend) | 320 | UNWIND(.fnend) |
321 | ENDPROC(__modsi3) | 321 | ENDPROC(__modsi3) |
@@ -331,7 +331,7 @@ UNWIND(.save {r0, r1, ip, lr} ) | |||
331 | ldmfd sp!, {r1, r2, ip, lr} | 331 | ldmfd sp!, {r1, r2, ip, lr} |
332 | mul r3, r0, r2 | 332 | mul r3, r0, r2 |
333 | sub r1, r1, r3 | 333 | sub r1, r1, r3 |
334 | mov pc, lr | 334 | ret lr |
335 | 335 | ||
336 | UNWIND(.fnend) | 336 | UNWIND(.fnend) |
337 | ENDPROC(__aeabi_uidivmod) | 337 | ENDPROC(__aeabi_uidivmod) |
@@ -344,7 +344,7 @@ UNWIND(.save {r0, r1, ip, lr} ) | |||
344 | ldmfd sp!, {r1, r2, ip, lr} | 344 | ldmfd sp!, {r1, r2, ip, lr} |
345 | mul r3, r0, r2 | 345 | mul r3, r0, r2 |
346 | sub r1, r1, r3 | 346 | sub r1, r1, r3 |
347 | mov pc, lr | 347 | ret lr |
348 | 348 | ||
349 | UNWIND(.fnend) | 349 | UNWIND(.fnend) |
350 | ENDPROC(__aeabi_idivmod) | 350 | ENDPROC(__aeabi_idivmod) |
diff --git a/arch/arm/lib/lshrdi3.S b/arch/arm/lib/lshrdi3.S index f83d449141f7..922dcd88b02b 100644 --- a/arch/arm/lib/lshrdi3.S +++ b/arch/arm/lib/lshrdi3.S | |||
@@ -27,6 +27,7 @@ Boston, MA 02110-1301, USA. */ | |||
27 | 27 | ||
28 | 28 | ||
29 | #include <linux/linkage.h> | 29 | #include <linux/linkage.h> |
30 | #include <asm/assembler.h> | ||
30 | 31 | ||
31 | #ifdef __ARMEB__ | 32 | #ifdef __ARMEB__ |
32 | #define al r1 | 33 | #define al r1 |
@@ -47,7 +48,7 @@ ENTRY(__aeabi_llsr) | |||
47 | THUMB( lslmi r3, ah, ip ) | 48 | THUMB( lslmi r3, ah, ip ) |
48 | THUMB( orrmi al, al, r3 ) | 49 | THUMB( orrmi al, al, r3 ) |
49 | mov ah, ah, lsr r2 | 50 | mov ah, ah, lsr r2 |
50 | mov pc, lr | 51 | ret lr |
51 | 52 | ||
52 | ENDPROC(__lshrdi3) | 53 | ENDPROC(__lshrdi3) |
53 | ENDPROC(__aeabi_llsr) | 54 | ENDPROC(__aeabi_llsr) |
diff --git a/arch/arm/lib/memchr.S b/arch/arm/lib/memchr.S index 1da86991d700..74a5bed6d999 100644 --- a/arch/arm/lib/memchr.S +++ b/arch/arm/lib/memchr.S | |||
@@ -22,5 +22,5 @@ ENTRY(memchr) | |||
22 | bne 1b | 22 | bne 1b |
23 | sub r0, r0, #1 | 23 | sub r0, r0, #1 |
24 | 2: movne r0, #0 | 24 | 2: movne r0, #0 |
25 | mov pc, lr | 25 | ret lr |
26 | ENDPROC(memchr) | 26 | ENDPROC(memchr) |
diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index 94b0650ea98f..671455c854fa 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S | |||
@@ -110,7 +110,7 @@ ENTRY(memset) | |||
110 | strneb r1, [ip], #1 | 110 | strneb r1, [ip], #1 |
111 | tst r2, #1 | 111 | tst r2, #1 |
112 | strneb r1, [ip], #1 | 112 | strneb r1, [ip], #1 |
113 | mov pc, lr | 113 | ret lr |
114 | 114 | ||
115 | 6: subs r2, r2, #4 @ 1 do we have enough | 115 | 6: subs r2, r2, #4 @ 1 do we have enough |
116 | blt 5b @ 1 bytes to align with? | 116 | blt 5b @ 1 bytes to align with? |
diff --git a/arch/arm/lib/memzero.S b/arch/arm/lib/memzero.S index 3fbdef5f802a..385ccb306fa2 100644 --- a/arch/arm/lib/memzero.S +++ b/arch/arm/lib/memzero.S | |||
@@ -121,5 +121,5 @@ ENTRY(__memzero) | |||
121 | strneb r2, [r0], #1 @ 1 | 121 | strneb r2, [r0], #1 @ 1 |
122 | tst r1, #1 @ 1 a byte left over | 122 | tst r1, #1 @ 1 a byte left over |
123 | strneb r2, [r0], #1 @ 1 | 123 | strneb r2, [r0], #1 @ 1 |
124 | mov pc, lr @ 1 | 124 | ret lr @ 1 |
125 | ENDPROC(__memzero) | 125 | ENDPROC(__memzero) |
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S index 36c91b4957e2..204305956925 100644 --- a/arch/arm/lib/muldi3.S +++ b/arch/arm/lib/muldi3.S | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | ||
14 | 15 | ||
15 | #ifdef __ARMEB__ | 16 | #ifdef __ARMEB__ |
16 | #define xh r0 | 17 | #define xh r0 |
@@ -41,7 +42,7 @@ ENTRY(__aeabi_lmul) | |||
41 | adc xh, xh, yh, lsr #16 | 42 | adc xh, xh, yh, lsr #16 |
42 | adds xl, xl, ip, lsl #16 | 43 | adds xl, xl, ip, lsl #16 |
43 | adc xh, xh, ip, lsr #16 | 44 | adc xh, xh, ip, lsr #16 |
44 | mov pc, lr | 45 | ret lr |
45 | 46 | ||
46 | ENDPROC(__muldi3) | 47 | ENDPROC(__muldi3) |
47 | ENDPROC(__aeabi_lmul) | 48 | ENDPROC(__aeabi_lmul) |
diff --git a/arch/arm/lib/putuser.S b/arch/arm/lib/putuser.S index 3d73dcb959b0..38d660d3705f 100644 --- a/arch/arm/lib/putuser.S +++ b/arch/arm/lib/putuser.S | |||
@@ -36,7 +36,7 @@ ENTRY(__put_user_1) | |||
36 | check_uaccess r0, 1, r1, ip, __put_user_bad | 36 | check_uaccess r0, 1, r1, ip, __put_user_bad |
37 | 1: TUSER(strb) r2, [r0] | 37 | 1: TUSER(strb) r2, [r0] |
38 | mov r0, #0 | 38 | mov r0, #0 |
39 | mov pc, lr | 39 | ret lr |
40 | ENDPROC(__put_user_1) | 40 | ENDPROC(__put_user_1) |
41 | 41 | ||
42 | ENTRY(__put_user_2) | 42 | ENTRY(__put_user_2) |
@@ -60,14 +60,14 @@ ENTRY(__put_user_2) | |||
60 | #endif | 60 | #endif |
61 | #endif /* CONFIG_THUMB2_KERNEL */ | 61 | #endif /* CONFIG_THUMB2_KERNEL */ |
62 | mov r0, #0 | 62 | mov r0, #0 |
63 | mov pc, lr | 63 | ret lr |
64 | ENDPROC(__put_user_2) | 64 | ENDPROC(__put_user_2) |
65 | 65 | ||
66 | ENTRY(__put_user_4) | 66 | ENTRY(__put_user_4) |
67 | check_uaccess r0, 4, r1, ip, __put_user_bad | 67 | check_uaccess r0, 4, r1, ip, __put_user_bad |
68 | 4: TUSER(str) r2, [r0] | 68 | 4: TUSER(str) r2, [r0] |
69 | mov r0, #0 | 69 | mov r0, #0 |
70 | mov pc, lr | 70 | ret lr |
71 | ENDPROC(__put_user_4) | 71 | ENDPROC(__put_user_4) |
72 | 72 | ||
73 | ENTRY(__put_user_8) | 73 | ENTRY(__put_user_8) |
@@ -80,12 +80,12 @@ ENTRY(__put_user_8) | |||
80 | 6: TUSER(str) r3, [r0] | 80 | 6: TUSER(str) r3, [r0] |
81 | #endif | 81 | #endif |
82 | mov r0, #0 | 82 | mov r0, #0 |
83 | mov pc, lr | 83 | ret lr |
84 | ENDPROC(__put_user_8) | 84 | ENDPROC(__put_user_8) |
85 | 85 | ||
86 | __put_user_bad: | 86 | __put_user_bad: |
87 | mov r0, #-EFAULT | 87 | mov r0, #-EFAULT |
88 | mov pc, lr | 88 | ret lr |
89 | ENDPROC(__put_user_bad) | 89 | ENDPROC(__put_user_bad) |
90 | 90 | ||
91 | .pushsection __ex_table, "a" | 91 | .pushsection __ex_table, "a" |
diff --git a/arch/arm/lib/strchr.S b/arch/arm/lib/strchr.S index d8f2a1c1aea4..013d64c71e8d 100644 --- a/arch/arm/lib/strchr.S +++ b/arch/arm/lib/strchr.S | |||
@@ -23,5 +23,5 @@ ENTRY(strchr) | |||
23 | teq r2, r1 | 23 | teq r2, r1 |
24 | movne r0, #0 | 24 | movne r0, #0 |
25 | subeq r0, r0, #1 | 25 | subeq r0, r0, #1 |
26 | mov pc, lr | 26 | ret lr |
27 | ENDPROC(strchr) | 27 | ENDPROC(strchr) |
diff --git a/arch/arm/lib/strrchr.S b/arch/arm/lib/strrchr.S index 302f20cd2423..3cec1c7482c4 100644 --- a/arch/arm/lib/strrchr.S +++ b/arch/arm/lib/strrchr.S | |||
@@ -22,5 +22,5 @@ ENTRY(strrchr) | |||
22 | teq r2, #0 | 22 | teq r2, #0 |
23 | bne 1b | 23 | bne 1b |
24 | mov r0, r3 | 24 | mov r0, r3 |
25 | mov pc, lr | 25 | ret lr |
26 | ENDPROC(strrchr) | 26 | ENDPROC(strrchr) |
diff --git a/arch/arm/lib/ucmpdi2.S b/arch/arm/lib/ucmpdi2.S index f0df6a91db04..ad4a6309141a 100644 --- a/arch/arm/lib/ucmpdi2.S +++ b/arch/arm/lib/ucmpdi2.S | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | ||
14 | 15 | ||
15 | #ifdef __ARMEB__ | 16 | #ifdef __ARMEB__ |
16 | #define xh r0 | 17 | #define xh r0 |
@@ -31,7 +32,7 @@ ENTRY(__ucmpdi2) | |||
31 | movlo r0, #0 | 32 | movlo r0, #0 |
32 | moveq r0, #1 | 33 | moveq r0, #1 |
33 | movhi r0, #2 | 34 | movhi r0, #2 |
34 | mov pc, lr | 35 | ret lr |
35 | 36 | ||
36 | ENDPROC(__ucmpdi2) | 37 | ENDPROC(__ucmpdi2) |
37 | 38 | ||
@@ -44,7 +45,7 @@ ENTRY(__aeabi_ulcmp) | |||
44 | movlo r0, #-1 | 45 | movlo r0, #-1 |
45 | moveq r0, #0 | 46 | moveq r0, #0 |
46 | movhi r0, #1 | 47 | movhi r0, #1 |
47 | mov pc, lr | 48 | ret lr |
48 | 49 | ||
49 | ENDPROC(__aeabi_ulcmp) | 50 | ENDPROC(__aeabi_ulcmp) |
50 | 51 | ||