This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Re: BUG W/PATCH - libgloss/arm/linux-syscalls0.S - wrongly assumes thumb mode.
- From: Duane Ellis <duane-newlib at duaneellis dot com>
- Cc: newlib at sourceware dot org
- Date: Tue, 20 Mar 2007 13:40:55 -0400
- Subject: Re: BUG W/PATCH - libgloss/arm/linux-syscalls0.S - wrongly assumes thumb mode.
- References: <460019EC.6030508@duaneellis.com>
- Reply-to: duane-newlib at duaneellis dot com
Duane Ellis wrote:
Below is a patch to fix a build problem with Newlib 1.15.0.
Whoops - I the diff is backwards
(ie: diff OLD NEW vrs diff NEW OLD)
Here's the fixed version.
-Duane.
-------------
diff -Naur newlib-1.15.0/libgloss/arm/linux-syscalls0.S
newlib-1.15.0-ARM-LINUX-SYSCALLFIX/libgloss/arm/linux-syscalls0.S
--- newlib-1.15.0/libgloss/arm/linux-syscalls0.S 2006-10-03
12:33:50.000000000 -0400
+++ newlib-1.15.0-ARM-LINUX-SYSCALLFIX/libgloss/arm/linux-syscalls0.S
2007-03-20 12:50:13.000000000 -0400
@@ -68,11 +68,11 @@
# define SYSCALL6(name) \
GLOBAL(_ ## name); \
- push { r4 - r5 }; \
+ stmfd sp!,{ r4 - r5 }; \
ldr r4, [sp, #8]; \
ldr r5, [sp, #12]; \
swi #SYS_ ## name; \
- pop { r4 - r5 }; \
+ ldmfd sp!,{ r4 - r5 }; \
b _set_errno; \
SIZE(_ ## name)
@@ -190,19 +190,37 @@
ALIAS(vfork)
ALIAS(wait4)
+#if __thumb__
# define SOCKETCALL(name, NAME) \
GLOBAL(name); \
push { r0 - r3 }; \
mov r0, #SYS_ ## NAME; \
b _socketcall_tail; \
SIZE(name)
-
+#else
+# define SOCKETCALL(name, NAME) \
+ GLOBAL(name); \
+ stmfd sp!,{ r0 - r3 }; \
+ mov r0, #SYS_ ## NAME; \
+ b _socketcall_tail; \
+ SIZE(name)
+#endif
+
FUNC(_socketcall_tail)
mov r1, sp
+#if __thumb__
push { lr }
+#else
+ stmfd sp!,{lr}
+#endif
bl _socketcall
+#if __thumb__
pop { r3 }
add sp, #16
+#else
+ ldmfd sp!,{r3}
+ add sp,sp,#16
+#endif
#if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_3__) \
|| defined(__ARM_ARCH_3M__) || defined(__ARM_ARCH_4__)
mov pc, r3
diff -Naur newlib-1.15.0/libgloss/ChangeLog
newlib-1.15.0-ARM-LINUX-SYSCALLFIX/libgloss/ChangeLog
--- newlib-1.15.0/libgloss/ChangeLog 2006-12-18 16:48:18.000000000 -0500
+++ newlib-1.15.0-ARM-LINUX-SYSCALLFIX/libgloss/ChangeLog 2007-03-20
13:22:43.000000000 -0400
@@ -1,3 +1,8 @@
+2007-03-20 duane ellis <duane-newlib@duaneellis.com>
+
+ * arm/linux-syscalls0.S - Fix: Wrongly uses THUMB
+ instructions in various macros.
+
2006-12-18 Kazu Hirata <kazu@codesourcery.com>
Merge from newlib-csl-20060320-branch: