From 545fee91de9a993ed97447830b00cc856c74fe16 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Fri, 10 Mar 2006 17:20:30 +0000 Subject: [PATCH] 2006-03-10 Paul Brook 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. --- bfd/ChangeLog | 5 +++++ bfd/elf32-arm.c | 27 ++++++++++++++++++++++++--- binutils/ChangeLog | 4 ++++ binutils/readelf.c | 5 +++++ gas/ChangeLog | 6 ++++++ gas/config/tc-arm.c | 4 +++- gas/doc/c-arm.texi | 5 +++-- include/elf/ChangeLog | 4 ++++ include/elf/arm.h | 1 + 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 + + * elf32-arm.c (INTERWORK_FLAG): Handle EABIv5. + (elf32_arm_print_private_bfd_data): Ditto. + 2006-03-09 Paul Brook * 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 + + * readelf.c (decode_ARM_machine_flags): Handle EABIv5. + 2006-03-10 Alan Modra * 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 + + * 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 * 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 + + * arm.h (EF_ARM_EABI_VER5): Define. + 2006-03-06 Nathan Sidwell * 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 -- 2.11.0