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 /include | |
parent | e44f65e3c5c9473d0dd98efa8c142d361b1273d7 (diff) | |
download | binutils-30ce8e47fad9b057b6d7af9e1d43061126d34d20.zip binutils-30ce8e47fad9b057b6d7af9e1d43061126d34d20.tar.gz binutils-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 'include')
-rw-r--r-- | include/ChangeLog | 6 | ||||
-rw-r--r-- | include/elf/xtensa.h | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 1829ec5..bf379cc 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2020-04-22 Max Filippov <jcmvbkbc@gmail.com> + + PR ld/25861 + * elf/xtensa.h (elf_xtensa_reloc_type): New entries for + R_XTENSA_PDIFF{8,16,32} and R_XTENSA_NDIFF{8,16,32}. + 2020-04-21 Alan Modra <amodra@gmail.com> * elf/sh.h (STO_SH5_ISA32, SHF_SH5_ISA32, SHF_SH5_ISA32_MIXED), diff --git a/include/elf/xtensa.h b/include/elf/xtensa.h index 2eb5e4e..bd5c80d 100644 --- a/include/elf/xtensa.h +++ b/include/elf/xtensa.h @@ -87,6 +87,12 @@ START_RELOC_NUMBERS (elf_xtensa_reloc_type) RELOC_NUMBER (R_XTENSA_TLS_FUNC, 54) RELOC_NUMBER (R_XTENSA_TLS_ARG, 55) RELOC_NUMBER (R_XTENSA_TLS_CALL, 56) + RELOC_NUMBER (R_XTENSA_PDIFF8, 57) + RELOC_NUMBER (R_XTENSA_PDIFF16, 58) + RELOC_NUMBER (R_XTENSA_PDIFF32, 59) + RELOC_NUMBER (R_XTENSA_NDIFF8, 60) + RELOC_NUMBER (R_XTENSA_NDIFF16, 61) + RELOC_NUMBER (R_XTENSA_NDIFF32, 62) END_RELOC_NUMBERS (R_XTENSA_max) /* Processor-specific flags for the ELF header e_flags field. */ |