From b560e2acdd41fe6b6228b11c2d82ad2a96188153 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 1 Dec 2015 11:40:25 +1030 Subject: [PATCH] Don't use BFD_TRADITIONAL_FORMAT flag in COFF support info->traditional_format is available, or can be easily made available. This relegates BFD_TRADITIONAL_FORMAT to AOUT use only. * coff-rs6000.c (_bfd_xcoff_put_symbol_name): Replace abfd param with info param. Test info->traditional_format rather than BFD_TRADITIONAL_FORMAT flag. * coff64-rs6000.c (_bfd_xcoff64_put_symbol_name): Likewise. * libxcoff.h (struct xcoff_backend_data_rec): Update _xcoff_put_symbol_name prototype. (bfd_xcoff_put_symbol_name): Add info param. * xcofflink.c (xcoff_find_tc0): Update bfd_xcoff_put_symbol_name call. (xcoff_write_global_symbol): Likewise. (xcoff_link_input_bfd): Test info->traditional_format rather than BFD_TRADITIONAL_FORMAT flag. * cofflink.c (_bfd_coff_final_link): Likewise. (_bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): Likewise. --- bfd/ChangeLog | 16 ++++++++++++++++ bfd/coff-rs6000.c | 7 +++---- bfd/coff64-rs6000.c | 12 +++++------- bfd/cofflink.c | 8 ++++---- bfd/libxcoff.h | 8 ++++---- bfd/xcofflink.c | 12 +++++++----- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index bebe839f7e..eb5cf11441 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,19 @@ +2015-12-01 Alan Modra + + * coff-rs6000.c (_bfd_xcoff_put_symbol_name): Replace abfd param + with info param. Test info->traditional_format rather than + BFD_TRADITIONAL_FORMAT flag. + * coff64-rs6000.c (_bfd_xcoff64_put_symbol_name): Likewise. + * libxcoff.h (struct xcoff_backend_data_rec): Update + _xcoff_put_symbol_name prototype. + (bfd_xcoff_put_symbol_name): Add info param. + * xcofflink.c (xcoff_find_tc0): Update bfd_xcoff_put_symbol_name call. + (xcoff_write_global_symbol): Likewise. + (xcoff_link_input_bfd): Test info->traditional_format rather than + BFD_TRADITIONAL_FORMAT flag. + * cofflink.c (_bfd_coff_final_link): Likewise. + (_bfd_coff_link_input_bfd, _bfd_coff_write_global_sym): Likewise. + 2015-12-01 Alan Modra * po/SRC-POTFILES.in: Regenerate. diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index b7098a1d9c..2269012e4d 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -3523,7 +3523,8 @@ _bfd_xcoff_put_ldsymbol_name (bfd *abfd ATTRIBUTE_UNUSED, } static bfd_boolean -_bfd_xcoff_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, +_bfd_xcoff_put_symbol_name (struct bfd_link_info *info, + struct bfd_strtab_hash *strtab, struct internal_syment *sym, const char *name) { @@ -3536,9 +3537,7 @@ _bfd_xcoff_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, bfd_boolean hash; bfd_size_type indx; - hash = TRUE; - if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0) - hash = FALSE; + hash = !info->traditional_format; indx = _bfd_stringtab_add (strtab, name, hash, FALSE); if (indx == (bfd_size_type) -1) return FALSE; diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index a9da59c400..ab41063079 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -87,7 +87,8 @@ static void _bfd_xcoff64_swap_lineno_in static unsigned int _bfd_xcoff64_swap_lineno_out (bfd *, void *, void *); static bfd_boolean _bfd_xcoff64_put_symbol_name - (bfd *, struct bfd_strtab_hash *, struct internal_syment *, const char *); + (struct bfd_link_info *, struct bfd_strtab_hash *, + struct internal_syment *, const char *); static bfd_boolean _bfd_xcoff64_put_ldsymbol_name (bfd *, struct xcoff_loader_info *, struct internal_ldsym *, const char *); static void _bfd_xcoff64_swap_sym_in @@ -518,18 +519,15 @@ _bfd_xcoff64_swap_aux_out (bfd *abfd, void *inp, int type, int in_class, } static bfd_boolean -_bfd_xcoff64_put_symbol_name (bfd *abfd, struct bfd_strtab_hash *strtab, +_bfd_xcoff64_put_symbol_name (struct bfd_link_info *info, + struct bfd_strtab_hash *strtab, struct internal_syment *sym, const char *name) { bfd_boolean hash; bfd_size_type indx; - hash = TRUE; - - if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0) - hash = FALSE; - + hash = !info->traditional_format; indx = _bfd_stringtab_add (strtab, name, hash, FALSE); if (indx == (bfd_size_type) -1) diff --git a/bfd/cofflink.c b/bfd/cofflink.c index 8d98fec214..13d773aca5 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -906,7 +906,7 @@ _bfd_coff_final_link (bfd *abfd, if (string_size) { - bfd_boolean hash = ! (abfd->flags & BFD_TRADITIONAL_FORMAT); + bfd_boolean hash = !flaginfo.info->traditional_format; bfd_size_type indx; indx = _bfd_stringtab_add (flaginfo.strtab, @@ -1413,7 +1413,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) if (! flaginfo->info->keep_memory) copy = TRUE; hash = TRUE; - if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0) + if (flaginfo->info->traditional_format) hash = FALSE; if (! _bfd_coff_get_external_symbols (input_bfd)) @@ -1591,7 +1591,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *flaginfo, bfd *input_bfd) /* If this is an enum, struct, or union tag, see if we have already output an identical type. */ if (! skip - && (flaginfo->output_bfd->flags & BFD_TRADITIONAL_FORMAT) == 0 + && !flaginfo->info->traditional_format && (isym.n_sclass == C_ENTAG || isym.n_sclass == C_STRTAG || isym.n_sclass == C_UNTAG) @@ -2602,7 +2602,7 @@ _bfd_coff_write_global_sym (struct bfd_hash_entry *bh, void *data) bfd_size_type indx; hash = TRUE; - if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0) + if (flaginfo->info->traditional_format) hash = FALSE; indx = _bfd_stringtab_add (flaginfo->strtab, h->root.root.string, hash, FALSE); diff --git a/bfd/libxcoff.h b/bfd/libxcoff.h index d991dbf373..60872d4987 100644 --- a/bfd/libxcoff.h +++ b/bfd/libxcoff.h @@ -64,8 +64,8 @@ struct xcoff_backend_data_rec unsigned long _xcoff_ldhdr_version; bfd_boolean (* _xcoff_put_symbol_name) - (bfd *, struct bfd_strtab_hash *, struct internal_syment *, - const char *); + (struct bfd_link_info *, struct bfd_strtab_hash *, + struct internal_syment *, const char *); bfd_boolean (* _xcoff_put_ldsymbol_name) (bfd *, struct xcoff_loader_info *, struct internal_ldsym *, @@ -154,8 +154,8 @@ struct xcoff_backend_data_rec #define bfd_xcoff_ldhdr_version(a) ((xcoff_backend (a)->_xcoff_ldhdr_version)) -#define bfd_xcoff_put_symbol_name(a, b, c, d) \ - ((xcoff_backend (a)->_xcoff_put_symbol_name) ((a), (b), (c), (d))) +#define bfd_xcoff_put_symbol_name(a, b, c, d, e) \ + ((xcoff_backend (a)->_xcoff_put_symbol_name) ((b), (c), (d), (e))) #define bfd_xcoff_put_ldsymbol_name(a, b, c, d) \ ((xcoff_backend (a)->_xcoff_put_ldsymbol_name) ((a), (b), (c), (d))) diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index 75977501a8..443ff77022 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -4145,7 +4145,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *flinfo, if (! flinfo->info->keep_memory) copy = TRUE; hash = TRUE; - if ((output_bfd->flags & BFD_TRADITIONAL_FORMAT) != 0) + if (flinfo->info->traditional_format) hash = FALSE; if (! _bfd_coff_get_external_symbols (input_bfd)) @@ -5118,7 +5118,8 @@ xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *flinfo) xcoff_data (output_bfd)->sntoc = section_index; /* Fill out the TC0 symbol. */ - if (!bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab, &irsym, "TOC")) + if (!bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab, + &irsym, "TOC")) return FALSE; irsym.n_value = best_address; irsym.n_scnum = section_index; @@ -5383,7 +5384,8 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) the reloc. */ if (flinfo->info->strip != strip_all) { - result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab, + result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, + flinfo->strtab, &irsym, h->root.root.string); if (!result) return FALSE; @@ -5557,8 +5559,8 @@ xcoff_write_global_symbol (struct bfd_hash_entry *bh, void * inf) h->indx = obj_raw_syment_count (output_bfd); - result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->strtab, &isym, - h->root.root.string); + result = bfd_xcoff_put_symbol_name (output_bfd, flinfo->info, flinfo->strtab, + &isym, h->root.root.string); if (!result) return FALSE; -- 2.34.1