summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-03-10 17:20:30 +0000
committerPaul Brook <paul@codesourcery.com>2006-03-10 17:20:30 +0000
commit545fee91de9a993ed97447830b00cc856c74fe16 (patch)
treedff1ec346374d2fecd93451f59ba7c10bd921d20
parent5955adea2bc4373a787a26ae815dd76955099d21 (diff)
downloadbinutils-redhat-545fee91de9a993ed97447830b00cc856c74fe16.tar.gz
2006-03-10 Paul Brook <paul@codesourcery.com>
bfd/ * elf32-arm.c (INTERWORK_FLAG): Handle EABIv5. (elf32_arm_print_private_bfd_data): Ditto. binutils/ * readelf.c (decode_ARM_machine_flags): Handle EABIv5. gas/ * config/tc-arm.c (md_begin): Handle EABIv5. (arm_eabis): Add EF_ARM_EABI_VER5. * doc/c-arm.texi: Document -meabi=5. include/elf/ * arm.h (EF_ARM_EABI_VER5): Define.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c27
-rw-r--r--binutils/ChangeLog4
-rw-r--r--binutils/readelf.c5
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-arm.c4
-rw-r--r--gas/doc/c-arm.texi5
-rw-r--r--include/elf/ChangeLog4
-rw-r--r--include/elf/arm.h1
9 files changed, 55 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4166c678b5..ac78ad6004 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (INTERWORK_FLAG): Handle EABIv5.
+ (elf32_arm_print_private_bfd_data): Ditto.
+
2006-03-09 Paul Brook <paul@codesourcery.com>
* cpu-arm.c (bfd_is_arm_mapping_symbol_name): Recognise additional
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 21f17f07a6..784160a263 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -1452,9 +1452,10 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
typedef unsigned long int insn32;
typedef unsigned short int insn16;
-/* In lieu of proper flags, assume all EABIv4 objects are interworkable. */
+/* In lieu of proper flags, assume all EABIv4 or later objects are
+ interworkable. */
#define INTERWORK_FLAG(abfd) \
- (EF_ARM_EABI_VERSION (elf_elfheader (abfd)->e_flags) == EF_ARM_EABI_VER4 \
+ (EF_ARM_EABI_VERSION (elf_elfheader (abfd)->e_flags) >= EF_ARM_EABI_VER4 \
|| (elf_elfheader (abfd)->e_flags & EF_ARM_INTERWORK))
/* The linker script knows the section names for placement.
@@ -5153,6 +5154,21 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd)
return TRUE;
}
+
+/* Return TRUE if the two EABI versions are incompatible. */
+
+static bfd_boolean
+elf32_arm_versions_compatible (unsigned iver, unsigned over)
+{
+ /* v4 and v5 are the same spec before and after it was released,
+ so allow mixing them. */
+ if ((iver == EF_ARM_EABI_VER4 && over == EF_ARM_EABI_VER5)
+ || (iver == EF_ARM_EABI_VER5 && over == EF_ARM_EABI_VER4))
+ return TRUE;
+
+ return (iver == over);
+}
+
/* Merge backend specific data from an object file to the output
object file when linking. */
@@ -5251,7 +5267,8 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
}
/* Complain about various flag mismatches. */
- if (EF_ARM_EABI_VERSION (in_flags) != EF_ARM_EABI_VERSION (out_flags))
+ if (!elf32_arm_versions_compatible (EF_ARM_EABI_VERSION (in_flags),
+ EF_ARM_EABI_VERSION (out_flags)))
{
_bfd_error_handler
(_("ERROR: Source object %B has EABI version %d, but target %B has EABI version %d"),
@@ -5462,7 +5479,11 @@ elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr)
case EF_ARM_EABI_VER4:
fprintf (file, _(" [Version4 EABI]"));
+ goto eabi;
+ case EF_ARM_EABI_VER5:
+ fprintf (file, _(" [Version5 EABI]"));
+ eabi:
if (flags & EF_ARM_BE8)
fprintf (file, _(" [BE8]"));
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 1281c4a1aa..21378d7de8 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,7 @@
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * readelf.c (decode_ARM_machine_flags): Handle EABIv5.
+
2006-03-10 Alan Modra <amodra@bigpond.net.au>
* dwarf.c (process_extended_line_op): Remove pointer_size param.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index dcd02bca21..d8bd54f440 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1793,6 +1793,11 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[])
case EF_ARM_EABI_VER4:
strcat (buf, ", Version4 EABI");
+ goto eabi;
+
+ case EF_ARM_EABI_VER5:
+ strcat (buf, ", Version5 EABI");
+ eabi:
while (e_flags)
{
unsigned flag;
diff --git a/gas/ChangeLog b/gas/ChangeLog
index ac85baef35..1b72e39dc7 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * config/tc-arm.c (md_begin): Handle EABIv5.
+ (arm_eabis): Add EF_ARM_EABI_VER5.
+ * doc/c-arm.texi: Document -meabi=5.
+
2006-03-10 Ben Elliston <bje@au.ibm.com>
* app.c (do_scrub_chars): Simplify string handling.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index e98733d6dd..cab398f486 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -12851,6 +12851,7 @@ md_begin (void)
break;
case EF_ARM_EABI_VER4:
+ case EF_ARM_EABI_VER5:
/* No additional flags to set. */
break;
@@ -13367,11 +13368,12 @@ static const struct arm_option_value_table arm_float_abis[] =
};
#ifdef OBJ_ELF
-/* We only know how to output GNU and ver 4 (AAELF) formats. */
+/* We only know how to output GNU and ver 4/5 (AAELF) formats. */
static const struct arm_option_value_table arm_eabis[] =
{
{"gnu", EF_ARM_EABI_UNKNOWN},
{"4", EF_ARM_EABI_VER4},
+ {"5", EF_ARM_EABI_VER5},
{NULL, 0}
};
#endif
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index 299dc42bac..ca0998bea6 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -255,9 +255,10 @@ and
This option specifies which EABI version the produced object files should
conform to.
The following values are recognised:
-@code{gnu}
+@code{gnu},
+@code{4}
and
-@code{4}.
+@code{5}.
@cindex @code{-EB} command line option, ARM
@item -EB
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 3270871cd2..5367181a49 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,7 @@
+2006-03-10 Paul Brook <paul@codesourcery.com>
+
+ * arm.h (EF_ARM_EABI_VER5): Define.
+
2006-03-06 Nathan Sidwell <nathan@codesourcery.com>
* m68k.h (EF_M68K_ISA_MASK, EF_M68K_ISA_A,
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 9ad04205c6..8311c131c9 100644
--- a/include/elf/arm.h
+++ b/include/elf/arm.h
@@ -56,6 +56,7 @@
#define EF_ARM_EABI_VER2 0x02000000
#define EF_ARM_EABI_VER3 0x03000000
#define EF_ARM_EABI_VER4 0x04000000
+#define EF_ARM_EABI_VER5 0x05000000
/* Local aliases for some flags to match names used by COFF port. */
#define F_INTERWORK EF_ARM_INTERWORK