diff options
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/config.bfd | 8 | ||||
-rw-r--r-- | binutils/ChangeLog | 17 | ||||
-rw-r--r-- | binutils/objcopy.c | 33 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/objcopy.exp | 21 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/readelf.exp | 10 | ||||
-rw-r--r-- | binutils/testsuite/binutils-all/update-section.exp | 1 | ||||
-rw-r--r-- | binutils/testsuite/lib/binutils-common.exp | 30 |
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. # |