diff options
author | Paul Brook <paul@codesourcery.com> | 2006-11-29 17:53:39 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2006-11-29 17:53:39 +0000 |
commit | e1da3f5b9645750e966e471ff0db480d6450dcb7 (patch) | |
tree | c2b3c0e23c7c61d0c38e755977902505a3659baf | |
parent | 2006-11-29 Paul Brook <paul@codesourcery.com> (diff) | |
download | binutils-gdb-e1da3f5b9645750e966e471ff0db480d6450dcb7.tar.gz binutils-gdb-e1da3f5b9645750e966e471ff0db480d6450dcb7.tar.bz2 binutils-gdb-e1da3f5b9645750e966e471ff0db480d6450dcb7.zip |
2006-11-29 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.
-rw-r--r-- | gas/ChangeLog | 7 | ||||
-rw-r--r-- | gas/config/tc-arm.c | 6 | ||||
-rw-r--r-- | gas/config/tc-arm.h | 13 | ||||
-rw-r--r-- | gas/doc/c-arm.texi | 3 |
4 files changed, 29 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index e21af067874..d8066c4f123 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,12 @@ 2006-11-29 Paul Brook <paul@codesourcery.com> + * 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-11-29 Paul Brook <paul@codesourcery.com> + * config/tc-arm.c (do_vfp_sp_const, do_vfp_dp_const): Fix operans encoding. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 7f3751d894e..8ea3ad198b7 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -232,6 +232,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 diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h index 56ceec4ef3b..591d496d6cc 100644 --- a/gas/config/tc-arm.h +++ b/gas/config/tc-arm.h @@ -100,6 +100,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 @@ -122,7 +123,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)) diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi index 2fea463c54e..a3db1df910a 100644 --- a/gas/doc/c-arm.texi +++ b/gas/doc/c-arm.texi @@ -429,6 +429,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 |