From 153e7da4fc01a28171a44f5538a80e8cc29e1818 Mon Sep 17 00:00:00 2001
From: Doug Kwan <dougkwan@google.com>
Date: Tue, 13 Apr 2010 20:37:55 +0000
Subject: [PATCH] 2010-04-13  Doug Kwan  <dougkwan@google.com>

	* arm.cc (Arm_input_section::set_final_data_size): Compute
	accurate final data size instead of using current data size.
---
 gold/ChangeLog |  5 +++++
 gold/arm.cc    | 18 +++++++-----------
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/gold/ChangeLog b/gold/ChangeLog
index 123cbb95bfa..0fd5fde05d0 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-13  Doug Kwan  <dougkwan@google.com>
+
+	* arm.cc (Arm_input_section::set_final_data_size): Compute
+	accurate final data size instead of using current data size.
+
 2010-04-09  Doug Kwan  <dougkwan@google.com>
 
 	* layout.cc (Layout::choose_output_section): Handle script section
diff --git a/gold/arm.cc b/gold/arm.cc
index c9e730b5359..036160fc771 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.