diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2020-04-19 19:04:41 -0700 |
---|---|---|
committer | Max Filippov <jcmvbkbc@gmail.com> | 2020-04-22 18:46:45 -0700 |
commit | 30ce8e47fad9b057b6d7af9e1d43061126d34d20 (patch) | |
tree | f1c9ab86407f5a80c78bdf436f2178d2aacc96dd /ld | |
parent | e44f65e3c5c9473d0dd98efa8c142d361b1273d7 (diff) | |
download | gdb-30ce8e47fad9b057b6d7af9e1d43061126d34d20.zip gdb-30ce8e47fad9b057b6d7af9e1d43061126d34d20.tar.gz gdb-30ce8e47fad9b057b6d7af9e1d43061126d34d20.tar.bz2 |
xtensa: fix PR ld/25861
Introduce new relaxations XTENSA_PDIFF{8,16,32} for positive differences
(subtracted symbol precedes diminished symbol) and XTENSA_NDIFF{8,16,32}
for negative differences (subtracted symbol follows diminished symbol).
Don't generate XTENSA_DIFF relocations in the assembler, generate
XTENSA_PDIFF or XTENSA_NDIFF based on relative symbol position.
Handle XTENSA_DIFF in BFD for compatibility with old object files.
Handle XTENSA_PDIFF and XTENSA_NDIFF in BFD, treating difference value
as unsigned.
2020-04-22 Max Filippov <jcmvbkbc@gmail.com>
bfd/
* bfd-in2.h: Regenerated.
* elf32-xtensa.c (elf_howto_table): New entries for
R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}.
(elf_xtensa_reloc_type_lookup, elf_xtensa_do_reloc)
(relax_section): Add cases for R_XTENSA_PDIFF{8,16,32} and
R_XTENSA_NDIFF{8,16,32}.
* libbfd.h (bfd_reloc_code_real_names): Add names for
BFD_RELOC_XTENSA_PDIFF{8,16,32} and
BFD_RELOC_XTENSA_NDIFF{8,16,32}.
* reloc.c: Add documentation for BFD_RELOC_XTENSA_PDIFF{8,16,32}
and BFD_RELOC_XTENSA_NDIFF{8,16,32}.
binutils/
* readelf.c (is_none_reloc): Recognize
BFD_RELOC_XTENSA_PDIFF{8,16,32} and
BFD_RELOC_XTENSA_NDIFF{8,16,32}.
gas/
* config/tc-xtensa.c (md_apply_fix): Replace
BFD_RELOC_XTENSA_DIFF{8,16,32} generation with
BFD_RELOC_XTENSA_PDIFF{8,16,32} and
BFD_RELOC_XTENSA_NDIFF{8,16,32} generation.
* testsuite/gas/xtensa/loc.d: Replace BFD_RELOC_XTENSA_DIFF16
with BFD_RELOC_XTENSA_PDIFF16 in the expected output.
include/
* elf/xtensa.h (elf_xtensa_reloc_type): New entries for
R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}.
ld/
* testsuite/ld-xtensa/relax-loc.d: New test definition.
* testsuite/ld-xtensa/relax-loc.s: New test source.
* testsuite/ld-xtensa/xtensa.exp (relax-loc): New test.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-xtensa/relax-loc.d | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-xtensa/relax-loc.s | 15 | ||||
-rw-r--r-- | ld/testsuite/ld-xtensa/xtensa.exp | 1 |
4 files changed, 30 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 341ad1d..77551f0 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2020-04-22 Max Filippov <jcmvbkbc@gmail.com> + + PR ld/25861 + * testsuite/ld-xtensa/relax-loc.d: New test definition. + * testsuite/ld-xtensa/relax-loc.s: New test source. + * testsuite/ld-xtensa/xtensa.exp (relax-loc): New test. + 2020-04-22 Fangrui Song <maskray@google.com> PR ld/25806 diff --git a/ld/testsuite/ld-xtensa/relax-loc.d b/ld/testsuite/ld-xtensa/relax-loc.d new file mode 100644 index 0000000..3c8d673 --- /dev/null +++ b/ld/testsuite/ld-xtensa/relax-loc.d @@ -0,0 +1,7 @@ +#as: --text-section-literals +#ld: +#objdump: --dwarf=decodedline +#... +relax-loc.s[ ]+1[ ]+0x400054[ ]+.* +relax-loc.s[ ]+2[ ]+0x40005c[ ]+.* +#... diff --git a/ld/testsuite/ld-xtensa/relax-loc.s b/ld/testsuite/ld-xtensa/relax-loc.s new file mode 100644 index 0000000..d768470 --- /dev/null +++ b/ld/testsuite/ld-xtensa/relax-loc.s @@ -0,0 +1,15 @@ + .file 1 "relax-loc.s" + .globl _start + .globl _ResetVector + .text +_ResetVector: +_start: + .loc 1 1 + j 1f + .literal_position +1: + .loc 1 2 + + .rep 10000 + movi a2, 0x12345678 + .endr diff --git a/ld/testsuite/ld-xtensa/xtensa.exp b/ld/testsuite/ld-xtensa/xtensa.exp index 9b2235b..de39887 100644 --- a/ld/testsuite/ld-xtensa/xtensa.exp +++ b/ld/testsuite/ld-xtensa/xtensa.exp @@ -27,6 +27,7 @@ run_dump_test "call_overflow" run_dump_test "coalesce" run_dump_test "diff_overflow" run_dump_test "lcall" +run_dump_test "relax-loc" run_dump_test "relax-static-pie" run_dump_test "relax-static-local-pie" |