diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-01-06 14:28:02 +0000 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2021-01-21 15:54:55 +0000 |
commit | 04af1eb3132904519f9bc8fdcca49525bec83fc7 (patch) | |
tree | ef2cd0ca5c9dd5236f27662a2475d3602e1fbe27 /csu/libc-start.c | |
parent | 374cef32ac36d956f75ccc6416872498bbe66e82 (diff) | |
download | glibc-04af1eb3132904519f9bc8fdcca49525bec83fc7.zip glibc-04af1eb3132904519f9bc8fdcca49525bec83fc7.tar.gz glibc-04af1eb3132904519f9bc8fdcca49525bec83fc7.tar.bz2 |
csu: Avoid weak ref for __ehdr_start in static PIE
All linkers support __ehdr_start that support static PIE linking,
so there is no need to check for its presence via a weak reference.
This avoids a RELATIVE relocation in static PIE startup code on some
targets.
With non-PIE static linking the weak ref check is kept in case the
linker does not support __ehdr_start.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'csu/libc-start.c')
-rw-r--r-- | csu/libc-start.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/csu/libc-start.c b/csu/libc-start.c index db859c3..5b9ce1d 100644 --- a/csu/libc-start.c +++ b/csu/libc-start.c @@ -175,8 +175,12 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), information from auxv. */ extern const ElfW(Ehdr) __ehdr_start +# if BUILD_PIE_DEFAULT + __attribute__ ((visibility ("hidden"))); +# else __attribute__ ((weak, visibility ("hidden"))); if (&__ehdr_start != NULL) +# endif { assert (__ehdr_start.e_phentsize == sizeof *GL(dl_phdr)); GL(dl_phdr) = (const void *) &__ehdr_start + __ehdr_start.e_phoff; |