arm: lib: Split asm symbols into different .text subsections
authorMarek Vasut <marex@denx.de>
Thu, 26 May 2016 16:01:46 +0000 (18:01 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 3 Jun 2016 01:21:47 +0000 (21:21 -0400)
Split each symbol in lib1funcs into different .text.foo section instead
of placing all of them into plain .text . This allows the linker to collect
and discard unused assembler symbols.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
arch/arm/lib/ashldi3.S
arch/arm/lib/ashrdi3.S
arch/arm/lib/div64.S
arch/arm/lib/lib1funcs.S
arch/arm/lib/lshrdi3.S
arch/arm/lib/muldi3.S
arch/arm/lib/uldivmod.S

index a4f5ebbff13203bbe2622ffc7cfa43fcc5fec7a6..6c9ae91653327527c201a75d3df735323c89c93c 100644 (file)
@@ -17,6 +17,7 @@
 
 ENTRY(__ashldi3)
 ENTRY(__aeabi_llsl)
+.pushsection .text.__ashldi3, "ax"
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
@@ -28,5 +29,6 @@ ENTRY(__aeabi_llsl)
        mov     al, al, lsl r2
        ret     lr
 
+.popsection
 ENDPROC(__ashldi3)
 ENDPROC(__aeabi_llsl)
index c6e1ed33f3c4d1b4847c81335f778a35d08c9daf..3eb59ec7d1214944e8e09cae9f16c9e82c6ecbc5 100644 (file)
@@ -17,6 +17,7 @@
 
 ENTRY(__ashrdi3)
 ENTRY(__aeabi_lasr)
+.pushsection .text.__ashrdi3, "ax"
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
@@ -28,5 +29,6 @@ ENTRY(__aeabi_lasr)
        mov     ah, ah, asr r2
        ret     lr
 
+.popsection
 ENDPROC(__ashrdi3)
 ENDPROC(__aeabi_lasr)
index a42a0f0a18876893fa89de4748f359ac7e657501..5bfb41dff54eda16d88f98d266ee52556e9dd131 100644 (file)
@@ -47,6 +47,7 @@
 
 ENTRY(__do_div64)
 UNWIND(.fnstart)
+.pushsection .text.__do_div64, "ax"
 
        @ Test for easy paths first.
        subs    ip, r4, #1
@@ -192,6 +193,7 @@ UNWIND(.fnstart)
        moveq   yh, xh
        moveq   xh, #0
        reteq   lr
+.popsection
 UNWIND(.fnend)
 
 UNWIND(.fnstart)
index 408839b3cf2b217c912bdf869602bdc25660fc97..f1becdac21646f7ee81917cd76e0bc9658d855b1 100644 (file)
 ENTRY(__udivsi3)
 ENTRY(__aeabi_uidiv)
 UNWIND(.fnstart)
+.pushsection .text.__udivsi3, "ax"
 
        subs    r2, r1, #1
        reteq   lr
@@ -219,12 +220,14 @@ UNWIND(.fnstart)
        mov     r0, r0, lsr r2
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__udivsi3)
 ENDPROC(__aeabi_uidiv)
 
 ENTRY(__umodsi3)
 UNWIND(.fnstart)
+.pushsection .text.__umodsi3, "ax"
 
        subs    r2, r1, #1                      @ compare divisor with 1
        bcc     Ldiv0
@@ -238,12 +241,14 @@ UNWIND(.fnstart)
 
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__umodsi3)
 
 ENTRY(__divsi3)
 ENTRY(__aeabi_idiv)
 UNWIND(.fnstart)
+.pushsection .text.__divsi3, "ax"
 
        cmp     r1, #0
        eor     ip, r0, r1                      @ save the sign of the result.
@@ -280,12 +285,14 @@ UNWIND(.fnstart)
        rsbmi   r0, r0, #0
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__divsi3)
 ENDPROC(__aeabi_idiv)
 
 ENTRY(__modsi3)
 UNWIND(.fnstart)
+.pushsection .text.__modsi3, "ax"
 
        cmp     r1, #0
        beq     Ldiv0
@@ -305,6 +312,7 @@ UNWIND(.fnstart)
        rsbmi   r0, r0, #0
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__modsi3)
 
@@ -313,6 +321,7 @@ ENDPROC(__modsi3)
 ENTRY(__aeabi_uidivmod)
 UNWIND(.fnstart)
 UNWIND(.save {r0, r1, ip, lr}  )
+.pushsection .text.__aeabi_uidivmod, "ax"
 
        stmfd   sp!, {r0, r1, ip, lr}
        bl      __aeabi_uidiv
@@ -321,12 +330,15 @@ UNWIND(.save {r0, r1, ip, lr}     )
        sub     r1, r1, r3
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__aeabi_uidivmod)
 
 ENTRY(__aeabi_idivmod)
 UNWIND(.fnstart)
 UNWIND(.save {r0, r1, ip, lr}  )
+.pushsection .text.__aeabi_uidivmod, "ax"
+
        stmfd   sp!, {r0, r1, ip, lr}
        bl      __aeabi_idiv
        ldmfd   sp!, {r1, r2, ip, lr}
