Skip to contentSkip to conversation

arm: Add ENTRY/ENDPROC to private libgcc functions

PATCH New Simon Glass 4 participants 9 messages Jun 2, 2015 – Jul 1, 2015 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 arm: Add ENTRY/ENDPROC to private libgcc functions

When CONFIG_SYS_THUMB_BUILD is defined these functions may be called from Thumb code. Add the required ENTRY and ENDPROC bracketing so that BLX is used to call these ARM functions, instead of plain BL, which will fail.

---

 arch/arm/lib/_ashldi3.S |  6 ++++--
 arch/arm/lib/_ashrdi3.S |  6 ++++--
 arch/arm/lib/_divsi3.S  |  6 ++++--
 arch/arm/lib/_lshrdi3.S |  6 ++++--
 arch/arm/lib/_modsi3.S  |  7 ++++---
 arch/arm/lib/_udivsi3.S | 10 ++++++----
 arch/arm/lib/_umodsi3.S |  6 ++++--
 7 files changed, 30 insertions(+), 17 deletions(-)
arch/arm/lib/_ashldi3.S +4 -2
index 2c26f84..9c34c21 100644
@@ -4,6 +4,8 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
+#include <linux/linkage.h>
+
 #ifdef __ARMEB__
 #define al r1
 #define ah r0
@@ -13,9 +15,8 @@
 #endif
 
 .globl __ashldi3
-.globl	__aeabi_llsl
 __ashldi3:
-__aeabi_llsl:
+ENTRY(__aeabi_llsl)
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
@@ -24,3 +25,4 @@ __aeabi_llsl:
 	orrmi	ah, ah, al, lsr ip
 	mov	al, al, lsl r2
 	mov	pc, lr
+ENDPROC(__aeabi_llsl)
arch/arm/lib/_ashrdi3.S +4 -2
index 4d93c8a..c74fd64 100644
@@ -4,6 +4,8 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
+#include <linux/linkage.h>
+
 #ifdef __ARMEB__
 #define al r1
 #define ah r0
@@ -13,9 +15,8 @@
 #endif
 
 .globl __ashrdi3
-.globl __aeabi_lasr
 __ashrdi3:
-__aeabi_lasr:
+ENTRY(__aeabi_lasr)
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
@@ -24,3 +25,4 @@ __aeabi_lasr:
 	orrmi	al, al, ah, lsl ip
 	mov	ah, ah, asr r2
 	mov	pc, lr
+ENDPROC(__aeabi_lasr)
arch/arm/lib/_divsi3.S +4 -2
index 6015493..c463c68 100644
@@ -1,3 +1,5 @@
+#include <linux/linkage.h>
+
 .macro ARM_DIV_BODY dividend, divisor, result, curbit
 
 #if __LINUX_ARM_ARCH__ >= 5
@@ -95,9 +97,8 @@
 
 	.align	5
 .globl __divsi3
-.globl __aeabi_idiv
 __divsi3:
-__aeabi_idiv:
+ENTRY(__aeabi_idiv)
 	cmp	r1, #0
 	eor	ip, r0, r1			@ save the sign of the result.
 	beq	Ldiv0
@@ -139,3 +140,4 @@ Ldiv0:
 	bl	__div0
 	mov	r0, #0			@ About as wrong as it could be.
 	ldr	pc, [sp], #4
+ENDPROC(__aeabi_idiv)
arch/arm/lib/_lshrdi3.S +4 -2
index 33296a0..1f9b916 100644
@@ -4,6 +4,8 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
+#include <linux/linkage.h>
+
 #ifdef __ARMEB__
 #define al r1
 #define ah r0
@@ -13,9 +15,8 @@
 #endif
 
 .globl __lshrdi3
-.globl __aeabi_llsr
 __lshrdi3:
-__aeabi_llsr:
+ENTRY(__aeabi_llsr)
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
@@ -24,3 +25,4 @@ __aeabi_llsr:
 	orrmi	al, al, ah, lsl ip
 	mov	ah, ah, lsr r2
 	mov	pc, lr
