]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
RISC-V: define elf_backend_dtrel_excludes_plt
authorjuewang <juewang@linux.alibaba.com>
Fri, 24 Jul 2026 01:26:42 +0000 (09:26 +0800)
committerJiawei <jiawei@iscas.ac.cn>
Wed, 12 Aug 2026 02:40:31 +0000 (10:40 +0800)
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 <wangjue.wangjue@alibaba-inc.com>
bfd/elfnn-riscv.c

index 1c1c3ea36c597b68721d3dfa1dee7699d9696d6d..1ca23e4964a967efca384212e81ce083185e30cf 100644 (file)
@@ -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