aboutsummaryrefslogtreecommitdiff
path: root/gold/object.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gold/object.cc')
-rw-r--r--gold/object.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/gold/object.cc b/gold/object.cc
index 85353cf..73bf370 100644
--- a/gold/object.cc
+++ b/gold/object.cc
@@ -1591,7 +1591,7 @@ Sized_relobj<size, big_endian>::do_count_local_symbols(Stringpool* pool,
++dyncount;
}
- if (discard_all)
+ if (discard_all && lv.may_be_discarded_from_output_symtab())
{
lv.set_no_output_symtab_entry();
continue;
@@ -1612,6 +1612,7 @@ Sized_relobj<size, big_endian>::do_count_local_symbols(Stringpool* pool,
if (discard_locals
&& sym.get_st_type() != elfcpp::STT_FILE
&& !lv.needs_output_dynsym_entry()
+ && lv.may_be_discarded_from_output_symtab()
&& parameters->target().is_local_label_name(name))
{
lv.set_no_output_symtab_entry();
@@ -1774,7 +1775,7 @@ Sized_relobj<size, big_endian>::do_finalize_local_symbols(unsigned int index,
+ lv.input_value());
}
- if (lv.needs_output_symtab_entry())
+ if (!lv.is_output_symtab_index_set())
{
lv.set_output_symtab_index(index);
++index;
@@ -1937,16 +1938,16 @@ Sized_relobj<size, big_endian>::write_local_symbols(
st_shndx = out_sections[st_shndx]->out_shndx();
if (st_shndx >= elfcpp::SHN_LORESERVE)
{
- if (lv.needs_output_symtab_entry() && !strip_all)
+ if (lv.has_output_symtab_entry())
symtab_xindex->add(lv.output_symtab_index(), st_shndx);
- if (lv.needs_output_dynsym_entry())
+ if (lv.has_output_dynsym_entry())
dynsym_xindex->add(lv.output_dynsym_index(), st_shndx);
st_shndx = elfcpp::SHN_XINDEX;
}
}
// Write the symbol to the output symbol table.
- if (!strip_all && lv.needs_output_symtab_entry())
+ if (lv.has_output_symtab_entry())
{
elfcpp::Sym_write<size, big_endian> osym(ov);
@@ -1963,7 +1964,7 @@ Sized_relobj<size, big_endian>::write_local_symbols(
}
// Write the symbol to the output dynamic symbol table.
- if (lv.needs_output_dynsym_entry())
+ if (lv.has_output_dynsym_entry())
{
gold_assert(dyn_ov < dyn_oview + dyn_output_size);
elfcpp::Sym_write<size, big_endian> osym(dyn_ov);