@@ -334,6 +346,7 @@ UNWIND(.save {r0, r1, ip, lr}       )
        sub     r1, r1, r3
        ret     lr
 
+.popsection
 UNWIND(.fnend)
 ENDPROC(__aeabi_idivmod)
 
@@ -343,16 +356,21 @@ Ldiv0:
 UNWIND(.fnstart)
 UNWIND(.pad #4)
 UNWIND(.save {lr})
+.pushsection .text.Ldiv0, "ax"
+
        str     lr, [sp, #-8]!
        bl      __div0
        mov     r0, #0                  @ About as wrong as it could be.
        ldr     pc, [sp], #8
+
+.popsection
 UNWIND(.fnend)
 ENDPROC(Ldiv0)
 
 /* Thumb-1 specialities */
 #if defined(CONFIG_SYS_THUMB_BUILD) && !defined(CONFIG_HAS_THUMB2)
 ENTRY(__gnu_thumb1_case_sqi)
+.pushsection .text.__gnu_thumb1_case_sqi, "ax"
        push    {r1}
        mov     r1, lr
        lsrs    r1, r1, #1
@@ -362,9 +380,11 @@ ENTRY(__gnu_thumb1_case_sqi)
        add     lr, lr, r1
        pop     {r1}
        bx      lr
+.popsection
 ENDPROC(__gnu_thumb1_case_sqi)
 
 ENTRY(__gnu_thumb1_case_uqi)
+.pushsection .text.__gnu_thumb1_case_uqi, "ax"
        push    {r1}
        mov     r1, lr
        lsrs    r1, r1, #1
@@ -374,9 +394,11 @@ ENTRY(__gnu_thumb1_case_uqi)
        add     lr, lr, r1
        pop     {r1}
        bx      lr
+.popsection
 ENDPROC(__gnu_thumb1_case_uqi)
 
 ENTRY(__gnu_thumb1_case_shi)
+.pushsection .text.__gnu_thumb1_case_shi, "ax"
        push    {r0, r1}
        mov     r1, lr
        lsrs    r1, r1, #1
@@ -387,9 +409,11 @@ ENTRY(__gnu_thumb1_case_shi)
        add     lr, lr, r1
        pop     {r0, r1}
        bx      lr
+.popsection
 ENDPROC(__gnu_thumb1_case_shi)
 
 ENTRY(__gnu_thumb1_case_uhi)
+.pushsection .text.__gnu_thumb1_case_uhi, "ax"
        push    {r0, r1}
        mov     r1, lr
        lsrs    r1, r1, #1
@@ -400,5 +424,6 @@ ENTRY(__gnu_thumb1_case_uhi)
        add     lr, lr, r1
        pop     {r0, r1}
        bx      lr
+.popsection
 ENDPROC(__gnu_thumb1_case_uhi)
 #endif
index 9c51141f752fa6e8dd08d2ff921fd3a75bba1f98..f710ccbf4f85896450f819e920720a5ead32a5e7 100644 (file)
@@ -17,6 +17,7 @@
 
 ENTRY(__lshrdi3)
 ENTRY(__aeabi_llsr)
+.pushsection .text.__lshldi3, "ax"
 
        subs    r3, r2, #32
        rsb     ip, r2, #32
@@ -28,5 +29,6 @@ ENTRY(__aeabi_llsr)
        mov     ah, ah, lsr r2
        ret     lr
 
+.popsection
 ENDPROC(__lshrdi3)
 ENDPROC(__aeabi_llsr)
index daa5704a2550f8b74032173420346178ec4d7b80..bc255c522a4d9ad725715b2a94e73d255ce8cd3d 100644 (file)
@@ -25,6 +25,7 @@
 
 ENTRY(__muldi3)
 ENTRY(__aeabi_lmul)
+.pushsection .text.__muldi3, "ax"
 
        mul     xh, yl, xh
        mla     xh, xl, yh, xh
@@ -42,5 +43,6 @@ ENTRY(__aeabi_lmul)
        adc     xh, xh, ip, lsr #16
        ret     lr
 
+.popsection
 ENDPROC(__muldi3)
 ENDPROC(__aeabi_lmul)
index 2efcd73af8e17bc8121b28dac91ad5b395468518..bbc44c64a5fd0af767f68ff47fecff63971e293f 100644 (file)
@@ -34,6 +34,8 @@ TMP   .req    r8
 )
 
 ENTRY(__aeabi_uldivmod)
+.pushsection .text.__aeabi_uldivmod, "ax"
+
        stmfd   sp!, {r4, r5, r6, r7, THUMB(TMP,) lr}
        @ Test if B == 0
        orrs    ip, B_0, B_1            @ Z set -> B == 0
@@ -240,4 +242,5 @@ L_div_by_0:
        mov     R_0, #0
        mov     R_1, #0
        ldmfd   sp!, {r4, r5, r6, r7, THUMB(TMP,) pc}
+.popsection
 ENDPROC(__aeabi_uldivmod)