aboutsummaryrefslogtreecommitdiff
path: root/gold/symtab.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gold/symtab.cc')
-rw-r--r--gold/symtab.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/gold/symtab.cc b/gold/symtab.cc
index a7edbb1..5ce5c31 100644
--- a/gold/symtab.cc
+++ b/gold/symtab.cc
@@ -80,6 +80,7 @@ Symbol::init_fields(const char* name, const char* version,
this->undef_binding_set_ = false;
this->undef_binding_weak_ = false;
this->is_predefined_ = false;
+ this->is_protected_ = false;
}
// Return the demangled version of the symbol's name, but only
@@ -1610,6 +1611,13 @@ Symbol_table::add_from_dynobj(
&& res->object() == dynobj)
object_symbols.push_back(res);
+ // If the symbol has protected visibility in the dynobj,
+ // mark it as such if it was not overridden.
+ if (res->source() == Symbol::FROM_OBJECT
+ && res->object() == dynobj
+ && sym.get_st_visibility() == elfcpp::STV_PROTECTED)
+ res->set_is_protected();
+
if (sympointers != NULL)
(*sympointers)[i] = res;
}