[PATCH 2/2] RISC-V: Don't generate R_RISCV_RELATIVE if symbol referenced section is SH_ABS
Nelson Chu
nelson@rivosinc.com
Fri Aug 22 05:50:12 GMT 2025
Thanks H.J, the information is really helpful ;)
cc risc-v kernel experts to see if risc-v have those section symbols
defined in linker script. Please feel free to cc anyone who I've missed
but should be notified.
Thanks
Nelson
On Fri, Aug 22, 2025 at 11:00 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Aug 20, 2025 at 9:33 PM Nelson Chu <nelson@rivosinc.com> wrote:
> >
> > It's werid if it's absolute symbol but have a relative reloc for got
> entry
> > under pie. So don't generate relative reloc if symbol referenced
> section is
> > SH_ABS. However, x86 allows the absolute symbol defined in linker
> script has
> > a relative reloc, not sure if risc-v needs this or not.
>
> If I remember correctly, this is expected by x86-64 Linux kernel which
> defines many symbols for different sections in linker script and expects
> their
> values will be section addresses at run-time.
>
> > ---
> > bfd/elfnn-riscv.c | 3 ++-
> > ld/testsuite/ld-riscv-elf/absolute-no-relative.d | 9 +++++++++
> > ld/testsuite/ld-riscv-elf/absolute-no-relative.ld | 6 ++++++
> > ld/testsuite/ld-riscv-elf/absolute-no-relative.s | 8 ++++++++
> > ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp | 1 +
> > 5 files changed, 26 insertions(+), 1 deletion(-)
> > create mode 100644 ld/testsuite/ld-riscv-elf/absolute-no-relative.d
> > create mode 100644 ld/testsuite/ld-riscv-elf/absolute-no-relative.ld
> > create mode 100644 ld/testsuite/ld-riscv-elf/absolute-no-relative.s
> >
> > diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
> > index 6ff64325f85..aac061fb43d 100644
> > --- a/bfd/elfnn-riscv.c
> > +++ b/bfd/elfnn-riscv.c
> > @@ -2880,7 +2880,8 @@ riscv_elf_relocate_section (bfd *output_bfd,
> > if (h->dynindx == -1
> > && !h->forced_local
> > && h->root.type != bfd_link_hash_undefweak
> > - && bfd_link_pic (info))
> > + && bfd_link_pic (info)
> > + && !bfd_is_abs_section(h->root.u.def.section))
> > relative_got = true;
> >
> > bfd_put_NN (output_bfd, relocation,
> > diff --git a/ld/testsuite/ld-riscv-elf/absolute-no-relative.d
> b/ld/testsuite/ld-riscv-elf/absolute-no-relative.d
> > new file mode 100644
> > index 00000000000..6699ac1d0ef
> > --- /dev/null
> > +++ b/ld/testsuite/ld-riscv-elf/absolute-no-relative.d
> > @@ -0,0 +1,9 @@
> > +#source: absolute-no-relative.s
> > +#as:
> > +#ld: -Tabsolute-no-relative.ld -pie
> > +#readelf: -Wr
> > +
> > +Relocation section '.rela.dyn' at .*
> > +[ ]+Offset[ ]+Info[ ]+Type[ ]+.*
> > +0+[ ]+0+[ ]+R_RISCV_NONE[ ]+0
> > +0+[ ]+0+[ ]+R_RISCV_NONE[ ]+0
> > diff --git a/ld/testsuite/ld-riscv-elf/absolute-no-relative.ld
> b/ld/testsuite/ld-riscv-elf/absolute-no-relative.ld
> > new file mode 100644
> > index 00000000000..34bbcba7e73
> > --- /dev/null
> > +++ b/ld/testsuite/ld-riscv-elf/absolute-no-relative.ld
> > @@ -0,0 +1,6 @@
> > +ENTRY(_start)
> > +SECTIONS {
> > + __symbol_abs__ = 0x1234;
> > + .text 0x10000 : { *(.text*)}
> > + .got 0x20000 : { *(.got*) }
> > +}
> > diff --git a/ld/testsuite/ld-riscv-elf/absolute-no-relative.s
> b/ld/testsuite/ld-riscv-elf/absolute-no-relative.s
> > new file mode 100644
> > index 00000000000..4515661cfd5
> > --- /dev/null
> > +++ b/ld/testsuite/ld-riscv-elf/absolute-no-relative.s
> > @@ -0,0 +1,8 @@
> > +.text
> > +.global _start
> > +_start:
> > +lga x1, symbol_abs
> > +lga x1, __symbol_abs__
> > +
> > +.global symbol_abs
> > +.set symbol_abs, 0x100
> > diff --git a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
> b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
> > index bae1105cad6..b0d510ac8da 100644
> > --- a/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
> > +++ b/ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp
> > @@ -338,4 +338,5 @@ if [istarget "riscv*-*-*"] {
> > }
> > run_dump_test "tls"
> > run_dump_test "tlsbin"
> > + run_dump_test "absolute-no-relative"
> > }
> > --
> > 2.39.5 (Apple Git-154)
> >
>
>
> --
> H.J.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20250822/ba99d90d/attachment-0001.htm>
More information about the Binutils
mailing list