]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
2006-10-26 Paul Brook <paul@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Thu, 26 Oct 2006 19:44:34 +0000 (19:44 +0000)
committerPaul Brook <paul@codesourcery.com>
Thu, 26 Oct 2006 19:44:34 +0000 (19:44 +0000)
gas/
* config/tc-arm.c (arm_is_eabi): New function.
* config/tc-arm.h (arm_is_eabi): New prototype.
(THUMB_IS_FUNC): Use ELF function type for EABI objects.
* doc/c-arm.texi (.thumb_func): Update documentation.

ChangeLog.csl
gas/config/tc-arm.c
gas/config/tc-arm.h
gas/doc/c-arm.texi

index 98e6ccf140d93c40e894204565bd96c362dc1d21..1d464111e533944f9235dc20720607338b52613d 100644 (file)
@@ -1,3 +1,11 @@
+2006-10-26  Paul Brook  <paul@codesourcery.com>
+
+       gas/
+       * config/tc-arm.c (arm_is_eabi): New function.
+       * config/tc-arm.h (arm_is_eabi): New prototype.
+       (THUMB_IS_FUNC): Use ELF function type for EABI objects.
+       * doc/c-arm.texi (.thumb_func): Update documentation.
+
 2006-10-26  Paul Brook  <paul@codesourcery.com>
 
        binutils/
index 7ef1e7bb9e6990d5c8b3a8bf874c2c6916b4ee3a..1105590e779a9e6f7fe295c58db6efd5b0bd147f 100644 (file)
@@ -238,6 +238,12 @@ static int meabi_flags = EABI_DEFAULT;
 # else
 static int meabi_flags = EF_ARM_EABI_UNKNOWN;
 # endif
+
+bfd_boolean
+arm_is_eabi(void)
+{
+  return (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4);
+}
 #endif
 
 #ifdef OBJ_ELF
index f2615770c47df9f4ad1aa50cc45b1bfa16c7ec41..31d15bfc78d5904e5d86eabceadbe608efa2cf7f 100644 (file)
@@ -98,6 +98,7 @@ extern int arm_optimize_expr (expressionS *, operatorT, expressionS *);
 #ifdef OBJ_ELF
 #define md_end arm_md_end
 extern void arm_md_end (void);
+bfd_boolean arm_is_eabi (void);
 #endif
 
 /* NOTE: The fake label creation in stabs.c:s_stab_generic() has
@@ -120,7 +121,19 @@ extern void arm_md_end (void);
 
 #define ARM_IS_THUMB(s)                (ARM_GET_FLAG (s) & ARM_FLAG_THUMB)
 #define ARM_IS_INTERWORK(s)    (ARM_GET_FLAG (s) & ARM_FLAG_INTERWORK)
+#ifdef OBJ_ELF
+
+/* For ELF objects THUMB_IS_FUNC is inferred from
+   ARM_IS_TUMB and the function type.  */
+#define THUMB_IS_FUNC(s) \
+  ((arm_is_eabi () \
+    && (ARM_IS_THUMB (s)) \
+    && (symbol_get_bfdsym (s)->flags & BSF_FUNCTION)) \
+   || (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC))
+
+#else
 #define THUMB_IS_FUNC(s)       (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC)
+#endif
 
 #define ARM_SET_THUMB(s,t)      ((t) ? ARM_SET_FLAG (s, ARM_FLAG_THUMB)     : ARM_RESET_FLAG (s, ARM_FLAG_THUMB))
 #define ARM_SET_INTERWORK(s,t)  ((t) ? ARM_SET_FLAG (s, ARM_FLAG_INTERWORK) : ARM_RESET_FLAG (s, ARM_FLAG_INTERWORK))
index d9a65aa8eba141ad6e8e2b53977ee6fd894ef72e..fd7417983b76ad1ba41229931e333b8590c4a1f9 100644 (file)
@@ -458,6 +458,9 @@ between Arm and Thumb instructions and should be used even if
 interworking is not going to be performed.  The presence of this
 directive also implies @code{.thumb}
 
+This directive is not neccessary when generating EABI objects.  On these
+targets the encoding is implicit when generating Thumb code.
+
 @cindex @code{thumb_set} directive, ARM
 @item .thumb_set
 This performs the equivalent of a @code{.set} directive in that it