diff options
Diffstat (limited to 'gold/arm.cc')
-rw-r--r-- | gold/arm.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/gold/arm.cc b/gold/arm.cc index c9e730b..036160f 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -4935,21 +4935,17 @@ template<bool big_endian> void Arm_input_section<big_endian>::set_final_data_size() { - // If this owns a stub table, finalize its data size as well. + off_t off = convert_types<off_t, uint64_t>(this->original_size_); + if (this->is_stub_table_owner()) { - uint64_t address = this->address(); - // The stub table comes after the original section contents. - address += this->original_size_; - address = align_address(address, this->stub_table_->addralign()); - off_t offset = this->offset() + (address - this->address()); - this->stub_table_->set_address_and_file_offset(address, offset); - address += this->stub_table_->data_size(); - gold_assert(address == this->address() + this->current_data_size()); + off = align_address(off, this->stub_table_->addralign()); + this->stub_table_->set_address_and_file_offset(this->address() + off, + this->offset() + off); + off += this->stub_table_->data_size(); } - - this->set_data_size(this->current_data_size()); + this->set_data_size(off); } // Reset address and file offset. |