[U-Boot] [PATCH 11/12] arm: lib: Split asm symbols into different .text subsections

Marek Vasut marex at denx.de
Thu May 26 18:01:46 CEST 2016


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 at denx.de>
Cc: Albert Aribaud <albert.u.boot at aribaud.net>
Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
Cc: Simon Glass <sjg at chromium.org>
Cc: Tom Rini <trini at konsulko.com>
---
 arch/arm/lib/ashldi3.S   |  2 ++
 arch/arm/lib/ashrdi3.S   |  2 ++
 arch/arm/lib/div64.S     |  2 ++
 arch/arm/lib/lib1funcs.S | 25 +++++++++++++++++++++++++
 arch/arm/lib/lshrdi3.S   |  2 ++
 arch/arm/lib/muldi3.S    |  2 ++
 arch/arm/lib/uldivmod.S  |  3 +++
 7 files changed, 38 insertions(+)

diff --git a/arch/arm/lib/ashldi3.S b/arch/arm/lib/ashldi3.S
index a4f5ebb..6c9ae91 100644
--- a/arch/arm/lib/ashldi3.S
+++ b/arch/arm/lib/ashldi3.S
@@ -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)
diff --git a/arch/arm/lib/ashrdi3.S b/arch/arm/lib/ashrdi3.S
index c6e1ed3..3eb59ec 100644
--- a/arch/arm/lib/ashrdi3.S
+++ b/arch/arm/lib/ashrdi3.S
@@ -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)
diff --git a/arch/arm/lib/div64.S b/arch/arm/lib/div64.S
index a42a0f0..5bfb41d 100644
--- a/arch/arm/lib/div64.S
+++ b/arch/arm/lib/div64.S
@@ -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)
diff --git a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S
index 408839b..f1becda 100644
--- a/arch/arm/lib/lib1funcs.S
+++ b/arch/arm/lib/lib1funcs.S
@@ -196,6 +196,7 @@
 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
diff --git a/arch/arm/lib/lshrdi3.S b/arch/arm/lib/lshrdi3.S
index 9c51141..f710ccb 100644
--- a/arch/arm/lib/lshrdi3.S
+++ b/arch/arm/lib/lshrdi3.S
@@ -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)
diff --git a/arch/arm/lib/muldi3.S b/arch/arm/lib/muldi3.S
index daa5704..bc255c5 100644
--- a/arch/arm/lib/muldi3.S
+++ b/arch/arm/lib/muldi3.S
@@ -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)
diff --git a/arch/arm/lib/uldivmod.S b/arch/arm/lib/uldivmod.S
index 2efcd73..bbc44c6 100644
--- a/arch/arm/lib/uldivmod.S
+++ b/arch/arm/lib/uldivmod.S
@@ -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)
-- 
2.7.0



More information about the U-Boot mailing list