* 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.
This commit is contained in:
Nick Clifton 2012-10-30 12:44:58 +00:00
parent b1bd052dee
commit 3bfcb6528e
19 changed files with 223 additions and 22 deletions

View File

@ -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.

View File

@ -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. */

View File

@ -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

View File

@ -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))))
{

View File

@ -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.

View File

@ -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))
{

View File

@ -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

28
binutils/configure vendored
View File

@ -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

View File

@ -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)

View File

@ -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,6 @@ 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;
@ -2145,6 +2152,42 @@ decode_ARM_machine_flags (unsigned e_flags, char buf[])
strcat (buf, ", LE8");
break;
default:
unknown = 1;
break;
}
break;
}
break;
case EF_ARM_EABI_VER5:
strcat (buf, ", Version5 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;
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;

View File

@ -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.

View File

@ -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
{

View File

@ -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?}

View File

@ -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;

View File

@ -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);
}

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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 {