diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2019-11-29 16:28:46 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-01-03 10:02:05 -0300 |
commit | 2822aaf4f7426289a7e29086a4ee430f683e4b55 (patch) | |
tree | 106fc97d38833aa1e6ca176b4ee966097e351a21 | |
parent | bc36727be9a45d018e9f4bfad6b707eafb009bac (diff) | |
download | glibc-2822aaf4f7426289a7e29086a4ee430f683e4b55.tar.gz |
Remove vDSO support from make-syscall.sh
The auto-generated vDSO call shows some issues:
- It requires sync the auto-generated C file with current glibc
implementation;
- It still uses symbol redirections hacks where libc-symbols.h
provide macros that uses compiler builtins
(libc_ifunc_redirected for instance);
- It does not handle all required compiler handling
(inhibit_stack_protector on iFUNC resolver).
- No architecure uses it.
Checked with a build against all major ABIs.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
-rw-r--r-- | sysdeps/unix/make-syscalls.sh | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh index fe24bbc78f..c07626677f 100644 --- a/sysdeps/unix/make-syscalls.sh +++ b/sysdeps/unix/make-syscalls.sh @@ -149,14 +149,6 @@ emit_weak_aliases() echo "$calls" | while read file srcfile caller syscall args strong weak; do - vdso_syscall= - case x"$syscall" in - *:*@*) - vdso_syscall="${syscall#*:}" - syscall="${syscall%:*}" - ;; - esac - case x"$syscall" in x-) callnum=_ ;; *) @@ -233,10 +225,9 @@ while read file srcfile caller syscall args strong weak; do if test $shared_only = t; then # The versioned symbols are only in the shared library. echo "shared-only-routines += $file" - test -n "$vdso_syscall" || echo "\$(objpfx)${file}.os: \\" + echo "\$(objpfx)${file}.os: \\" else object_suffixes='$(object-suffixes)' - test -z "$vdso_syscall" || object_suffixes='$(object-suffixes-noshared)' echo "\ \$(foreach p,\$(sysd-rules-targets),\ \$(foreach o,${object_suffixes},\$(objpfx)\$(patsubst %,\$p,$file)\$o)): \\" @@ -268,40 +259,6 @@ while read file srcfile caller syscall args strong weak; do echo ' ) | $(compile-syscall) '"\ \$(foreach p,\$(patsubst %$file,%,\$(basename \$(@F))),\$(\$(p)CPPFLAGS))" - if test -n "$vdso_syscall"; then - # In the shared library, we're going to emit an IFUNC using a vDSO function. - # $vdso_syscall looks like "name@KERNEL_X.Y" where "name" is the symbol - # name in the vDSO and KERNEL_X.Y is its symbol version. - vdso_symbol="${vdso_syscall%@*}" - vdso_symver="${vdso_syscall#*@}" - vdso_symver=`echo "$vdso_symver" | sed 's/\./_/g'` - cat <<EOF - -\$(foreach p,\$(sysd-rules-targets),\$(objpfx)\$(patsubst %,\$p,$file).os): \\ - \$(..)sysdeps/unix/make-syscalls.sh - \$(make-target-directory) - (echo '#define ${strong} __redirect_${strong}'; \\ - echo '#include <dl-vdso.h>'; \\ - echo '#undef ${strong}'; \\ - echo '#define vdso_ifunc_init()'; \\ - echo '__ifunc (__redirect_${strong}, ${strong},'; \\ - echo ' get_vdso_symbol ("${vdso_symbol}"), void,'; \\ - echo ' vdso_ifunc_init)'; \\ -EOF - # This is doing "hidden_def (${strong})", but the compiler - # doesn't know that we've defined ${strong} in the same file, so - # we can't do it the normal way. - cat <<EOF - echo 'asm (".globl __GI_${strong}");'; \\ - echo 'asm ("__GI_${strong} = ${strong}");'; \\ -EOF - emit_weak_aliases - cat <<EOF - ) | \$(compile-stdin.c) \ -\$(foreach p,\$(patsubst %$file,%,\$(basename \$(@F))),\$(\$(p)CPPFLAGS)) -EOF - fi - if test $shared_only = t; then # The versioned symbols are only in the shared library. echo endif |