From 3bfcb6528e6fb6a324b2e119f50f72a0674a1402 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 30 Oct 2012 12:44:58 +0000 Subject: [PATCH] bfd: * elf32-arm.c (elf32_arm_print_private_bfd_data): Recognise and display the new ARM hard-float/soft-float ABI flags for EABI_VER5 (elf32_arm_post_process_headers): Add the hard-float/soft-float ABI flag as appropriate for ET_DYN/ET_EXEC in EABI_VER5. binutils: * readelf.c (decode_ARM_machine_flags): Recognise and display the new ARM hard-float/soft-float ABI flags for EABI_VER5. Split out the code for EABI_VER4 and EABI_VER5 to allow this. elfcpp: * arm.h: New enum for EABI soft- and hard-float flags. gold: * gold.cc (Target_arm::do_adjust_elf_header): Add the hard-float/soft-float ABI flag as appropriate for ET_DYN/ET_EXEC in EABI_VER5. include: * elf/arm.h (EF_ARM_ABI_FLOAT_SOFT): New define. (EF_ARM_ABI_FLOAT_HARD): Likewise. ld/testsuite: * ld-arm/eabi-hard-float.s: New test source. * ld-arm/eabi-soft-float.s: New test source. * ld-arm/eabi-hard-float.d: New test. * ld-arm/eabi-soft-float.d: New test. * ld-arm/eabi-soft-float-ABI4.d: New test. * ld-arm/eabi-soft-float-r.d: New test. * ld-arm/arm-elf.xp: Use the new tests. binutils: PR binutils/14779 * configure.in: Add checks for wchar.h and mbstate_t. * config.in: Regenerate. * configure: Regenerate. * readelf.c: Conditionally include wchar.h. (print_symbol): Conditionally use mbstate_t. --- bfd/ChangeLog | 9 +++++- bfd/elf-bfd.h | 2 ++ bfd/elf32-arm.c | 19 ++++++++++++ bfd/elflink.c | 9 ++++-- binutils/ChangeLog | 15 ++++++++++ binutils/bfdtest1.c | 4 ++- binutils/config.in | 8 +++++- binutils/configure | 28 +++++++++++++++++- binutils/configure.in | 10 ++++++- binutils/readelf.c | 51 ++++++++++++++++++++++++++++++--- elfcpp/ChangeLog | 4 +++ elfcpp/arm.h | 10 ++++++- gas/doc/as.texinfo | 5 ++-- gold/ChangeLog | 6 ++++ gold/arm.cc | 22 ++++++++++++-- include/elf/ChangeLog | 7 ++++- include/elf/arm.h | 5 ++++ ld/testsuite/ChangeLog | 10 +++++++ ld/testsuite/ld-arm/arm-elf.exp | 15 ++++++++++ 19 files changed, 220 insertions(+), 19 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index d846f635fc5..56b40c5ffa4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,7 +1,14 @@ +2012-10-30 Steve McIntyre + + * elf32-arm.c (elf32_arm_print_private_bfd_data): Recognise and + display the new ARM hard-float/soft-float ABI flags for EABI_VER5 + (elf32_arm_post_process_headers): Add the hard-float/soft-float + ABI flag as appropriate for ET_DYN/ET_EXEC in EABI_VER5. + 2012-10-30 Yao Qi H.J. Lu - * configure.in: Set CORE_HEADER to hosts/x86-64linux.h for + * configure.in: Set CORE_HEADER to hosts/x86-64linux.h for 'i[3-7]86-*-linux-*' if x86_64-*linux is enabled. * configure: Regenerated. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index b8d82b1b7f9..aa78ecd1f46 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -168,6 +168,8 @@ struct elf_link_hash_entry /* Symbol has a non-weak reference from a non-shared object (other than the object in which it is defined). */ unsigned int ref_regular_nonweak : 1; + /* Symbol has a non-weak reference from a shared object. */ + unsigned int ref_dynamic_nonweak : 1; /* Dynamic symbol has been adjustd. */ unsigned int dynamic_adjusted : 1; /* Symbol needs a copy reloc. */ diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 633bb648a76..fefc7db0c1e 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -12110,6 +12110,15 @@ elf32_arm_print_private_bfd_data (bfd *abfd, void * ptr) case EF_ARM_EABI_VER5: fprintf (file, _(" [Version5 EABI]")); + + if (flags & EF_ARM_ABI_FLOAT_SOFT) + fprintf (file, _(" [soft-float ABI]")); + + if (flags & EF_ARM_ABI_FLOAT_HARD) + fprintf (file, _(" [hard-float ABI]")); + + flags &= ~(EF_ARM_ABI_FLOAT_SOFT | EF_ARM_ABI_FLOAT_HARD); + eabi: if (flags & EF_ARM_BE8) fprintf (file, _(" [BE8]")); @@ -14417,6 +14426,16 @@ elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATT if (globals != NULL && globals->byteswap_code) i_ehdrp->e_flags |= EF_ARM_BE8; } + + if (EF_ARM_EABI_VERSION (i_ehdrp->e_flags) == EF_ARM_EABI_VER5 + && ((i_ehdrp->e_type == ET_DYN) || (i_ehdrp->e_type == ET_EXEC))) + { + int abi = bfd_elf_get_obj_attr_int (abfd, OBJ_ATTR_PROC, Tag_ABI_VFP_args); + if (abi) + i_ehdrp->e_flags |= EF_ARM_ABI_FLOAT_HARD; + else + i_ehdrp->e_flags |= EF_ARM_ABI_FLOAT_SOFT; + } } static enum elf_reloc_type_class diff --git a/bfd/elflink.c b/bfd/elflink.c index f22e023df88..2fcbac3e06d 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -4394,6 +4394,8 @@ error_free_dyn: { h->def_dynamic = 0; h->ref_dynamic = 1; + /* PR 12549: Note if the dynamic reference is weak. */ + h->ref_dynamic_nonweak = (bind != STB_WEAK); } } @@ -4411,6 +4413,9 @@ error_free_dyn: { h->ref_dynamic = 1; hi->ref_dynamic = 1; + /* PR 12549: Note if the dynamic reference is weak. */ + hi->ref_dynamic_nonweak = + h->ref_dynamic_nonweak = (bind != STB_WEAK); } else { @@ -4498,8 +4503,8 @@ error_free_dyn: if (!add_needed && definition && ((dynsym - && h->ref_regular) - || (h->ref_dynamic + && h->ref_regular_nonweak) + || (h->ref_dynamic_nonweak && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0 && !on_needed_list (elf_dt_name (abfd), htab->needed)))) { diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 8286e5a0697..c8149590746 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,18 @@ +2012-10-30 Nick Clifton + + PR binutils/14779 + * configure.in: Add checks for wchar.h and mbstate_t. + * config.in: Regenerate. + * configure: Regenerate. + * readelf.c: Conditionally include wchar.h. + (print_symbol): Conditionally use mbstate_t. + +2012-10-30 Steve McIntyre + + * readelf.c (decode_ARM_machine_flags): Recognise and display the + new ARM hard-float/soft-float ABI flags for EABI_VER5. Split out + the code for EABI_VER4 and EABI_VER5 to allow this. + 2012-10-29 Alan Modra * dlltool.c (INIT_SEC_DATA): Move. diff --git a/binutils/bfdtest1.c b/binutils/bfdtest1.c index b246a045a4d..eaee2fdf951 100644 --- a/binutils/bfdtest1.c +++ b/binutils/bfdtest1.c @@ -35,9 +35,11 @@ main (int argc, char **argv) bfd *last, *next; if (argc != 2) - die ("bad usage"); + die ("usage: bfdtest1 "); archive = bfd_openr (argv[1], NULL); + if (archive == NULL) + die ("no such archive"); if (!bfd_check_format (archive, bfd_archive)) { diff --git a/binutils/config.in b/binutils/config.in index 4ed54e9c3ca..bcabbba7910 100644 --- a/binutils/config.in +++ b/binutils/config.in @@ -2,7 +2,7 @@ /* Check that config.h is #included before system headers (this works only for glibc, but that should be enough). */ -#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__) +#if defined(__GLIBC__) # error config.h must be #included before system headers #endif @@ -100,6 +100,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H +/* Define if mbstate_t exists in wchar.h. */ +#undef HAVE_MBSTATE_T + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H @@ -160,6 +163,9 @@ /* Define to 1 if you have the `utimes' function. */ #undef HAVE_UTIMES +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H diff --git a/binutils/configure b/binutils/configure index 25f9360fce6..7c162ad706b 100755 --- a/binutils/configure +++ b/binutils/configure @@ -12446,7 +12446,7 @@ case "${host}" in esac -for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h locale.h sys/param.h +for ac_header in string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h locale.h sys/param.h wchar.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -12750,6 +12750,32 @@ $as_echo "#define HAVE_MKDTEMP 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +mbstate_t teststate; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + have_mbstate_t=yes +else + have_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_mbstate_t" >&5 +$as_echo "$have_mbstate_t" >&6; } + if test x"$have_mbstate_t" = xyes; then + +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + + fi # Some systems have frexp only in -lm, not in -lc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing frexp" >&5 diff --git a/binutils/configure.in b/binutils/configure.in index a21e85d788b..e9852de44f9 100644 --- a/binutils/configure.in +++ b/binutils/configure.in @@ -96,7 +96,7 @@ case "${host}" in esac AC_SUBST(DEMANGLER_NAME) -AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h locale.h sys/param.h) +AC_CHECK_HEADERS(string.h strings.h stdlib.h unistd.h fcntl.h sys/file.h limits.h locale.h sys/param.h wchar.h) AC_HEADER_SYS_WAIT ACX_HEADER_STRING AC_FUNC_ALLOCA @@ -107,6 +107,14 @@ AC_CHECK_FUNC([mkstemp], AC_CHECK_FUNC([mkdtemp], AC_DEFINE([HAVE_MKDTEMP], 1, [Define to 1 if you have the `mkdtemp' function.])) + AC_MSG_CHECKING([for mbstate_t]) + AC_TRY_COMPILE([#include ], + [mbstate_t teststate;], + have_mbstate_t=yes, have_mbstate_t=no) + AC_MSG_RESULT($have_mbstate_t) + if test x"$have_mbstate_t" = xyes; then + AC_DEFINE(HAVE_MBSTATE_T,1,[Define if mbstate_t exists in wchar.h.]) + fi # Some systems have frexp only in -lm, not in -lc. AC_SEARCH_LIBS(frexp, m) diff --git a/binutils/readelf.c b/binutils/readelf.c index b4f9f4e5980..399402dd4af 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -48,7 +48,9 @@ #ifdef HAVE_ZLIB_H #include #endif +#ifdef HAVE_WCHAR_H #include +#endif #if __GNUC__ >= 2 /* Define BFD64 here, even if our default architecture is 32 bit ELF @@ -386,7 +388,7 @@ print_vma (bfd_vma vma, print_mode mode) } /* Display a symbol on stdout. Handles the display of control characters and - multibye characters. + multibye characters (assuming the host environment supports them). Display at most abs(WIDTH) characters, truncating as necessary, unless do_wide is true. @@ -400,7 +402,9 @@ print_symbol (int width, const char *symbol) { bfd_boolean extra_padding = FALSE; int num_printed = 0; +#ifdef HAVE_MBSTATE_T mbstate_t state; +#endif int width_remaining; if (width < 0) @@ -417,13 +421,14 @@ print_symbol (int width, const char *symbol) else width_remaining = width; +#ifdef HAVE_MBSTATE_T /* Initialise the multibyte conversion state. */ memset (& state, 0, sizeof (state)); +#endif while (width_remaining) { size_t n; - wchar_t w; const char c = *symbol++; if (c == 0) @@ -449,15 +454,22 @@ print_symbol (int width, const char *symbol) } else { +#ifdef HAVE_MBSTATE_T + wchar_t w; +#endif /* Let printf do the hard work of displaying multibyte characters. */ printf ("%.1s", symbol - 1); width_remaining --; num_printed ++; +#ifdef HAVE_MBSTATE_T /* Try to find out how many bytes made up the character that was just printed. Advance the symbol pointer past the bytes that were displayed. */ n = mbrtowc (& w, symbol - 1, MB_CUR_MAX, & state); +#else + n = 1; +#endif if (n != (size_t) -1 && n != (size_t) -2 && n > 0) symbol += (n - 1); } @@ -2122,11 +2134,34 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[]) case EF_ARM_EABI_VER4: strcat (buf, ", Version4 EABI"); - goto eabi; + while (e_flags) + { + unsigned flag; + + /* Process flags one bit at a time. */ + flag = e_flags & - e_flags; + e_flags &= ~ flag; + + switch (flag) + { + case EF_ARM_BE8: + strcat (buf, ", BE8"); + break; + + case EF_ARM_LE8: + strcat (buf, ", LE8"); + break; + + default: + unknown = 1; + break; + } + break; + } + break; case EF_ARM_EABI_VER5: strcat (buf, ", Version5 EABI"); - eabi: while (e_flags) { unsigned flag; @@ -2145,6 +2180,14 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[]) strcat (buf, ", LE8"); break; + case EF_ARM_ABI_FLOAT_SOFT: /* Conflicts with EF_ARM_SOFT_FLOAT. */ + strcat (buf, ", soft-float ABI"); + break; + + case EF_ARM_ABI_FLOAT_HARD: /* Conflicts with EF_ARM_VFP_FLOAT. */ + strcat (buf, ", hard-float ABI"); + break; + default: unknown = 1; break; diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog index 853fa835be0..a6d658979b2 100644 --- a/elfcpp/ChangeLog +++ b/elfcpp/ChangeLog @@ -1,3 +1,7 @@ +2012-10-30 Steve McIntyre + + * arm.h: New enum for EABI soft- and hard-float flags. + 2012-09-15 Jiong Wang * tilegx.h: New file. diff --git a/elfcpp/arm.h b/elfcpp/arm.h index cb85eeb42ed..ab0618a3d67 100644 --- a/elfcpp/arm.h +++ b/elfcpp/arm.h @@ -1,6 +1,6 @@ // arm.h -- ELF definitions specific to EM_ARM -*- C++ -*- -// Copyright 2009, Free Software Foundation, Inc. +// Copyright 2009, 2012 Free Software Foundation, Inc. // Written by Doug Kwan . // This file is part of elfcpp. @@ -222,6 +222,14 @@ inline Elf_Word arm_eabi_version(Elf_Word flags) { return flags & EF_ARM_EABIMASK; } +// EABI_VER5 e_flags values for identifying soft- and hard-float ABI +// choice. +enum +{ + EF_ARM_ABI_FLOAT_SOFT = 0x200, + EF_ARM_ABI_FLOAT_HARD = 0x400, +}; + // Values for the Tag_CPU_arch EABI attribute. enum { diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index 741783a342d..67233f02764 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -458,7 +458,6 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @emph{Target RX options:} [@b{-mlittle-endian}|@b{-mbig-endian}] - [@b{-m32bit-ints}|@b{-m16bit-ints}] [@b{-m32bit-doubles}|@b{-m64bit-doubles}] @end ifset @ifset S390 @@ -7532,8 +7531,8 @@ things without first using the debugger to find the facts. If you have contributed to GAS and your name isn't listed here, it is not meant as a slight. We just don't know about it. Send mail to the maintainer, and we'll correct the situation. Currently -@c (January 1994), -the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}). +@c (October 2012), +the maintainer is Nick Clifton (email address @code{nickc@@redhat.com}). Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any more details?} diff --git a/gold/ChangeLog b/gold/ChangeLog index 57c7cc3cff7..60e2d4961b9 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2012-10-30 Steve McIntyre + + * gold.cc (Target_arm::do_adjust_elf_header): Add the + hard-float/soft-float ABI flag as appropriate for ET_DYN/ET_EXEC + in EABI_VER5. + 2012-10-29 Cary Coutant * dwp.cc (usage): Add file and exit status parameters; diff --git a/gold/arm.cc b/gold/arm.cc index d8471265705..5770c8a439d 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -2476,7 +2476,7 @@ class Target_arm : public Sized_target<32, big_endian> { return new Arm_output_section(name, type, flags); } void - do_adjust_elf_header(unsigned char* view, int len) const; + do_adjust_elf_header(unsigned char* view, int len); // We only need to generate stubs, and hence perform relaxation if we are // not doing relocatable linking. @@ -10016,15 +10016,16 @@ template void Target_arm::do_adjust_elf_header( unsigned char* view, - int len) const + int len) { gold_assert(len == elfcpp::Elf_sizes<32>::ehdr_size); elfcpp::Ehdr<32, big_endian> ehdr(view); + elfcpp::Elf_Word flags = this->processor_specific_flags(); unsigned char e_ident[elfcpp::EI_NIDENT]; memcpy(e_ident, ehdr.get_e_ident(), elfcpp::EI_NIDENT); - if (elfcpp::arm_eabi_version(this->processor_specific_flags()) + if (elfcpp::arm_eabi_version(flags) == elfcpp::EF_ARM_EABI_UNKNOWN) e_ident[elfcpp::EI_OSABI] = elfcpp::ELFOSABI_ARM; else @@ -10033,6 +10034,21 @@ Target_arm::do_adjust_elf_header( // FIXME: Do EF_ARM_BE8 adjustment. + // If we're working in EABI_VER5, set the hard/soft float ABI flags + // as appropriate. + if (elfcpp::arm_eabi_version(flags) == elfcpp::EF_ARM_EABI_VER5) + { + elfcpp::Elf_Half type = ehdr.get_e_type(); + if (type == elfcpp::ET_EXEC || type == elfcpp::ET_DYN) + { + Object_attribute* attr = this->get_aeabi_object_attribute(elfcpp::Tag_ABI_VFP_args); + if (attr->int_value()) + flags |= elfcpp::EF_ARM_ABI_FLOAT_HARD; + else + flags |= elfcpp::EF_ARM_ABI_FLOAT_SOFT; + this->set_processor_specific_flags(flags); + } + } elfcpp::Ehdr_write<32, big_endian> oehdr(view); oehdr.put_e_ident(e_ident); } diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index c75e2ff7e88..ef17f374be7 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,8 @@ +2012-10-30 Steve McIntyre + + * elf/arm.h (EF_ARM_ABI_FLOAT_SOFT): New define. + (EF_ARM_ABI_FLOAT_HARD): Likewise. + 2012-10-23 Tom Tromey * common.h (NT_SIGINFO, NT_FILE): New defines. @@ -18,7 +23,7 @@ (R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL): Ditto. (R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL ): Ditto. (R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL): Ditto. - + 2012-08-13 Ian Bolton Laurent Desnogues Jim MacArthur diff --git a/include/elf/arm.h b/include/elf/arm.h index 8ea3fe88100..d79930380ed 100644 --- a/include/elf/arm.h +++ b/include/elf/arm.h @@ -46,6 +46,11 @@ #define EF_ARM_MAPSYMSFIRST 0x10 /* NB conflicts with EF_APCS_FLOAT. */ #define EF_ARM_EABIMASK 0xFF000000 +/* New constants defined in the ARM ELF spec. version XXX. + Only valid in conjunction with EF_ARM_EABI_VER5. */ +#define EF_ARM_ABI_FLOAT_SOFT 0x200 /* NB conflicts with EF_ARM_SOFT_FLOAT. */ +#define EF_ARM_ABI_FLOAT_HARD 0x400 /* NB conflicts with EF_ARM_VFP_FLOAT. */ + /* Constants defined in AAELF. */ #define EF_ARM_BE8 0x00800000 #define EF_ARM_LE8 0x00400000 diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index f7975e449de..3357d94504b 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2012-10-30 Steve McIntyre + + * ld-arm/eabi-hard-float.s: New test source. + * ld-arm/eabi-soft-float.s: New test source. + * ld-arm/eabi-hard-float.d: New test. + * ld-arm/eabi-soft-float.d: New test. + * ld-arm/eabi-soft-float-ABI4.d: New test. + * ld-arm/eabi-soft-float-r.d: New test. + * ld-arm/arm-elf.xp: Use the new tests. + 2012-10-29 Alan Modra * ld-powerpc/powerpc.exp: Modify emulation option passed to ld diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 8e15ffe5087..81ee0bd16ce 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -271,6 +271,21 @@ set armelftests_common { {"Simple non-PIC shared library (no PLT check)" "-shared" "" {arm-lib.s} {{objdump -Rw arm-lib.r}} "arm-lib.so"} + {"EABI soft-float ET_EXEC ABI flag" "-T arm.ld" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s} + {{readelf -h eabi-soft-float.d}} + "eabi-soft-float"} + {"EABI hard-float ET_EXEC ABI flag" "-T arm.ld" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s} + {{readelf -h eabi-hard-float.d}} + "eabi-hard-float"} + {"EABI hard-float ET_DYN ABI flag" "-shared" "-mfloat-abi=hard -meabi=5" {eabi-hard-float.s} + {{readelf -h eabi-hard-float.d}} + "eabi-hard-float.so"} + {"EABI ABI flags wrong ABI version" "-T arm.ld" "-mfloat-abi=soft -meabi=4" {eabi-soft-float.s} + {{readelf -h eabi-soft-float-ABI4.d}} + "eabi-soft-float-no-flags"} + {"EABI ABI flags ld -r" "-r" "-mfloat-abi=soft -meabi=5" {eabi-soft-float.s} + {{readelf -h eabi-soft-float-r.d}} + "eabi-soft-float-r.o"} } set armelftests_nonacl { -- 2.30.2