From ac63e41830ec555a36e05bd37c9718945b3c8e3b Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Tue, 23 Jun 2009 16:47:24 +0200 Subject: [PATCH] Read the cache information from /proc/self/auxv on PPC Linux --- cache-utils.c | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cache-utils.c b/cache-utils.c index 45d62c9..1675905 100644 --- a/cache-utils.c +++ b/cache-utils.c @@ -16,6 +16,8 @@ static void ppc_init_cacheline_sizes(void) } #elif defined __linux__ +#include +#include #define QEMU_AT_NULL 0 #define QEMU_AT_DCACHEBSIZE 19 @@ -23,16 +25,20 @@ static void ppc_init_cacheline_sizes(void) static void ppc_init_cacheline_sizes(char **envp) { - unsigned long *auxv; - - while (*envp++); - - 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; + int fd; + unsigned long auxv[2]; + + fd = open("/proc/self/auxv", O_RDONLY); + if (fd != -1) { + while (read(fd, auxv, sizeof(auxv)) == sizeof(auxv) && + auxv[0] != QEMU_AT_NULL) { + switch (auxv[0]) { + 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; + } } + close(fd); } } -- 1.6.3.msysgit.0