aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2014-02-04 00:04:52 -0500
committerAnton Blanchard <anton@samba.org>2014-04-22 20:05:17 -0400
commitad0289e4acf2bd6989e745cff3b4f0781a919e30 (patch)
tree2027687114b62c2ac5fc201897e67795ea7e964b
parentb1576fec7f4dd4657694fefc97fda4cf28ec68e9 (diff)
powerpc: Remove superflous function descriptors in assembly only code
We have a number of places where we load the text address of a local function and indirectly branch to it in assembly. Since it is an indirect branch binutils will not know to use the function text address, so that trick wont work. There is no need for these functions to have a function descriptor so we can replace it with a label and remove the dot symbol. Signed-off-by: Anton Blanchard <anton@samba.org>
-rw-r--r--arch/powerpc/kernel/entry_64.S10
-rw-r--r--arch/powerpc/kernel/exceptions-64s.S18
-rw-r--r--arch/powerpc/kernel/head_64.S9
-rw-r--r--arch/powerpc/platforms/powernv/opal-wrappers.S4
4 files changed, 21 insertions, 20 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index b629198b072c..2d92eeb08b76 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -1021,7 +1021,7 @@ _GLOBAL(enter_rtas)
1021 std r6,PACASAVEDMSR(r13) 1021 std r6,PACASAVEDMSR(r13)
1022 1022
1023 /* Setup our real return addr */ 1023 /* Setup our real return addr */
1024 LOAD_REG_ADDR(r4,.rtas_return_loc) 1024 LOAD_REG_ADDR(r4,rtas_return_loc)
1025 clrldi r4,r4,2 /* convert to realmode address */ 1025 clrldi r4,r4,2 /* convert to realmode address */
1026 mtlr r4 1026 mtlr r4
1027 1027
@@ -1045,7 +1045,7 @@ _GLOBAL(enter_rtas)
1045 rfid 1045 rfid
1046 b . /* prevent speculative execution */ 1046 b . /* prevent speculative execution */
1047 1047
1048_STATIC(rtas_return_loc) 1048rtas_return_loc:
1049 FIXUP_ENDIAN 1049 FIXUP_ENDIAN
1050 1050
1051 /* relocation is off at this point */ 1051 /* relocation is off at this point */
@@ -1054,7 +1054,7 @@ _STATIC(rtas_return_loc)
1054 1054
1055 bcl 20,31,$+4 1055 bcl 20,31,$+4
10560: mflr r3 10560: mflr r3
1057 ld r3,(1f-0b)(r3) /* get &.rtas_restore_regs */ 1057 ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */
1058 1058
1059 mfmsr r6 1059 mfmsr r6
1060 li r0,MSR_RI 1060 li r0,MSR_RI
@@ -1071,9 +1071,9 @@ _STATIC(rtas_return_loc)
1071 b . /* prevent speculative execution */ 1071 b . /* prevent speculative execution */
1072 1072
1073 .align 3 1073 .align 3
10741: .llong .rtas_restore_regs 10741: .llong rtas_restore_regs
1075 1075
1076_STATIC(rtas_restore_regs) 1076rtas_restore_regs:
1077 /* relocation is on at this point */ 1077 /* relocation is on at this point */
1078 REST_GPR(2, r1) /* Restore the TOC */ 1078 REST_GPR(2, r1) /* Restore the TOC */
1079 REST_GPR(13, r1) /* Restore paca */ 1079 REST_GPR(13, r1) /* Restore paca */
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 28391e048120..f2f9d6144ae1 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -214,13 +214,13 @@ data_access_slb_pSeries:
214 b slb_miss_realmode 214 b slb_miss_realmode
215#else 215#else
216 /* 216 /*
217 * We can't just use a direct branch to .slb_miss_realmode 217 * We can't just use a direct branch to slb_miss_realmode
218 * because the distance from here to there depends on where 218 * because the distance from here to there depends on where
219 * the kernel ends up being put. 219 * the kernel ends up being put.
220 */ 220 */
221 mfctr r11 221 mfctr r11
222 ld r10,PACAKBASE(r13) 222 ld r10,PACAKBASE(r13)
223 LOAD_HANDLER(r10, .slb_miss_realmode) 223 LOAD_HANDLER(r10, slb_miss_realmode)
224 mtctr r10 224 mtctr r10
225 bctr 225 bctr
226#endif 226#endif
@@ -247,7 +247,7 @@ instruction_access_slb_pSeries:
247#else 247#else
248 mfctr r11 248 mfctr r11
249 ld r10,PACAKBASE(r13) 249 ld r10,PACAKBASE(r13)
250 LOAD_HANDLER(r10, .slb_miss_realmode) 250 LOAD_HANDLER(r10, slb_miss_realmode)
251 mtctr r10 251 mtctr r10
252 bctr 252 bctr
253#endif 253#endif
@@ -524,7 +524,7 @@ do_stab_bolted_pSeries:
524 std r12,PACA_EXSLB+EX_R12(r13) 524 std r12,PACA_EXSLB+EX_R12(r13)
525 GET_SCRATCH0(r10) 525 GET_SCRATCH0(r10)
526 std r10,PACA_EXSLB+EX_R13(r13) 526 std r10,PACA_EXSLB+EX_R13(r13)
527 EXCEPTION_PROLOG_PSERIES_1(.do_stab_bolted, EXC_STD) 527 EXCEPTION_PROLOG_PSERIES_1(do_stab_bolted, EXC_STD)
528 528
529 KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300) 529 KVM_HANDLER_SKIP(PACA_EXGEN, EXC_STD, 0x300)
530 KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380) 530 KVM_HANDLER_SKIP(PACA_EXSLB, EXC_STD, 0x380)
@@ -832,13 +832,13 @@ data_access_slb_relon_pSeries:
832 b slb_miss_realmode 832 b slb_miss_realmode
833#else 833#else
834 /* 834 /*
835 * We can't just use a direct branch to .slb_miss_realmode 835 * We can't just use a direct branch to slb_miss_realmode
836 * because the distance from here to there depends on where 836 * because the distance from here to there depends on where
837 * the kernel ends up being put. 837 * the kernel ends up being put.
838 */ 838 */
839 mfctr r11 839 mfctr r11
840 ld r10,PACAKBASE(r13) 840 ld r10,PACAKBASE(r13)
841 LOAD_HANDLER(r10, .slb_miss_realmode) 841 LOAD_HANDLER(r10, slb_miss_realmode)
842 mtctr r10 842 mtctr r10
843 bctr 843 bctr
844#endif 844#endif
@@ -858,7 +858,7 @@ instruction_access_slb_relon_pSeries:
858#else 858#else
859 mfctr r11 859 mfctr r11
860 ld r10,PACAKBASE(r13) 860 ld r10,PACAKBASE(r13)
861 LOAD_HANDLER(r10, .slb_miss_realmode) 861 LOAD_HANDLER(r10, slb_miss_realmode)
862 mtctr r10 862 mtctr r10
863 bctr 863 bctr
864#endif 864#endif
@@ -1468,7 +1468,7 @@ machine_check_handle_early:
1468 * r3 is saved in paca->slb_r3 1468 * r3 is saved in paca->slb_r3
1469 * We assume we aren't going to take any exceptions during this procedure. 1469 * We assume we aren't going to take any exceptions during this procedure.
1470 */ 1470 */
1471_GLOBAL(slb_miss_realmode) 1471slb_miss_realmode:
1472 mflr r10 1472 mflr r10
1473#ifdef CONFIG_RELOCATABLE 1473#ifdef CONFIG_RELOCATABLE
1474 mtctr r11 1474 mtctr r11
@@ -1646,7 +1646,7 @@ do_ste_alloc:
1646 * We assume (DAR >> 60) == 0xc. 1646 * We assume (DAR >> 60) == 0xc.
1647 */ 1647 */
1648 .align 7 1648 .align 7
1649_GLOBAL(do_stab_bolted) 1649do_stab_bolted:
1650 stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */ 1650 stw r9,PACA_EXSLB+EX_CCR(r13) /* save CR in exc. frame */
1651 std r11,PACA_EXSLB+EX_SRR0(r13) /* save SRR0 in exc. frame */ 1651 std r11,PACA_EXSLB+EX_SRR0(r13) /* save SRR0 in exc. frame */
1652 mfspr r11,SPRN_DAR /* ea */ 1652 mfspr r11,SPRN_DAR /* ea */
diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
index afcfd631bf7f..8d7c868e5a43 100644
--- a/arch/powerpc/kernel/head_64.S
+++ b/arch/powerpc/kernel/head_64.S
@@ -639,7 +639,7 @@ __secondary_start:
639 stb r0,PACAIRQHAPPENED(r13) 639 stb r0,PACAIRQHAPPENED(r13)
640 640
641 /* enable MMU and jump to start_secondary */ 641 /* enable MMU and jump to start_secondary */
642 LOAD_REG_ADDR(r3, .start_secondary_prolog) 642 LOAD_REG_ADDR(r3, start_secondary_prolog)
643 LOAD_REG_IMMEDIATE(r4, MSR_KERNEL) 643 LOAD_REG_IMMEDIATE(r4, MSR_KERNEL)
644 644
645 mtspr SPRN_SRR0,r3 645 mtspr SPRN_SRR0,r3
@@ -652,7 +652,7 @@ __secondary_start:
652 * zero the stack back-chain pointer and get the TOC virtual address 652 * zero the stack back-chain pointer and get the TOC virtual address
653 * before going into C code. 653 * before going into C code.
654 */ 654 */
655_GLOBAL(start_secondary_prolog) 655start_secondary_prolog:
656 ld r2,PACATOC(r13) 656 ld r2,PACATOC(r13)
657 li r3,0 657 li r3,0
658 std r3,0(r1) /* Zero the stack frame pointer */ 658 std r3,0(r1) /* Zero the stack frame pointer */
@@ -778,7 +778,7 @@ _INIT_STATIC(start_here_multiplatform)
778 mr r3,r31 778 mr r3,r31
779 bl early_setup /* also sets r13 and SPRG_PACA */ 779 bl early_setup /* also sets r13 and SPRG_PACA */
780 780
781 LOAD_REG_ADDR(r3, .start_here_common) 781 LOAD_REG_ADDR(r3, start_here_common)
782 ld r4,PACAKMSR(r13) 782 ld r4,PACAKMSR(r13)
783 mtspr SPRN_SRR0,r3 783 mtspr SPRN_SRR0,r3
784 mtspr SPRN_SRR1,r4 784 mtspr SPRN_SRR1,r4
@@ -786,7 +786,8 @@ _INIT_STATIC(start_here_multiplatform)
786 b . /* prevent speculative execution */ 786 b . /* prevent speculative execution */
787 787
788 /* This is where all platforms converge execution */ 788 /* This is where all platforms converge execution */
789_INIT_GLOBAL(start_here_common) 789
790start_here_common:
790 /* relocation is on at this point */ 791 /* relocation is on at this point */
791 std r1,PACAKSAVE(r13) 792 std r1,PACAKSAVE(r13)
792 793
diff --git a/arch/powerpc/platforms/powernv/opal-wrappers.S b/arch/powerpc/platforms/powernv/opal-wrappers.S
index f531ffe35b3e..b5ebc545a373 100644
--- a/arch/powerpc/platforms/powernv/opal-wrappers.S
+++ b/arch/powerpc/platforms/powernv/opal-wrappers.S
@@ -32,7 +32,7 @@
32 std r12,PACASAVEDMSR(r13); \ 32 std r12,PACASAVEDMSR(r13); \
33 andc r12,r12,r0; \ 33 andc r12,r12,r0; \
34 mtmsrd r12,1; \ 34 mtmsrd r12,1; \
35 LOAD_REG_ADDR(r0,.opal_return); \ 35 LOAD_REG_ADDR(r0,opal_return); \
36 mtlr r0; \ 36 mtlr r0; \
37 li r0,MSR_DR|MSR_IR|MSR_LE;\ 37 li r0,MSR_DR|MSR_IR|MSR_LE;\
38 andc r12,r12,r0; \ 38 andc r12,r12,r0; \
@@ -44,7 +44,7 @@
44 mtspr SPRN_HSRR0,r12; \ 44 mtspr SPRN_HSRR0,r12; \
45 hrfid 45 hrfid
46 46
47_STATIC(opal_return) 47opal_return:
48 /* 48 /*
49 * Fixup endian on OPAL return... we should be able to simplify 49 * Fixup endian on OPAL return... we should be able to simplify
50 * this by instead converting the below trampoline to a set of 50 * this by instead converting the below trampoline to a set of