Rework the R_NEG support on both gas and ld for the PowerPC AIX targets, in order...
authorCl?ment Chigot <clement.chigot@atos.net>
Tue, 20 Apr 2021 13:40:43 +0000 (14:40 +0100)
committerNick Clifton <nickc@redhat.com>
Tue, 20 Apr 2021 13:40:43 +0000 (14:40 +0100)
commitc5df7e442e6cdc9303b7373842370d6ee8f67ea5
tree28e1442062fdbb13b5c46d98ceeba9c556e6f3b0
parentd549b029d6d622af531211ef4c7bc48cb5011d93
Rework the R_NEG support on both gas and ld for the PowerPC AIX targets, in order to manage C++ exceptions built with GCC.

bfd PR binutils/21700
* reloc.c (BFD_RELOC_PPC_NEG): New relocation.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
* coff-rs6000.c (_bfd_xcoff_reloc_type_lookup): Add
BFD_RELOC_PPC_NEG handler.
(xcoff_reloc_type_neg): Correctly substract addend.
* coff64-rs6000.c (xcoff64_howto_table): Add R_NEG_32
howto.
(xcoff64_rtype2howto): Add handler for R_NEG_32.
(xcoff64_reloc_type_lookup): Add BFD_RELOC_PPC_NEG handler.
* xcofflink.c (xcoff_need_ldrel_p): Check output section
for R_POS-like relocations. New argument added.
(xcoff_mark): Adapt to new xcoff_need_ldrel_p argument.
(xcoff_link_input_bfd): Likewise.

gas * config/tc-ppc.c (ppc_get_csect_to_adjust): New function.
(ppc_fix_adjustable): Manage fx_subsy part.
(tc_gen_reloc): Create second relocation when both
fx_addsy and fx_subsy are provided.
* config/tc-ppc.h (RELOC_EXPANSION_POSSIBLE): New define.
(MAX_RELOC_EXPANSION): Likewise.
(TC_FORCE_RELOCATION_SUB_SAME): Likewise
(UNDEFINED_DIFFERENCE_OK): Likewise
* testsuite/gas/all/gas.exp: Skip difference between two
undefined symbols test.

ld * testsuite/ld-powerpc/aix52.exp: Add new test.
* testsuite/ld-powerpc/aix-neg-reloc-32.d: New test.
* testsuite/ld-powerpc/aix-neg-reloc-64.d: New test.
* testsuite/ld-powerpc/aix-neg-reloc.ex: New test.
* testsuite/ld-powerpc/aix-neg-reloc.s: New test.
16 files changed:
bfd/ChangeLog
bfd/bfd-in2.h
bfd/coff-rs6000.c
bfd/coff64-rs6000.c
bfd/libbfd.h
bfd/reloc.c
bfd/xcofflink.c
gas/ChangeLog
gas/config/tc-ppc.c
gas/config/tc-ppc.h
ld/ChangeLog
ld/testsuite/ld-powerpc/aix-neg-reloc-32.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-neg-reloc-64.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-neg-reloc.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-neg-reloc.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix52.exp