aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/config.bfd8
-rw-r--r--binutils/ChangeLog17
-rw-r--r--binutils/objcopy.c33
-rw-r--r--binutils/testsuite/binutils-all/objcopy.exp21
-rw-r--r--binutils/testsuite/binutils-all/readelf.exp10
-rw-r--r--binutils/testsuite/binutils-all/update-section.exp1
-rw-r--r--binutils/testsuite/lib/binutils-common.exp30
8 files changed, 81 insertions, 44 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index fe19a01..63f92cf 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2016-06-24 Alan Modra <amodra@gmail.com>
+
+ * config.bfd: Delete mips vxworks patterns matched earlier.
+ Combine mips*-*-none with mips*-*-elf*.
+
2016-06-21 Maciej W. Rozycki <macro@imgtec.com>
* elfxx-mips.c (mips_elf_perform_relocation): Call
diff --git a/bfd/config.bfd b/bfd/config.bfd
index 8fef9c4..b998830 100644
--- a/bfd/config.bfd
+++ b/bfd/config.bfd
@@ -1080,15 +1080,11 @@ case "${targ}" in
targ_defvec=mips_elf32_trad_be_vec
targ_selvecs="mips_elf32_trad_le_vec mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
;;
- mips*el-*-elf* | mips*el-*-vxworks* | mips*-*-chorus*)
+ mips*el-*-elf* | mips*-*-chorus*)
targ_defvec=mips_elf32_le_vec
targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
- mips*-*-elf* | mips*-*-rtems* | mips*-*-vxworks | mips*-*-windiss)
- targ_defvec=mips_elf32_be_vec
- targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
- ;;
- mips*-*-none)
+ mips*-*-elf* | mips*-*-rtems* | mips*-*-windiss | mips*-*-none)
targ_defvec=mips_elf32_be_vec
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 757aa98..4f5e225 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,22 @@
2016-06-24 Alan Modra <amodra@gmail.com>
+ * objcopy.c (find_section_rename): Forward declare. Remove
+ ibfd and sec_ptr param. Add old_name param. Allow for NULL
+ returned_flags. Move read of section name and flags to..
+ (setup_section): ..here. Update find_section_rename call.
+ (filter_symbols): Rename section symbols for renamed sections.
+ (copy_object): Call filter_symbols when renamed sections.
+ * testsuite/lib/binutils-common.exp (is_bad_symtab): New.
+ * testsuite/binutils-all/update-section.exp: Revert 96037eb0
+ mips xfail.
+ * testsuite/binutils-all/objcopy.exp (copy_executable): Use
+ is_bad_symtab.
+ (localize-hidden-1): xfail if is_bad_symtab.
+ * testsuite/binutils-all/readelf.exp: Use is_bad_symtab to select
+ between mips/tmips.
+
+2016-06-24 Alan Modra <amodra@gmail.com>
+
* objdump.c (struct print_file_list): Add "max_printed".
(try_print_file_open): Init new field.
(show_line): Don't show 5 context lines when redisplaying source.
diff --git a/binutils/objcopy.c b/binutils/objcopy.c
index 76170cb..4bb625a 100644
--- a/binutils/objcopy.c
+++ b/binutils/objcopy.c
@@ -507,6 +507,7 @@ static int compare_section_lma (const void *, const void *);
static void mark_symbols_used_in_relocations (bfd *, asection *, void *);
static bfd_boolean write_debugging_info (bfd *, void *, long *, asymbol ***);
static const char *lookup_sym_redefinition (const char *);
+static const char *find_section_rename (const char *, flagword *);
static void
copy_usage (FILE *stream, int exit_status)
@@ -1390,12 +1391,14 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms,
to[dst_count++] = create_new_symbol (ptr, obfd);
}
- if (redefine_sym_list)
+ if (redefine_sym_list || section_rename_list)
{
- char *old_name, *new_name;
+ char *new_name;
- old_name = (char *) bfd_asymbol_name (sym);
- new_name = (char *) lookup_sym_redefinition (old_name);
+ new_name = (char *) lookup_sym_redefinition (name);
+ if (new_name == name
+ && (flags & BSF_SECTION_SYM) != 0)
+ new_name = (char *) find_section_rename (name, NULL);
bfd_asymbol_name (sym) = new_name;
name = new_name;
}
@@ -2357,6 +2360,7 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
|| change_leading_char
|| remove_leading_char
|| redefine_sym_list
+ || section_rename_list
|| weaken
|| add_symbols)
{
@@ -2937,24 +2941,19 @@ add_section_rename (const char * old_name, const char * new_name,
}
/* Check the section rename list for a new name of the input section
- ISECTION. Return the new name if one is found.
- Also set RETURNED_FLAGS to the flags to be used for this section. */
+ called OLD_NAME. Returns the new name if one is found and sets
+ RETURNED_FLAGS if non-NULL to the flags to be used for this section. */
static const char *
-find_section_rename (bfd * ibfd ATTRIBUTE_UNUSED, sec_ptr isection,
- flagword * returned_flags)
+find_section_rename (const char *old_name, flagword *returned_flags)
{
- const char * old_name = bfd_section_name (ibfd, isection);
- section_rename * srename;
-
- /* Default to using the flags of the input section. */
- * returned_flags = bfd_get_section_flags (ibfd, isection);
+ const section_rename *srename;
for (srename = section_rename_list; srename != NULL; srename = srename->next)
if (strcmp (srename->old_name, old_name) == 0)
{
- if (srename->flags != (flagword) -1)
- * returned_flags = srename->flags;
+ if (returned_flags != NULL && srename->flags != (flagword) -1)
+ *returned_flags = srename->flags;
return srename->new_name;
}
@@ -3004,7 +3003,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg)
return;
/* Get the, possibly new, name of the output section. */
- name = find_section_rename (ibfd, isection, & flags);
+ name = bfd_section_name (ibfd, isection);
+ flags = bfd_get_section_flags (ibfd, isection);
+ name = find_section_rename (name, &flags);
/* Prefix sections. */
if ((prefix_alloc_sections_string)
diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp
index 94075f0..c33b601 100644
--- a/binutils/testsuite/binutils-all/objcopy.exp
+++ b/binutils/testsuite/binutils-all/objcopy.exp
@@ -652,9 +652,11 @@ proc copy_executable { prog flags test1 test2 } {
setup_xfail "*-*-*"
}
- # This also fails for mips*-*-elf targets. See elf32-mips.c
+ # This also fails for some mips targets. See elf32-mips.c
# mips_elf_sym_is_global.
- setup_xfail "mips*-*-elf" "tx39-*-*"
+ if { [is_bad_symtab] } then {
+ setup_xfail "*-*-*"
+ }
setup_xfail "arm*-*-coff"
setup_xfail "arm*-*-pe"
@@ -1102,18 +1104,9 @@ if [is_elf_format] {
# The symbol table for some MIPS targets is sorted differently than
# the ELF canonical order, so the regexps in localize-hidden-1.d fail
- # to match. These tests must be matched to targets for which
- # targ_defvec=mips_elf32_be_vec,
- # targ_defvec=mips_elf32_le_vec,
- # targ_defvec=mips_elf32_n_be_vec or
- # targ_defvec=mips_elf32_n_le_vec in config.bfd. When syncing,
- # don't forget that earlier case-matches trump later ones.
- if { ![istarget "mips*-sde-elf*"] && ![istarget "mips*-mti-elf*"]
- && ![istarget "mips*-img-elf*"]
- && ![istarget "mips64*-*-openbsd*"] } {
- setup_xfail "mips*-*-irix5*" "mips*-*-irix6*" "mips*-*-elf*" \
- "mips*-*-rtems*" "mips*-*-windiss" "mips*-*-none" \
- "mips*-*-openbsd*" "mips*-*-chorus*"
+ # to match.
+ if { [is_bad_symtab] } then {
+ setup_xfail "*-*-*"
}
run_dump_test "localize-hidden-1"
run_dump_test "testranges"
diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp
index 91d816c..724d63a 100644
--- a/binutils/testsuite/binutils-all/readelf.exp
+++ b/binutils/testsuite/binutils-all/readelf.exp
@@ -100,14 +100,10 @@ proc readelf_test { options binary_file regexp_file xfails } {
set target_machine ""
if [istarget "mips*-*-*"] then {
- if { [istarget "mips*-*-*linux*"]
- || [istarget "mips*-sde-elf*"]
- || [istarget "mips*-mti-elf*"]
- || [istarget "mips*-img-elf*"]
- || [istarget "mips*-*freebsd*"] } then {
- set target_machine tmips
- } else {
+ if [is_bad_symtab] then {
set target_machine mips
+ } else {
+ set target_machine tmips
}
}
diff --git a/binutils/testsuite/binutils-all/update-section.exp b/binutils/testsuite/binutils-all/update-section.exp
index 74772fa..01fe713 100644
--- a/binutils/testsuite/binutils-all/update-section.exp
+++ b/binutils/testsuite/binutils-all/update-section.exp
@@ -99,7 +99,6 @@ if { ![do_objcopy update-1.o \
# Check that the updated object files are as expected.
do_compare update-1.o update-2.o
do_compare update-1.o update-3.o
-setup_xfail "mips*-*-*" "tx39-*-*"
do_compare update-1.o update-4.o
# Check that --update-section on an unknown section will fail.
diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp
index 33a0382..bfe2998 100644
--- a/binutils/testsuite/lib/binutils-common.exp
+++ b/binutils/testsuite/lib/binutils-common.exp
@@ -202,6 +202,36 @@ proc supports_gnu_unique {} {
return 1
}
+# True for targets that do not sort .symtab as per the ELF standard.
+# ie. any that have mips_elf32_be_vec, mips_elf32_le_vec,
+# mips_elf32_n_be_vec or mips_elf32_n_le_vec as the primary bfd target
+# vector in config.bfd. When syncing with config.bfd, don't forget that
+# earlier case-matches trump later ones.
+proc is_bad_symtab {} {
+ if { ![istarget "mips*-*-*"] } {
+ return 0;
+ }
+ if { [istarget "*-*-chorus*"]
+ || [istarget "*-*-irix5*"]
+ || [istarget "*-*-irix6*"]
+ || [istarget "*-*-none"]
+ || [istarget "*-*-rtems*"]
+ || [istarget "*-*-windiss"] } {
+ return 1;
+ }
+ if { [istarget "*-*-elf*"]
+ && ![istarget "*-sde-*"]
+ && ![istarget "*-mti-*"]
+ && ![istarget "*-img-*"] } {
+ return 1;
+ }
+ if { [istarget "*-*-openbsd*"]
+ && ![istarget "mips64*-*-*"] } {
+ return 1;
+ }
+ return 0;
+}
+
# Compare two files line-by-line. FILE_1 is the actual output and FILE_2
# is the expected output. Ignore blank lines in either file.
#