+ENDPROC(__aeabi_llsr)
arch/arm/lib/_modsi3.S +4 -3
index 3d31a55..c5e1c22 100644
@@ -1,3 +1,5 @@
+#include <linux/linkage.h>
+
 .macro ARM_MOD_BODY dividend, divisor, order, spare
 
 #if __LINUX_ARM_ARCH__ >= 5
@@ -69,8 +71,7 @@
 .endm
 
 	.align	5
-.globl __modsi3
-__modsi3:
+ENTRY(__modsi3)
 	cmp	r1, #0
 	beq	Ldiv0
 	rsbmi	r1, r1, #0			@ loops below use unsigned.
@@ -88,7 +89,7 @@ __modsi3:
 10:	cmp	ip, #0
 	rsbmi	r0, r0, #0
 	mov	pc, lr
-
+ENDPROC(__modsi3)
 
 Ldiv0:
 
arch/arm/lib/_udivsi3.S +6 -4
index 1309802..3b653be 100644
@@ -1,3 +1,5 @@
+#include <linux/linkage.h>
+
 /* # 1 "libgcc1.S" */
 @ libgcc1 routines for ARM cpu.
 @ Division routines, written by Richard Earnshaw, (rearnsha at armltd.co.uk)
@@ -72,8 +74,7 @@ Ldiv0:
 	ldmia	sp!, {pc}
 	.size  __udivsi3       , . -  __udivsi3
 
-.globl __aeabi_uidivmod
-__aeabi_uidivmod:
+ENTRY(__aeabi_uidivmod)
 
 	stmfd	sp!, {r0, r1, ip, lr}
 	bl	__aeabi_uidiv
@@ -81,9 +82,9 @@ __aeabi_uidivmod:
 	mul	r3, r0, r2
 	sub	r1, r1, r3
 	mov	pc, lr
+ENDPROC(__aeabi_uidivmod)
 
-.globl __aeabi_idivmod
-__aeabi_idivmod:
+ENTRY(__aeabi_idivmod)
 
 	stmfd	sp!, {r0, r1, ip, lr}
 	bl	__aeabi_idiv
@@ -91,3 +92,4 @@ __aeabi_idivmod:
 	mul	r3, r0, r2
 	sub	r1, r1, r3
 	mov	pc, lr
+ENDPROC(__aeabi_idivmod)
arch/arm/lib/_umodsi3.S +4 -2
index 8465ef0..b166737 100644
@@ -1,3 +1,5 @@
+#include <linux/linkage.h>
+
 /* # 1 "libgcc1.S" */
 @ libgcc1 routines for ARM cpu.
 @ Division routines, written by Richard Earnshaw, (rearnsha at armltd.co.uk)
@@ -11,10 +13,9 @@ curbit		.req	r3
 /* lr		.req	r14	*/
 /* pc		.req	r15	*/
 	.text
-	.globl	 __umodsi3
 	.type  __umodsi3       ,function
 	.align 0
- __umodsi3      :
+ ENTRY(__umodsi3)
 	cmp	divisor, #0
 	beq	Ldiv0
 	mov	curbit, #1
@@ -86,3 +87,4 @@ Ldiv0:
 /* # 456 "libgcc1.S" */
 /* # 500 "libgcc1.S" */
 /* # 580 "libgcc1.S" */
+ENDPROC(__umodsi3)
Signature · 1 line
2.2.0.rc0.207.ga3a616c
#1 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

---

 arch/arm/include/asm/u-boot.h | 4 ----
 1 file changed, 4 deletions(-)
