diff options
author | Richard Henderson <rth@twiddle.net> | 2013-06-10 09:05:09 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2013-11-30 07:45:30 +1300 |
commit | 664d2c4458a268eb176a223c397453a72ed167f4 (patch) | |
tree | c01a338ca7bb53bb9cb2cb25340fd8f9de838797 /util/cache-utils.c | |
parent | c9baa30f42a87f61627391698f63fa4d1566d9d8 (diff) |
util: Use qemu_getauxval in linux qemu_cache_utils_init
With this we no longer pass down envp, and thus all systems can have
the same void prototype. So also eliminate a useless thunk.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'util/cache-utils.c')
-rw-r--r-- | util/cache-utils.c | 51 |
1 files changed, 20 insertions, 31 deletions
diff --git a/util/cache-utils.c b/util/cache-utils.c index b94013a8cb..047003008b 100644 --- a/util/cache-utils.c +++ b/util/cache-utils.c @@ -1,3 +1,4 @@ +#include "qemu-common.h" #include "qemu/cache-utils.h" #if defined(_ARCH_PPC) @@ -9,31 +10,33 @@ struct qemu_cache_conf qemu_cache_conf = { #if defined _AIX #include <sys/systemcfg.h> -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { qemu_cache_conf.icache_bsize = _system_configuration.icache_line; qemu_cache_conf.dcache_bsize = _system_configuration.dcache_line; } #elif defined __linux__ +#include "qemu/osdep.h" +#include "elf.h" -#define QEMU_AT_NULL 0 -#define QEMU_AT_DCACHEBSIZE 19 -#define QEMU_AT_ICACHEBSIZE 20 - -static void ppc_init_cacheline_sizes(char **envp) +void qemu_cache_utils_init(void) { - unsigned long *auxv; - - while (*envp++); + unsigned long dsize = qemu_getauxval(AT_DCACHEBSIZE); + unsigned long isize = qemu_getauxval(AT_ICACHEBSIZE); - for (auxv = (unsigned long *) envp; *auxv != QEMU_AT_NULL; auxv += 2) { - switch (*auxv) { - case QEMU_AT_DCACHEBSIZE: qemu_cache_conf.dcache_bsize = auxv[1]; break; - case QEMU_AT_ICACHEBSIZE: qemu_cache_conf.icache_bsize = auxv[1]; break; - default: break; + if (dsize == 0 || isize == 0) { + if (dsize == 0) { + fprintf(stderr, "getauxval AT_DCACHEBSIZE failed\n"); + } + if (isize == 0) { + fprintf(stderr, "getauxval AT_ICACHEBSIZE failed\n"); } + exit(1); + } + qemu_cache_conf.dcache_bsize = dsize; + qemu_cache_conf.icache_bsize = isize; } #elif defined __APPLE__ @@ -41,7 +44,7 @@ static void ppc_init_cacheline_sizes(char **envp) #include <sys/types.h> #include <sys/sysctl.h> -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { size_t len; unsigned cacheline; @@ -55,9 +58,8 @@ static void ppc_init_cacheline_sizes(void) qemu_cache_conf.icache_bsize = cacheline; } } -#endif -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include <errno.h> #include <stdio.h> #include <stdlib.h> @@ -65,7 +67,7 @@ static void ppc_init_cacheline_sizes(void) #include <sys/types.h> #include <sys/sysctl.h> -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { size_t len = 4; unsigned cacheline; @@ -81,17 +83,4 @@ static void ppc_init_cacheline_sizes(void) } #endif -#ifdef __linux__ -void qemu_cache_utils_init(char **envp) -{ - ppc_init_cacheline_sizes(envp); -} -#else -void qemu_cache_utils_init(char **envp) -{ - (void) envp; - ppc_init_cacheline_sizes(); -} -#endif - #endif /* _ARCH_PPC */ |