[binutils-gdb] RISC-V: define elf_backend_dtrel_excludes_plt
Jiawei Chen via Binutils-cvs <[email protected]>
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4e8ba93fdb24f9bcf31f706e62e67c57ae91168f commit 4e8ba93fdb24f9bcf31f706e62e67c57ae91168f Author: juewang <[email protected]> Date: Fri Jul 24 09:26:42 2026 +0800 RISC-V: define elf_backend_dtrel_excludes_plt The RISC-V port never defined elf_backend_dtrel_excludes_plt, unlike x86-64, AArch64, arm, ppc, mips and s390. As a result DT_RELASZ counted .rela.dyn + .rela.plt instead of just .rela.dyn. With an empty .rela.dyn this makes DT_RELA alias DT_JMPREL (DT_RELA == DT_JMPREL, DT_RELASZ == DT_PLTRELSZ). glibc accepts the aliased range, but tools that read the two ranges independently, such as llvm-bolt, then process .rela.plt twice. Define the macro so DT_RELASZ excludes .rela.plt, matching every other target. When .rela.dyn is empty DT_RELA is now zeroed and the aliasing is gone. * elfnn-riscv.c (elf_backend_dtrel_excludes_plt): Define. Signed-off-by: wangjue.wangjue <[email protected]> Diff: --- bfd/elfnn-riscv.c | 1 + 1 file changed, 1 insertion(+) diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 1c1c3ea36c5..1ca23e4964a 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -5587,6 +5587,7 @@ elfNN_riscv_merge_gnu_properties (struct bfd_link_info *info, bfd *abfd, #define elf_backend_got_header_size (ARCH_SIZE / 8) #define elf_backend_want_dynrelro 1 #define elf_backend_rela_normal 1 +#define elf_backend_dtrel_excludes_plt 1 #define elf_backend_default_execstack 0 #undef elf_backend_obj_attrs_vendor