diff options
author | Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> | 2020-01-10 19:14:56 -0300 |
---|---|---|
committer | Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> | 2020-01-17 09:05:03 -0300 |
commit | 18363b4f010da9ba459b13310b113ac0647c2fcc (patch) | |
tree | a9b4b22d7fb65d7d219eb0e10b996de971da54e9 /sysdeps/unix/sysv | |
parent | c908ae0492cb9c68736306e2bceec7244a940568 (diff) | |
download | glibc-18363b4f010da9ba459b13310b113ac0647c2fcc.tar glibc-18363b4f010da9ba459b13310b113ac0647c2fcc.tar.gz glibc-18363b4f010da9ba459b13310b113ac0647c2fcc.tar.bz2 glibc-18363b4f010da9ba459b13310b113ac0647c2fcc.zip |
powerpc: Move cache line size to rtld_global_ro
GCC 10.0 enabled -fno-common by default and this started to point that
__cache_line_size had been implemented in 2 different places: loader and
libc.
In order to avoid this duplication, the libc variable has been removed
and the loader variable is moved to rtld_global_ro.
File sysdeps/unix/sysv/linux/powerpc/dl-auxv.h has been added in order
to reuse code for both static and dynamic linking scenarios.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/dl-auxv.h (renamed from sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c) | 19 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/dl-static.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/libc-start.c | 10 |
3 files changed, 14 insertions, 18 deletions
diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c b/sysdeps/unix/sysv/linux/powerpc/dl-auxv.h index 5d65bc6303..be2189732a 100644 --- a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c +++ b/sysdeps/unix/sysv/linux/powerpc/dl-auxv.h @@ -1,5 +1,5 @@ -/* Operating system support for run-time dynamic linker. Linux/PPC version. - Copyright (C) 1997-2020 Free Software Foundation, Inc. +/* Auxiliary vector processing. Linux/PPC version. + Copyright (C) 2020 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,18 +16,15 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ -#include <config.h> #include <ldsodefs.h> -int __cache_line_size attribute_hidden; +#if IS_IN (libc) && !defined SHARED +int GLRO(dl_cache_line_size); +#endif -/* Scan the Aux Vector for the "Data Cache Block Size" entry. If found - verify that the static extern __cache_line_size is defined by checking - for not NULL. If it is defined then assign the cache block size - value to __cache_line_size. */ +/* Scan the Aux Vector for the "Data Cache Block Size" entry and assign it + to dl_cache_line_size. */ #define DL_PLATFORM_AUXV \ case AT_DCACHEBSIZE: \ - __cache_line_size = av->a_un.a_val; \ + GLRO(dl_cache_line_size) = av->a_un.a_val; \ break; - -#include <sysdeps/unix/sysv/linux/dl-sysdep.c> diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-static.c b/sysdeps/unix/sysv/linux/powerpc/dl-static.c index 59ce4e8972..a77e07b503 100644 --- a/sysdeps/unix/sysv/linux/powerpc/dl-static.c +++ b/sysdeps/unix/sysv/linux/powerpc/dl-static.c @@ -30,12 +30,14 @@ _dl_var_init (void *array[]) DL_AUXV = 1, DL_HWCAP = 2, DL_HWCAP2 = 3, + DL_CACHE_LINE_SIZE = 4 }; GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); GLRO(dl_auxv) = (ElfW(auxv_t) *) *((size_t *) array[DL_AUXV]); GLRO(dl_hwcap) = *((unsigned long int *) array[DL_HWCAP]); GLRO(dl_hwcap2) = *((unsigned long int *) array[DL_HWCAP2]); + GLRO(dl_cache_line_size) = (int) *((int *) array[DL_CACHE_LINE_SIZE]); } #else @@ -46,6 +48,7 @@ static void *variables[] = &GLRO(dl_auxv), &GLRO(dl_hwcap), &GLRO(dl_hwcap2), + &GLRO(dl_cache_line_size) }; static void diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-start.c b/sysdeps/unix/sysv/linux/powerpc/libc-start.c index 93f8659fa6..fc86d6e234 100644 --- a/sysdeps/unix/sysv/linux/powerpc/libc-start.c +++ b/sysdeps/unix/sysv/linux/powerpc/libc-start.c @@ -24,7 +24,6 @@ #include <hwcapinfo.h> #endif -int __cache_line_size attribute_hidden; /* The main work is done in the generic function. */ #define LIBC_START_MAIN generic_start_main #define LIBC_START_DISABLE_INLINE @@ -71,15 +70,12 @@ __libc_start_main (int argc, char **argv, rtld_fini = NULL; } - /* Initialize the __cache_line_size variable from the aux vector. For the - static case, we also need _dl_hwcap, _dl_hwcap2 and _dl_platform, so we - can call __tcb_parse_hwcap_and_convert_at_platform (). */ for (ElfW (auxv_t) * av = auxvec; av->a_type != AT_NULL; ++av) switch (av->a_type) { - case AT_DCACHEBSIZE: - __cache_line_size = av->a_un.a_val; - break; + /* For the static case, we also need _dl_hwcap, _dl_hwcap2 and + _dl_platform, so we can call + __tcb_parse_hwcap_and_convert_at_platform (). */ #ifndef SHARED case AT_HWCAP: _dl_hwcap = (unsigned long int) av->a_un.a_val; |