diff options
author | Cary Coutant <ccoutant@gmail.com> | 2017-11-30 13:44:28 -0800 |
---|---|---|
committer | Cary Coutant <ccoutant@gmail.com> | 2017-11-30 15:08:21 -0800 |
commit | e0feb133429709603eeeb382c1ebb6edd0a886aa (patch) | |
tree | 376441e0041c25f2cbf68b53778c64c4b1dc0ed1 /gold/ChangeLog | |
parent | 036aae79303c43c56b604bc215ce4a70fc2a6474 (diff) | |
download | gdb-e0feb133429709603eeeb382c1ebb6edd0a886aa.zip gdb-e0feb133429709603eeeb382c1ebb6edd0a886aa.tar.gz gdb-e0feb133429709603eeeb382c1ebb6edd0a886aa.tar.bz2 |
Fix problem where erratum stubs are not always applied.
I checked over the results of applying --fix-cortex-a53-843419 to
a very large program (gitit) with two stub tables and thousands
of erratum fixes. I noticed that all the erratum_stubs were being
created but about 1/3 of them were being skipped over by
fix_errata_and_relocate_erratum_stubs(). By skipped over I mean
no branch relocation or adrp -> adr transformation was applied to
the erratum address, leaving the erratum_stub unreachable, and
with a branch with a 0 immediate.
The root cause of the skipped over erratum_stubs is
Erratum_stub::invalidate_erratum_stub() that is used to set
relobj_ to NULL when an erratum_stub has been processed.
Unfortunately relobj_ is used in operator<() so altering relobj
makes the results from erratum_stubs_.lower_bound() as used in
find_erratum_stubs_for_input_section() unreliable.
2017-11-30 Peter Smith <peter.smith@linaro.org>
Cary Coutant <ccoutant@gmail.com>
gold/
PR gold/20765
* aarch64.cc (Erratum_stub::invalidate_erratum_stub): Use erratum_insn_
instead of relobj_ to invalidate the stub.
(Erratum_stub::is_invalidated_erratum_stub): Likewise.
Diffstat (limited to 'gold/ChangeLog')
-rw-r--r-- | gold/ChangeLog | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog index 49853f5..1245da5 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,4 +1,12 @@ 2017-11-30 Peter Smith <peter.smith@linaro.org> + Cary Coutant <ccoutant@gmail.com> + + PR gold/20765 + * aarch64.cc (Erratum_stub::invalidate_erratum_stub): Use erratum_insn_ + instead of relobj_ to invalidate the stub. + (Erratum_stub::is_invalidated_erratum_stub): Likewise. + +2017-11-30 Peter Smith <peter.smith@linaro.org> PR gold/22233 * aarch64.cc (AArch64_relobj::fix_errata_and_relocate_erratum_stubs): |