git: binutils227: Backport binutils commit 033bfb739b52

Antonio Huete Jimenez tuxillo at crater.dragonflybsd.org
Tue Sep 15 16:42:20 PDT 2020


commit 729a55e1f0f814d77d42f5db97fc6334f90ed577
Author: Antonio Huete Jimenez <tuxillo at quantumachine.net>
Date:   Sun Sep 13 14:54:04 2020 +0000

    binutils227: Backport binutils commit 033bfb739b52
    
     - In DPorts, lang/ghc 'configure' phase was failing with this message:
    
          checking for ld.gold object merging bug (binutils 22266)... Abort trap
          (core dumped) affected
          configure: error: Linker is affected by binutils 22266 but couldn't find
          another unaffected linker. Please set the SettingsMergeObjectsCommand
          variable to a functional linker.
          ===>  Script "configure" failed unexpectedly.
     - https://lists.gnu.org/archive/html/bug-binutils/2017-11/msg00042.html
     - https://gitlab.haskell.org/ghc/ghc/-/issues/14328
    
    Tested-with: buildworld+buildkernel+full dsynth run.
    
    --------
    The fix for PR 19291 broke some other cases where -r is used with scripts,
    as reported in PR 22266. The original fix for PR 22266 ended up breaking
    many cases for REL targets, where the addends are stored in the section data,
    and are not being adjusted properly.
    
    The problem was basically that in a relocatable output file (ET_REL),
    symbol values are supposed to be relative to the start address of their
    section. Usually in a relocatable file, all sections start at 0, so the
    failure to get this right is often irrelevant, but with a linker script,
    we occasionally see an output section whose starting address is not 0,
    and gold would occasionally write a symbol with its relocated value instead
    of its section-relative value.
    
    This patch reverts the recent fix for PR 22266 as well as my original fix
    for PR 19291. The original fix moved the symbol value adjustment to
    write_local_symbols, but neglected to undo a few places where the adjustment
    was also being applied, resulting in an occasional double adjustment. The
    more recent fix removed those other adjustments, but then failed to
    re-account for the adjustment when rewriting the relocations on REL targets.
    
    With the old attempts reverted, we now apply the symbol value adjustment to
    the one case that had been missed (non-section symbols in merge sections).
    But now we also need to account for the adjustment when rewriting the addends
    for RELA relocations.
    
    gold/
    PR gold/19291
    PR gold/22266
    * object.cc (Sized_relobj_file::compute_final_local_value_internal):
    Revert changes from 2017-11-08 patch.  Adjust symbol value in
    relocatable links for non-section symbols.
    (Sized_relobj_file::compute_final_local_value): Revert changes from
    2017-11-08 patch.
    (Sized_relobj_file::do_finalize_local_symbols): Likewise.
    (Sized_relobj_file::write_local_symbols): Revert changes from
    2015-11-25 patch.
    * object.h (Sized_relobj_file::compute_final_local_value_internal):
    Revert changes from 2017-11-08 patch.
    * powerpc.cc (Target_powerpc::relocate_relocs): Adjust addend for
    relocatable links.
    * target-reloc.h (relocate_relocs): Adjust addend for relocatable links.
    * testsuite/pr22266_a.c (hello): New function.
    * testsuite/pr22266_main.c (main): Add test for merge sections.
    * testsuite/pr22266_script.t: Add rule for .rodata.
    --------

Summary of changes:
 contrib/binutils-2.27/gold/object.cc      | 42 +++++++++++++++++++------------
 contrib/binutils-2.27/gold/object.h       |  4 ++-
 contrib/binutils-2.27/gold/target-reloc.h | 19 ++++++++++----
 3 files changed, 43 insertions(+), 22 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/729a55e1f0f814d77d42f5db97fc6334f90ed577


-- 
DragonFly BSD source repository


More information about the Commits mailing list