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/pe-dll.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/pe-dll.c')
-rw-r--r-- | ld/pe-dll.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/ld/pe-dll.c b/ld/pe-dll.c index c6c656a..ea84999 100644 --- a/ld/pe-dll.c +++ b/ld/pe-dll.c @@ -615,11 +615,16 @@ process_def_file (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) for (b = info->input_bfds; b; b = b->link_next) { asymbol **symbols; - int nsyms, symsize; + int nsyms; - symsize = bfd_get_symtab_upper_bound (b); - symbols = xmalloc (symsize); - nsyms = bfd_canonicalize_symtab (b, symbols); + if (!bfd_generic_link_read_symbols (b)) + { + einfo (_("%B%F: could not read symbols: %E\n"), b); + return; + } + + symbols = bfd_get_outsymbols (b); + nsyms = bfd_get_symcount (b); for (j = 0; j < nsyms; j++) { @@ -1141,11 +1146,16 @@ pe_walk_relocs_of_symbol (struct bfd_link_info *info, for (b = info->input_bfds; b; b = b->link_next) { asymbol **symbols; - int nsyms, symsize; + int nsyms; - symsize = bfd_get_symtab_upper_bound (b); - symbols = xmalloc (symsize); - nsyms = bfd_canonicalize_symtab (b, symbols); + if (!bfd_generic_link_read_symbols (b)) + { + einfo (_("%B%F: could not read symbols: %E\n"), b); + return; + } + + symbols = bfd_get_outsymbols (b); + nsyms = bfd_get_symcount (b); for (s = b->sections; s; s = s->next) { @@ -1215,7 +1225,7 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info) { bfd_vma sec_vma = s->output_section->vma + s->output_offset; asymbol **symbols; - int nsyms, symsize; + int nsyms; /* If it's not loaded, we don't need to relocate it this way. */ if (!(s->output_section->flags & SEC_LOAD)) @@ -1235,10 +1245,14 @@ generate_reloc (bfd *abfd, struct bfd_link_info *info) continue; } - symsize = bfd_get_symtab_upper_bound (b); - symbols = xmalloc (symsize); - nsyms = bfd_canonicalize_symtab (b, symbols); + if (!bfd_generic_link_read_symbols (b)) + { + einfo (_("%B%F: could not read symbols: %E\n"), b); + return; + } + symbols = bfd_get_outsymbols (b); + nsyms = bfd_get_symcount (b); relsize = bfd_get_reloc_upper_bound (b, s); relocs = xmalloc (relsize); nrelocs = bfd_canonicalize_reloc (b, s, relocs, symbols); |