readelf -d RELASZ excludes .rela.plt size

Message ID 20230809093028.562674-1-mengqinggang@loongson.cn
State Accepted
Headers
Series readelf -d RELASZ excludes .rela.plt size |

Checks

Context Check Description
snail/binutils-gdb-check success Github commit url

Commit Message

mengqinggang Aug. 9, 2023, 9:30 a.m. UTC
  Before, readelf -d RELASZ is the sum of .rela.dyn size and .rela.plt size.
To consistent with LoongArch lld, RELASZ chang to only the size of .rela.dyn.
---
 bfd/elfnn-loongarch.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Fangrui Song Aug. 9, 2023, 3:01 p.m. UTC | #1
On Wed, Aug 9, 2023 at 5:30 AM mengqinggang <mengqinggang@loongson.cn> wrote:
>
> Before, readelf -d RELASZ is the sum of .rela.dyn size and .rela.plt size.
> To consistent with LoongArch lld, RELASZ chang to only the size of .rela.dyn.
> ---
>  bfd/elfnn-loongarch.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
> index 70a666283af..5d5ca19d490 100644
> --- a/bfd/elfnn-loongarch.c
> +++ b/bfd/elfnn-loongarch.c
> @@ -4663,4 +4663,6 @@ elf_loongarch64_hash_symbol (struct elf_link_hash_entry *h)
>  #define elf_backend_hash_symbol elf_loongarch64_hash_symbol
>  #define bfd_elfNN_bfd_relax_section loongarch_elf_relax_section
>
> +#define elf_backend_dtrel_excludes_plt 1
> +
>  #include "elfNN-target.h"
> --
> 2.36.0
>

LGTM. glibc rtld supports overlapping [DT_RELA,DT_RELA+DT_RELASZ) and
[DT_JMPREL,DT_JMPREL+DT_PLTRELSZ).

I suspect that this is inherited (in the 1990s) from older loaders
that added DT_JMPREL as an optimization without breaking existing
loaders not supporting DT_JMPREL. This design choice is not good for
modern architectures that support DT_JMPREL since the beginning.
  

Patch

diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 70a666283af..5d5ca19d490 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -4663,4 +4663,6 @@  elf_loongarch64_hash_symbol (struct elf_link_hash_entry *h)
 #define elf_backend_hash_symbol elf_loongarch64_hash_symbol
 #define bfd_elfNN_bfd_relax_section loongarch_elf_relax_section
 
+#define elf_backend_dtrel_excludes_plt 1
+
 #include "elfNN-target.h"