[PATCH v2] RISC-V: Enable static-pie.
Wang, Yanzhang
yanzhang.wang@intel.com
Tue Jan 2 11:02:02 GMT 2024
Thanks for pointing this out. Yes, I should do the verification. I have
pushed a new patch (patch v3) just now and verified with two version's
gcc (support and not support). Please help to review it.
Thanks,
Yanzhang
> -----Original Message-----
> From: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
> Sent: Wednesday, December 20, 2023 1:44 AM
> To: Wang, Yanzhang <yanzhang.wang@intel.com>; libc-alpha@sourceware.org
> Cc: carlos@redhat.com; palmer@dabbelt.com
> Subject: Re: [PATCH v2] RISC-V: Enable static-pie.
>
>
>
> On 14/08/23 22:44, yanzhang.wang--- via Libc-alpha wrote:
> > From: Yanzhang Wang <yanzhang.wang@intel.com>
> >
> > This patch referents the commit 374cef3 to add static-pie support. And
> > because the dummy link map is used when relocating ourselves, so need
> > not to set __global_pointer$ at this time.
>
> To enable this support as default woudl equires GCC commit
> b20e59f49b51b7baf05e1b727be5da947e617496 that pass the expected ld flags.
> Otherwise, building static-pie will fail with missing _DYNAMIC:
>
> riscv64-glibc-linux-gnu-gcc -o [...] support/test-run-command -nostdlib -
> nostartfiles -static -static-pie [...]
> [...]libc.a(dl-reloc-static-pie.o): in function `_dl_relocate_static_pie':
> [...]elf/dl-reloc-static-pie.c:48: undefined reference to `_DYNAMIC'
>
> I think you will need to add something similar to what loongarch did on
> sysdeps/loongarch/configure.ac and check whether compile do actually
> supports -static-pie.
>
> > ---
> > sysdeps/riscv/configure | 1 +
> > sysdeps/riscv/configure.ac | 3 +++
> > sysdeps/riscv/dl-machine.h | 2 +-
> > 3 files changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/sysdeps/riscv/configure b/sysdeps/riscv/configure index
> > acd1f5e743..ecaf8e2a0b 100644
> > --- a/sysdeps/riscv/configure
> > +++ b/sysdeps/riscv/configure
> > @@ -31,3 +31,4 @@ printf "%s\n" "$libc_cv_riscv_r_align" >&6; }
> > config_vars="$config_vars riscv-r-align = $libc_cv_riscv_r_align"
> >
> > +$as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h
> > diff --git a/sysdeps/riscv/configure.ac b/sysdeps/riscv/configure.ac
> > index dbcc216689..36da2b5396 100644
> > --- a/sysdeps/riscv/configure.ac
> > +++ b/sysdeps/riscv/configure.ac
> > @@ -16,3 +16,6 @@ EOF
> > fi
> > rm -rf conftest.*])
> > LIBC_CONFIG_VAR([riscv-r-align], [$libc_cv_riscv_r_align])
> > +
> > +dnl Static PIE is supported.
> > +AC_DEFINE(SUPPORT_STATIC_PIE)
> > diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h
> > index c0c9bd93ad..ad875c0828 100644
> > --- a/sysdeps/riscv/dl-machine.h
> > +++ b/sysdeps/riscv/dl-machine.h
> > @@ -323,7 +323,7 @@ elf_machine_runtime_setup (struct link_map *l,
> struct r_scope_elem *scope[],
> > gotplt[1] = (ElfW(Addr)) l;
> > }
> >
> > - if (l->l_type == lt_executable)
> > + if (l->l_type == lt_executable && l->l_scope != NULL)
> > {
> > /* The __global_pointer$ may not be defined by the linker if the
> > $gp register does not be used to access the global variable
More information about the Libc-alpha
mailing list