summaryrefslogtreecommitdiff
path: root/bfd/archive.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>1999-12-10 01:41:22 +0000
committerNick Clifton <nickc@redhat.com>1999-12-10 01:41:22 +0000
commit187eccd48087c785f20d9ef70979843ead9e59f0 (patch)
tree4223511bfa4407acc66f41044f4456b8d4758f42 /bfd/archive.c
parent217a83bbe99aa0b928070e7cc4ad510b92c31f54 (diff)
downloadgdb-187eccd48087c785f20d9ef70979843ead9e59f0.tar.gz
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/archive.c')
-rw-r--r--bfd/archive.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/bfd/archive.c b/bfd/archive.c
index 19293af4573..3390a1c2635 100644
--- a/bfd/archive.c
+++ b/bfd/archive.c
@@ -1804,16 +1804,19 @@ _bfd_compute_and_write_armap (arch, elength)
{
flagword flags = (syms[src_count])->flags;
asection *sec = syms[src_count]->section;
+ size_t namelen;
+ struct orl *new_map;
- if ((flags & BSF_GLOBAL ||
- flags & BSF_WEAK ||
- flags & BSF_INDIRECT ||
- bfd_is_com_section (sec))
- && ! bfd_is_und_section (sec))
+ if (bfd_is_und_section (sec))
+ continue;
+ else if (bfd_is_com_section (sec))
{
- size_t namelen;
- struct orl *new_map;
-
+ if (! bfd_allow_commons_in_armap (arch))
+ continue;
+ }
+ else if ((flags & (BSF_GLOBAL | BSF_WEAK | BSF_INDIRECT)) == 0)
+ continue;
+
/* This symbol will go into the archive header */
if (orl_count == orl_max)
{
@@ -1842,7 +1845,6 @@ _bfd_compute_and_write_armap (arch, elength)
stridx += namelen + 1;
++orl_count;
- }
}
}