[U-Boot] [PATCH] ARM EABI: add new helper functions resp. function names

Wolfgang Denk wd at denx.de
Thu Aug 6 21:29:59 CEST 2009


The ARM EABI defines new names for GCC helper functions,
and GCC seems to need some new functions as well.

This patch is a minimal-invasive approach to fix problems with EABI
conformant tool chains (to be used with "USE_PRIVATE_LIBGCC=yes").

Signed-off-by: Wolfgang Denk <wd at denx.de>
---
 lib_arm/_ashldi3.S |    2 ++
 lib_arm/_ashrdi3.S |    2 ++
 lib_arm/_divsi3.S  |    2 ++
 lib_arm/_lshrdi3.S |    2 ++
 lib_arm/_udivsi3.S |   34 +++++++++++++++++++++++++---------
 5 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/lib_arm/_ashldi3.S b/lib_arm/_ashldi3.S
index de4403d..834ddc2 100644
--- a/lib_arm/_ashldi3.S
+++ b/lib_arm/_ashldi3.S
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __ashldi3
+.globl	__aeabi_llsl
 __ashldi3:
+__aeabi_llsl:
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
diff --git a/lib_arm/_ashrdi3.S b/lib_arm/_ashrdi3.S
index 5edbcb3..671ac87 100644
--- a/lib_arm/_ashrdi3.S
+++ b/lib_arm/_ashrdi3.S
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __ashrdi3
+.globl __aeabi_lasr
 __ashrdi3:
+__aeabi_lasr:
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
diff --git a/lib_arm/_divsi3.S b/lib_arm/_divsi3.S
index 9dc15f6..cfbadb2 100644
--- a/lib_arm/_divsi3.S
+++ b/lib_arm/_divsi3.S
@@ -96,7 +96,9 @@
 
 	.align	5
 .globl __divsi3
+.globl __aeabi_idiv
 __divsi3:
+__aeabi_idiv:
 	cmp	r1, #0
 	eor	ip, r0, r1			@ save the sign of the result.
 	beq	Ldiv0
diff --git a/lib_arm/_lshrdi3.S b/lib_arm/_lshrdi3.S
index fabfd9f..e7fa799 100644
--- a/lib_arm/_lshrdi3.S
+++ b/lib_arm/_lshrdi3.S
@@ -35,7 +35,9 @@ Boston, MA 02110-1301, USA.  */
 #endif
 
 .globl __lshrdi3
+.globl __aeabi_llsr
 __lshrdi3:
+__aeabi_llsr:
 
 	subs	r3, r2, #32
 	rsb	ip, r2, #32
diff --git a/lib_arm/_udivsi3.S b/lib_arm/_udivsi3.S
index a3f9b59..1309802 100644
--- a/lib_arm/_udivsi3.S
+++ b/lib_arm/_udivsi3.S
@@ -11,9 +11,12 @@ curbit		.req	r3
 /* pc		.req	r15	*/
 	.text
 	.globl	 __udivsi3
-	.type  __udivsi3       ,function
+	.type	__udivsi3 ,function
+	.globl	__aeabi_uidiv
+	.type	__aeabi_uidiv ,function
 	.align	0
- __udivsi3      :
+ __udivsi3:
+ __aeabi_uidiv:
 	cmp	divisor, #0
 	beq	Ldiv0
 	mov	curbit, #1
@@ -68,10 +71,23 @@ Ldiv0:
 	mov	r0, #0			@ about as wrong as it could be
 	ldmia	sp!, {pc}
 	.size  __udivsi3       , . -  __udivsi3
-/* # 235 "libgcc1.S" */
-/* # 320 "libgcc1.S" */
-/* # 421 "libgcc1.S" */
-/* # 433 "libgcc1.S" */
-/* # 456 "libgcc1.S" */
-/* # 500 "libgcc1.S" */
-/* # 580 "libgcc1.S" */
+
+.globl __aeabi_uidivmod
+__aeabi_uidivmod:
+
+	stmfd	sp!, {r0, r1, ip, lr}
+	bl	__aeabi_uidiv
+	ldmfd	sp!, {r1, r2, ip, lr}
+	mul	r3, r0, r2
+	sub	r1, r1, r3
+	mov	pc, lr
+
+.globl __aeabi_idivmod
+__aeabi_idivmod:
+
+	stmfd	sp!, {r0, r1, ip, lr}
+	bl	__aeabi_idiv
+	ldmfd	sp!, {r1, r2, ip, lr}
+	mul	r3, r0, r2
+	sub	r1, r1, r3
+	mov	pc, lr
-- 
1.6.0.6



More information about the U-Boot mailing list