aboutsummaryrefslogtreecommitdiff
path: root/gold
diff options
context:
space:
mode:
authorPeter Smith <peter.smith@linaro.org>2017-11-30 13:30:58 -0800
committerCary Coutant <ccoutant@gmail.com>2017-11-30 15:08:21 -0800
commit036aae79303c43c56b604bc215ce4a70fc2a6474 (patch)
treeeb7187ce6bd00fd1d633ef416b6bdfe122d5de7a /gold
parent4a7e52349807017f9bc09ea25f07924f2ec971b3 (diff)
downloadfsf-binutils-gdb-036aae79303c43c56b604bc215ce4a70fc2a6474.zip
fsf-binutils-gdb-036aae79303c43c56b604bc215ce4a70fc2a6474.tar.gz
fsf-binutils-gdb-036aae79303c43c56b604bc215ce4a70fc2a6474.tar.bz2
Fix segfault in relocate_erratum_stub on aarch64.
The fix for PR21868 (an internal error when --fix-cortex-a53-843419 is applied) has a small mistake in it. When the stub_owner section needs an erratum fix an incorrect address for the stubs for the section is given to relocate_erratum_stub. If we are lucky we will get a segfault; if we aren't, an incorrect patch or data corruption is possible. The error is visible in PR21868, but the side-effects aren't fatal. gold/ PR gold/22233 * aarch64.cc (AArch64_relobj::fix_errata_and_relocate_erratum_stubs): Fix calculation of stub address.
Diffstat (limited to 'gold')
-rw-r--r--gold/ChangeLog6
-rw-r--r--gold/aarch64.cc2
2 files changed, 7 insertions, 1 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index b0014d3..49853f5 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2017-11-30 Peter Smith <peter.smith@linaro.org>
+
+ PR gold/22233
+ * aarch64.cc (AArch64_relobj::fix_errata_and_relocate_erratum_stubs):
+ Fix calculation of stub address.
+
2017-11-29 Stefan Stroe <stroestefan@gmail.com>
* po/Make-in (datadir): Define as @datadir@.
diff --git a/gold/aarch64.cc b/gold/aarch64.cc
index 4c6e920..02fabb7 100644
--- a/gold/aarch64.cc
+++ b/gold/aarch64.cc
@@ -2041,7 +2041,7 @@ AArch64_relobj<size, big_endian>::fix_errata_and_relocate_erratum_stubs(
// executed.
stub_table->relocate_erratum_stub(
stub,
- pview.view + view_offset + (stub_table->address() - pview.address));
+ pview.view + (stub_table->address() - pview.address));
// Next erratum stub.
++p;