aboutsummaryrefslogtreecommitdiff
path: root/gold/resolve.cc
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2017-08-29 15:52:45 +0930
committerAlan Modra <amodra@gmail.com>2017-08-29 21:29:37 +0930
commit34ca2bd7ace5e208d46fea6e7a56a5376de0abfe (patch)
treee94fa309fc1b405d885c17c8d230d243334f50b0 /gold/resolve.cc
parentf2d394fce1f37a07148719c4bc919ca7b7a0b025 (diff)
downloadbinutils-34ca2bd7ace5e208d46fea6e7a56a5376de0abfe.zip
binutils-34ca2bd7ace5e208d46fea6e7a56a5376de0abfe.tar.gz
binutils-34ca2bd7ace5e208d46fea6e7a56a5376de0abfe.tar.bz2
[GOLD] Reduce size of class Symbol
On 64-bit targets there is a 32-bit hole in symbol->u_, and another due to symbol flags exceeding 32 bits. By splitting the union, the total size of the class reduces by one 64-bit word. * symtab.h (Symbol): Split u_ into u1_ and u2_. Adjust accessors to suit. Move plt_offset_ before got_offsets_. * symtab.cc (Symbol::init_fields): Adjust for union change. (Symbol::init_base_output_data): Likewise. (Symbol::init_base_output_segment): Likewise. (Symbol::allocate_base_common): Likewise. (Symbol::output_section): Likewise. (Symbol::set_output_section): Likewise. (Symbol::set_output_segment): Likewise. * resolve.cc (Symbol::override_base): Likewise. (Symbol::override_base_with_special): Likewise.
Diffstat (limited to 'gold/resolve.cc')
-rw-r--r--gold/resolve.cc11
1 files changed, 4 insertions, 7 deletions
diff --git a/gold/resolve.cc b/gold/resolve.cc
index 7c22606..042d032 100644
--- a/gold/resolve.cc
+++ b/gold/resolve.cc
@@ -92,9 +92,9 @@ Symbol::override_base(const elfcpp::Sym<size, big_endian>& sym,
Object* object, const char* version)
{
gold_assert(this->source_ == FROM_OBJECT);
- this->u_.from_object.object = object;
+ this->u1_.object = object;
this->override_version(version);
- this->u_.from_object.shndx = st_shndx;
+ this->u2_.shndx = st_shndx;
this->is_ordinary_shndx_ = is_ordinary;
// Don't override st_type from plugin placeholder symbols.
if (object->pluginobj() == NULL)
@@ -952,13 +952,10 @@ Symbol::override_base_with_special(const Symbol* from)
switch (from->source_)
{
case FROM_OBJECT:
- this->u_.from_object = from->u_.from_object;
- break;
case IN_OUTPUT_DATA:
- this->u_.in_output_data = from->u_.in_output_data;
- break;
case IN_OUTPUT_SEGMENT:
- this->u_.in_output_segment = from->u_.in_output_segment;
+ this->u1_ = from->u1_;
+ this->u2_ = from->u2_;
break;
case IS_CONSTANT:
case IS_UNDEFINED: