bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/20765] [2.27 Regression] gold internal error in fix_errata on


From: peter.smith at linaro dot org
Subject: [Bug gold/20765] [2.27 Regression] gold internal error in fix_errata on aarch64-linux-gnu
Date: Thu, 30 Nov 2017 10:44:22 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=20765

Peter Smith <peter.smith at linaro dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |peter.smith at linaro dot org

--- Comment #3 from Peter Smith <peter.smith at linaro dot org> ---
I have done some investigation and I think I have a fix for this PR. There are
2 separate problems with the --fix-cortex-a53-843419 shown up by the gitit
build:
- Internal fault when the address of erratum stubs is modified by the addition
of stubs earlier in the output section, or previous output section.
- Some erratum stubs are created but are not found, and hence skipped over, by
fix_errata_and_relocate_erratum_stubs(). The root cause of this problem is that
invalidate_erratum_stub() sets relobj_ to NULL. Unfortunately relobj is used in
operator<() so the results of erratum_stubs_.lower_bound(), as used in
find_erratum_stubs_for_input_section() are not reliable. 

The former can be exposed with a linker script or a very large test case such
as gitit (requires 2 stub tables for the .text section). The latter is more
likely to show up more when there are large numbers of erratum stubs, but in
principle could happen in smaller examples so is more serious.

I'll attach a couple of patches to address each of the problems. The first runs
at the start of scan_errata(), it goes through each of the errata that have
already been created on previous patches and updates each stub with its new
erratum_address and destination_address. The second adds a new field valid_
that is not used in operator<() so it can be safely changed by
invalidate_erratum_stub().

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]