aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/arm/bpabi.h2
-rw-r--r--gcc/config/arm/ieee754-df.S2
-rw-r--r--gcc/config/arm/ieee754-sf.S2
-rw-r--r--gcc/config/arm/lib1funcs.asm28
5 files changed, 33 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 26d528b..dea4074 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2005-04-30 Paul Brook <paul@codesourcery.com>
+
+ * config/arm/bpabi.h (RENAME_LIBRARY_SET): Always use .thumb_set in
+ thumb mode.
+ * config/arm/ieee754-df.S: Use __INTERWORKING_STUBS__.
+ * config/arm/ieee754-sf.S: Ditto.
+ * config/arm/lib1funcs.asm: Define and use __INTERWORKING_STUBS__.
+ (FUNC_ALIAS): Use .thumb_set for thumb routines.
+
2005-04-30 Kazu Hirata <kazu@cs.umass.edu>
* tree-ssanames.c: Fix a comment typo.
diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h
index 037b26d..ddf55d9 100644
--- a/gcc/config/arm/bpabi.h
+++ b/gcc/config/arm/bpabi.h
@@ -46,7 +46,7 @@
"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \
"-X"
-#if defined (__thumb__) && !defined (__THUMB_INTERWORK__)
+#if defined (__thumb__)
#define RENAME_LIBRARY_SET ".thumb_set"
#else
#define RENAME_LIBRARY_SET ".set"
diff --git a/gcc/config/arm/ieee754-df.S b/gcc/config/arm/ieee754-df.S
index bce74e5..570e77f 100644
--- a/gcc/config/arm/ieee754-df.S
+++ b/gcc/config/arm/ieee754-df.S
@@ -81,7 +81,7 @@ ARM_FUNC_START subdf3
ARM_FUNC_ALIAS aeabi_dsub subdf3
eor yh, yh, #0x80000000 @ flip sign bit of second arg
-#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+#if defined(__INTERWORKING_STUBS__)
b 1f @ Skip Thumb-code prologue
#endif
diff --git a/gcc/config/arm/ieee754-sf.S b/gcc/config/arm/ieee754-sf.S
index 101a70b..19fb03f 100644
--- a/gcc/config/arm/ieee754-sf.S
+++ b/gcc/config/arm/ieee754-sf.S
@@ -62,7 +62,7 @@ ARM_FUNC_START subsf3
ARM_FUNC_ALIAS aeabi_fsub subsf3
eor r1, r1, #0x80000000 @ flip sign bit of second arg
-#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+#if defined(__INTERWORKING_STUBS__)
b 1f @ Skip Thumb-code prologue
#endif
diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm
index b8df889..4e3c8a3 100644
--- a/gcc/config/arm/lib1funcs.asm
+++ b/gcc/config/arm/lib1funcs.asm
@@ -94,10 +94,20 @@ Boston, MA 02111-1307, USA. */
# define RET bx lr
# define RETc(x) bx##x lr
-# if (__ARM_ARCH__ == 4) \
- && (defined(__thumb__) || defined(__THUMB_INTERWORK__))
-# define __INTERWORKING__
-# endif
+/* Special precautions for interworking on armv4t. */
+# if (__ARM_ARCH__ == 4)
+
+/* Always use bx, not ldr pc. */
+# if (defined(__thumb__) || defined(__THUMB_INTERWORK__))
+# define __INTERWORKING__
+# endif /* __THUMB__ || __THUMB_INTERWORK__ */
+
+/* Include thumb stub before arm mode code. */
+# if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+# define __INTERWORKING_STUBS__
+# endif /* __thumb__ && !__THUMB_INTERWORK__ */
+
+#endif /* __ARM_ARCH == 4 */
#else
@@ -192,7 +202,7 @@ SYM (__\name):
/* Special function that will always be coded in ARM assembly, even if
in Thumb-only compilation. */
-#if defined(__thumb__) && !defined(__THUMB_INTERWORK__)
+#if defined(__INTERWORKING_STUBS__)
.macro ARM_FUNC_START name
FUNC_START \name
bx pc
@@ -225,13 +235,17 @@ SYM (__\name):
.macro FUNC_ALIAS new old
.globl SYM (__\new)
- EQUIV SYM (__\new), SYM (__\old)
+#if defined (__thumb__)
+ .thumb_set SYM (__\new), SYM (__\old)
+#else
+ .set SYM (__\new), SYM (__\old)
+#endif
.endm
.macro ARM_FUNC_ALIAS new old
.globl SYM (__\new)
EQUIV SYM (__\new), SYM (__\old)
-#ifdef __thumb__
+#if defined(__INTERWORKING_STUBS__)
.set SYM (_L__\new), SYM (_L__\old)
#endif
.endm