[v2] RISC-V: Enable static-pie.
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
linaro-tcwg-bot/tcwg_glibc_build--master-arm |
success
|
Testing passed
|
redhat-pt-bot/TryBot-32bit |
success
|
Build for i686
|
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 |
success
|
Testing passed
|
redhat-pt-bot/TryBot-still_applies |
warning
|
Patch no longer applies to master
|
Commit Message
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.
---
sysdeps/riscv/configure | 1 +
sysdeps/riscv/configure.ac | 3 +++
sysdeps/riscv/dl-machine.h | 2 +-
3 files changed, 5 insertions(+), 1 deletion(-)
Comments
Hi,
We have a lot talks about this patch sometimes ago at
https://patchwork.sourceware.org/project/glibc/patch/20230810233348.1214955-1-yanzhang.wang@intel.com/.
It mainly focus on the regression test of this feature. I did some tests
as the mail shows. And based on the results, it seems no regression
introduced by this patch.
I think I got one approve from Adhemerval. Is there any further comments?
What do I need to do next step to get this patch be merged?
Thanks,
Yanzhang
> -----Original Message-----
> From: Wang, Yanzhang <yanzhang.wang@intel.com>
> Sent: Tuesday, August 15, 2023 9:45 AM
> To: libc-alpha@sourceware.org
> Cc: carlos@redhat.com; palmer@dabbelt.com; Wang, Yanzhang
> <yanzhang.wang@intel.com>
> Subject: [PATCH v2] RISC-V: Enable static-pie.
>
> 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.
> ---
> 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
> --
> 2.41.0
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
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
@@ -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
@@ -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)
@@ -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