summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-10-30 12:44:53 +0000
committerNick Clifton <nickc@redhat.com>2012-10-30 12:44:53 +0000
commitcd49363b8ae1725522ea29ccc0dda7b138f3d5aa (patch)
treea9f3c57096008cb966b73eb2d7de91849114973c
parent14d6cf09f6eea18061f270bc33e9eb4ffc6a8fcf (diff)
downloadbinutils-redhat-cd49363b8ae1725522ea29ccc0dda7b138f3d5aa.tar.gz
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.
-rw-r--r--bfd/ChangeLog9
-rw-r--r--bfd/elf-bfd.h2
-rw-r--r--bfd/elf32-arm.c19
-rw-r--r--bfd/elflink.c9
-rw-r--r--binutils/ChangeLog15
-rw-r--r--binutils/bfdtest1.c4
-rw-r--r--binutils/config.in8
-rwxr-xr-xbinutils/configure28
-rw-r--r--binutils/configure.in10
-rw-r--r--binutils/readelf.c51
-rw-r--r--elfcpp/ChangeLog4
-rw-r--r--elfcpp/arm.h10
-rw-r--r--gas/doc/as.texinfo5
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/arm.cc22
-rw-r--r--include/elf/ChangeLog7
-rw-r--r--include/elf/arm.h5
-rw-r--r--ld/testsuite/ChangeLog10
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp15
19 files changed, 220 insertions, 19 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d846f635fc..56b40c5ffa 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,7 +1,14 @@
+2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ * 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 <yao@codesourcery.com>
H.J. Lu <hongjiu.lu@intel.com>
- * 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 b8d82b1b7f..aa78ecd1f4 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 633bb648a7..fefc7db0c1 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 f22e023df8..2fcbac3e06 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 8286e5a069..c814959074 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,18 @@
+2012-10-30 Nick Clifton <nickc@redhat.com>
+
+ 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 <steve.mcintyre@linaro.org>
+
+ * 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 <amodra@gmail.com>
* dlltool.c (INIT_SEC_DATA): Move.
diff --git a/binutils/bfdtest1.c b/binutils/bfdtest1.c
index b246a045a4..eaee2fdf95 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>");
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 4ed54e9c3c..bcabbba791 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 <locale.h> 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 <memory.h> 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 <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
/* Define to 1 if you have the <zlib.h> header file. */
#undef HAVE_ZLIB_H
diff --git a/binutils/configure b/binutils/configure
index 25f9360fce..7c162ad706 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 <wchar.h>
+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 a21e85d788..e9852de44f 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 <wchar.h>],
+ [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 b4f9f4e598..399402dd4a 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -48,7 +48,9 @@
#ifdef HAVE_ZLIB_H
#include <zlib.h>
#endif
+#ifdef HAVE_WCHAR_H
#include <wchar.h>
+#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 853fa835be..a6d658979b 100644
--- a/elfcpp/ChangeLog
+++ b/elfcpp/ChangeLog
@@ -1,3 +1,7 @@
+2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ * arm.h: New enum for EABI soft- and hard-float flags.
+
2012-09-15 Jiong Wang <jiwang@tilera.com>
* tilegx.h: New file.
diff --git a/elfcpp/arm.h b/elfcpp/arm.h
index cb85eeb42e..ab0618a3d6 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 <dougkwan@google.com>.
// 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 741783a342..67233f0276 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 57c7cc3cff..60e2d4961b 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ * 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 <ccoutant@google.com>
* dwp.cc (usage): Add file and exit status parameters;
diff --git a/gold/arm.cc b/gold/arm.cc
index d847126570..5770c8a439 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<big_endian>(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<bool big_endian>
void
Target_arm<big_endian>::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<big_endian>::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 c75e2ff7e8..ef17f374be 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,8 @@
+2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ * elf/arm.h (EF_ARM_ABI_FLOAT_SOFT): New define.
+ (EF_ARM_ABI_FLOAT_HARD): Likewise.
+
2012-10-23 Tom Tromey <tromey@redhat.com>
* 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 <ian.bolton@arm.com>
Laurent Desnogues <laurent.desnogues@arm.com>
Jim MacArthur <jim.macarthur@arm.com>
diff --git a/include/elf/arm.h b/include/elf/arm.h
index 8ea3fe8810..d79930380e 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 f7975e449d..3357d94504 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2012-10-30 Steve McIntyre <steve.mcintyre@linaro.org>
+
+ * 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 <amodra@gmail.com>
* 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 8e15ffe508..81ee0bd16c 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 {