aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/mips.cc19
2 files changed, 15 insertions, 10 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 0e6ec0c..c1776b5 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-05 James Cowgill <james.cowgill@mips.com>
+
+ PR gold/22770
+ * mips.cc (Mips_got_info::record_got_page_entry): Fetch existing
+ page entries for the object's GOT.
+
2018-04-05 Alan Modra <amodra@gmail.com>
* powerpc.cc (Target_powerpc::make_brlt_section): Make .branch_lt relro.
diff --git a/gold/mips.cc b/gold/mips.cc
index ee2c037..5d0ae73 100644
--- a/gold/mips.cc
+++ b/gold/mips.cc
@@ -5795,13 +5795,14 @@ Mips_got_info<size, big_endian>::record_got_page_entry(
this->got_page_entries_.insert(entry);
// Add the same entry to the OBJECT's GOT.
- Got_page_entry* entry2 = NULL;
+ Got_page_entry* entry2 = new Got_page_entry(*entry);
Mips_got_info<size, big_endian>* g2 = object->get_or_create_got_info();
- if (g2->got_page_entries_.find(entry) == g2->got_page_entries_.end())
- {
- entry2 = new Got_page_entry(*entry);
- g2->got_page_entries_.insert(entry2);
- }
+ typename Got_page_entry_set::iterator it2 =
+ g2->got_page_entries_.find(entry);
+ if (it2 != g2->got_page_entries_.end())
+ entry2 = *it2;
+ else
+ g2->got_page_entries_.insert(entry2);
// Skip over ranges whose maximum extent cannot share a page entry
// with ADDEND.
@@ -5822,8 +5823,7 @@ Mips_got_info<size, big_endian>::record_got_page_entry(
*range_ptr = range;
++entry->num_pages;
- if (entry2 != NULL)
- ++entry2->num_pages;
+ ++entry2->num_pages;
++this->page_gotno_;
++g2->page_gotno_;
return;
@@ -5852,8 +5852,7 @@ Mips_got_info<size, big_endian>::record_got_page_entry(
if (old_pages != new_pages)
{
entry->num_pages += new_pages - old_pages;
- if (entry2 != NULL)
- entry2->num_pages += new_pages - old_pages;
+ entry2->num_pages += new_pages - old_pages;
this->page_gotno_ += new_pages - old_pages;
g2->page_gotno_ += new_pages - old_pages;
}