diff options
author | Nick Clifton <nickc@redhat.com> | 1999-12-10 01:41:22 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 1999-12-10 01:41:22 +0000 |
commit | ad247e3c7de719151c02516afc9c682a32a181cc (patch) | |
tree | 9bbb9e72bbacd188c81701ec1148e0e45e5bf187 /bfd/elflink.h | |
parent | c7d85a8d921dafd1c9eb0f132977427d3d107226 (diff) | |
download | gdb-ad247e3c7de719151c02516afc9c682a32a181cc.zip gdb-ad247e3c7de719151c02516afc9c682a32a181cc.tar.gz gdb-ad247e3c7de719151c02516afc9c682a32a181cc.tar.bz2 |
Change AR for ELF so that common symbols are not included in archive map.
Change LD for ELF so that archive elements whoes archive map contains a
reference to a common symbol will get linkled in.
Add new field to bfd_target structure and initialise it for all bfd targets.
Diffstat (limited to 'bfd/elflink.h')
-rw-r--r-- | bfd/elflink.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/bfd/elflink.h b/bfd/elflink.h index ab679a7..2a8c3db 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -200,7 +200,26 @@ elf_link_add_archive_symbols (abfd, info) if (h == NULL) continue; - if (h->root.type != bfd_link_hash_undefined) + /* We have changed the GNU archiver so that it will only place + non-common symbols into its archive map. Thus if we come across + a symbol in the archive map, which is currently considered to be + a common symbol, we can safely assume that we should link the + element in, in order to get in the definition of the symbol. + + Previous versions of the archiver would place common symbols into + the archive map. This meant that in order to only link in an + element if it contained a *definition* of a common symbol, it + would be necessary to read in the element and scan its symbol + table - a slow and wasteful process. + + In fact previous versions of this code did not even do that, + instead it just unilaterally ignored any symbols in the archive + map which were currently marked as common. So in order to link + in an archive element containing the definition of a common + symbol it was necessary to have that element also contain the + defintion of a currently undefined symbol. */ + if (h->root.type != bfd_link_hash_undefined + && h->root.type != bfd_link_hash_common) { if (h->root.type != bfd_link_hash_undefweak) defined[i] = true; |