diff options
author | Alan Modra <amodra@gmail.com> | 2008-08-17 03:12:50 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2008-08-17 03:12:50 +0000 |
commit | 5c1d2f5f4c7747c36eae8be3abd4ef4e9669690c (patch) | |
tree | 3be4145ee7086fe0315ad0ce506626b5ca560759 /ld/ldcref.c | |
parent | 1f5064de53c27d99fb92efd65a6785e2f1ec0835 (diff) | |
download | gdb-5c1d2f5f4c7747c36eae8be3abd4ef4e9669690c.zip gdb-5c1d2f5f4c7747c36eae8be3abd4ef4e9669690c.tar.gz gdb-5c1d2f5f4c7747c36eae8be3abd4ef4e9669690c.tar.bz2 |
bfd/
* bfd.c (struct _bfd): Correct outsymbols comment.
* bfd-in2.h: Regenerate.
* linker.c (bfd_generic_link_read_symbols): Renamed from..
(generic_link_read_symbols): ..this, and made global.
include/
* bfdlink.h (bfd_generic_link_read_symbols): Declare.
ld/
PR 6478
* ldcref.c (check_local_sym_xref): Use bfd_generic_link_read_symbols.
Don't free symbol pointer array.
(check_refs): Likewise.
* ldmain.c (warning_callback): Likewise.
* ldmisc.c (vfinfo): Likewise.
* pe-dll.c (process_def_file): Likewise.
(pe_walk_relocs_of_symbol, generate_reloc): Likewise.
* emultempl/pe.em (pe_find_data_imports): Likewise.
(gld_${EMULATION_NAME}_after_open): Likewise.
* emultempl/pep.em (pep_find_data_imports): Likewise.
(gld_${EMULATION_NAME}_after_open): Likewise.
* ldlang.h (lang_input_statement_type): Delete asymbols, symbol_count,
passive_position, closed.
* ldlang.c (new_afile): Don't set asymbols and symbol_count.
* ldmain.c (add_archive_element): xcalloc lang_input_statement_type.
Diffstat (limited to 'ld/ldcref.c')
-rw-r--r-- | ld/ldcref.c | 61 |
1 files changed, 7 insertions, 54 deletions
diff --git a/ld/ldcref.c b/ld/ldcref.c index 890b61c..3fcaafe 100644 --- a/ld/ldcref.c +++ b/ld/ldcref.c @@ -478,36 +478,16 @@ static void check_local_sym_xref (lang_input_statement_type *statement) { bfd *abfd; - lang_input_statement_type *li; - asymbol **asymbols, **syms; + asymbol **syms; abfd = statement->the_bfd; if (abfd == NULL) return; - li = abfd->usrdata; - if (li != NULL && li->asymbols != NULL) - asymbols = li->asymbols; - else - { - long symsize; - long symbol_count; - - symsize = bfd_get_symtab_upper_bound (abfd); - if (symsize < 0) - einfo (_("%B%F: could not read symbols; %E\n"), abfd); - asymbols = xmalloc (symsize); - symbol_count = bfd_canonicalize_symtab (abfd, asymbols); - if (symbol_count < 0) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); - if (li != NULL) - { - li->asymbols = asymbols; - li->symbol_count = symbol_count; - } - } + if (!bfd_generic_link_read_symbols (abfd)) + einfo (_("%B%F: could not read symbols: %E\n"), abfd); - for (syms = asymbols; *syms; ++syms) + for (syms = bfd_get_outsymbols (abfd); *syms; ++syms) { asymbol *sym = *syms; if (sym->flags & (BSF_GLOBAL | BSF_WARNING | BSF_INDIRECT | BSF_FILE)) @@ -529,9 +509,6 @@ check_local_sym_xref (lang_input_statement_type *statement) check_refs (symname, FALSE, sym->section, abfd, ncrs); } } - - if (li == NULL) - free (asymbols); } /* Check one symbol to see if it is a prohibited cross reference. */ @@ -597,8 +574,6 @@ check_refs (const char *name, bfd *abfd, struct lang_nocrossrefs *ncrs) { - lang_input_statement_type *li; - asymbol **asymbols; struct check_refs_info info; /* We need to look through the relocations for this BFD, to see @@ -607,37 +582,15 @@ check_refs (const char *name, the BFD in which the symbol is defined, since even a single BFD might contain a prohibited cross reference. */ - li = abfd->usrdata; - if (li != NULL && li->asymbols != NULL) - asymbols = li->asymbols; - else - { - long symsize; - long symbol_count; - - symsize = bfd_get_symtab_upper_bound (abfd); - if (symsize < 0) - einfo (_("%B%F: could not read symbols; %E\n"), abfd); - asymbols = xmalloc (symsize); - symbol_count = bfd_canonicalize_symtab (abfd, asymbols); - if (symbol_count < 0) - einfo (_("%B%F: could not read symbols: %E\n"), abfd); - if (li != NULL) - { - li->asymbols = asymbols; - li->symbol_count = symbol_count; - } - } + if (!bfd_generic_link_read_symbols (abfd)) + einfo (_("%B%F: could not read symbols: %E\n"), abfd); info.sym_name = name; info.global = global; info.defsec = sec; info.ncrs = ncrs; - info.asymbols = asymbols; + info.asymbols = bfd_get_outsymbols (abfd); bfd_map_over_sections (abfd, check_reloc_refs, &info); - - if (li == NULL) - free (asymbols); } /* This is called via bfd_map_over_sections. INFO->SYM_NAME is a symbol |