From 664d2c4458a268eb176a223c397453a72ed167f4 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 10 Jun 2013 09:05:09 -0700 Subject: 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 Signed-off-by: Richard Henderson --- include/qemu/cache-utils.h | 4 ++-- linux-user/main.c | 2 +- util/cache-utils.c | 51 ++++++++++++++++++---------------------------- vl.c | 2 +- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/include/qemu/cache-utils.h b/include/qemu/cache-utils.h index 2c57f78fc1..211245bea0 100644 --- a/include/qemu/cache-utils.h +++ b/include/qemu/cache-utils.h @@ -12,7 +12,7 @@ struct qemu_cache_conf { extern struct qemu_cache_conf qemu_cache_conf; -void qemu_cache_utils_init(char **envp); +void qemu_cache_utils_init(void); /* mildly adjusted code from tcg-dyngen.c */ static inline void flush_icache_range(uintptr_t start, uintptr_t stop) @@ -38,7 +38,7 @@ static inline void flush_icache_range(uintptr_t start, uintptr_t stop) } #else -#define qemu_cache_utils_init(envp) do { (void) (envp); } while (0) +#define qemu_cache_utils_init() do { } while (0) #endif #endif /* QEMU_CACHE_UTILS_H */ diff --git a/linux-user/main.c b/linux-user/main.c index 0e453369c8..50db7553ea 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3702,7 +3702,7 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_QOM); qemu_init_auxval(envp); - qemu_cache_utils_init(envp); + qemu_cache_utils_init(); if ((envlist = envlist_create()) == NULL) { (void) fprintf(stderr, "Unable to allocate envlist\n"); 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 -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 #include -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 #include #include @@ -65,7 +67,7 @@ static void ppc_init_cacheline_sizes(void) #include #include -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 */ diff --git a/vl.c b/vl.c index 0c9c359230..e2c94bf75d 100644 --- a/vl.c +++ b/vl.c @@ -2895,7 +2895,7 @@ int main(int argc, char **argv, char **envp) rtc_clock = QEMU_CLOCK_HOST; qemu_init_auxval(envp); - qemu_cache_utils_init(envp); + qemu_cache_utils_init(); QLIST_INIT (&vm_change_state_head); os_setup_early_signal_handling(); -- cgit v1.2.1