arch/arm/include/asm/u-boot.h +0 -4
index ae4c21b..43cc494 100644
@@ -49,8 +49,4 @@ typedef struct bd_info {
 #define IH_ARCH_DEFAULT IH_ARCH_ARM64
 #endif
 
-#if defined(CONFIG_USE_PRIVATE_LIBGCC) && defined(CONFIG_SYS_THUMB_BUILD)
-#error Thumb build does not work with private libgcc.
-#endif
-
 #endif	/* _U_BOOT_H_ */
Signature · 1 line
2.2.0.rc0.207.ga3a616c
#2 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

Quoted 4 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

Thanks for digging into all of this! Pavel, can you confirm that with these two applied things work still? Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150602/e37153a2/attachment.sig>
#3 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

Quoted 9 lines · Tom Rini
Quoted 4 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

Thanks for digging into all of this! Pavel, can you confirm that with these two applied things work still? Thanks!

For series:

Thanks,
Pavel

Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
#4 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

Hello Pavel,

Quoted 8 lines · Pavel Machek
Quoted 7 lines · Tom Rini
Quoted 4 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

Quoted 7 lines
Quoted 2 lines

Thanks for digging into all of this! Pavel, can you confirm that with these two applied things work still? Thanks!

For series:

Do we consider this a bug fix? If so, I can add this series it to my ARM PR (along with Masahiro's 'enable CONFIG_USE_PRIVATE_LIBGCC by default' which was clashing with (here reverted) a6a4c542d.

Quoted 1 line

Thanks,

Amicalement,

Signature · 1 line
Albert.
#5 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

Quoted 14 lines · Albert ARIBAUD

Hello Pavel,

Quoted 11 lines · Pavel Machek
Quoted 9 lines · Tom Rini
Quoted 4 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

Thanks for digging into all of this! Pavel, can you confirm that with these two applied things work still? Thanks!

Quoted 8 lines
Quoted 4 lines

For series:

Do we consider this a bug fix? If so, I can add this series it to my ARM PR (along with Masahiro's 'enable CONFIG_USE_PRIVATE_LIBGCC by default' which was clashing with (here reverted) a6a4c542d.

Yes please, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150701/2d863193/attachment.sig>
#6 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

In reply to Albert ARIBAUD
Quoted 14 lines · Albert ARIBAUD

Hello Pavel,

Quoted 11 lines · Pavel Machek
Quoted 9 lines · Tom Rini
Quoted 4 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

Thanks for digging into all of this! Pavel, can you confirm that with these two applied things work still? Thanks!

Quoted 8 lines
Quoted 4 lines

For series:

Do we consider this a bug fix? If so, I can add this series it to my ARM PR (along with Masahiro's 'enable CONFIG_USE_PRIVATE_LIBGCC by default' which was clashing with (here reverted) a6a4c542d.

I think fixing CONFIG_USE_PRIVATE_LIBGCC is a a bug fix, yes... :-).
Pavel

Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
#7 lore raw

PATCH 2/2 Revert "break build if it would produce broken binary"

In reply to Simon Glass

Hello Simon,

Quoted 8 lines · Simon Glass

The root cause of this problem should now be fixed.

This reverts commit a6a4c542d316b3401f0840ac5378743191bca851.

---

 arch/arm/include/asm/u-boot.h | 4 ----
 1 file changed, 4 deletions(-)

Applied to u-boot-arm/master, thanks!

Amicalement,

Signature · 1 line
Albert.
#8 lore raw

PATCH 1/2 arm: Add ENTRY/ENDPROC to private libgcc functions

In reply to Simon Glass

Hello Simon,

Quoted 8 lines · Simon Glass

When CONFIG_SYS_THUMB_BUILD is defined these functions may be called from Thumb code. Add the required ENTRY and ENDPROC bracketing so that BLX is used to call these ARM functions, instead of plain BL, which will fail.

---

Quoted 8 lines
 arch/arm/lib/_ashldi3.S |  6 ++++--
 arch/arm/lib/_ashrdi3.S |  6 ++++--
 arch/arm/lib/_divsi3.S  |  6 ++++--
 arch/arm/lib/_lshrdi3.S |  6 ++++--
 arch/arm/lib/_modsi3.S  |  7 ++++---
 arch/arm/lib/_udivsi3.S | 10 ++++++----
 arch/arm/lib/_umodsi3.S |  6 ++++--
 7 files changed, 30 insertions(+), 17 deletions(-)

Applied to u-boot-arm/master, thanks!

Amicalement,

Signature · 1 line
Albert.