From patchwork Thu Feb 21 04:25:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andreas_F=C3=A4rber?= X-Patchwork-Id: 222176 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 43B5B2C0086 for ; Thu, 21 Feb 2013 15:27:22 +1100 (EST) Received: from localhost ([::1]:49973 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8Nke-0001uU-Cb for incoming@patchwork.ozlabs.org; Wed, 20 Feb 2013 23:27:20 -0500 Received: from eggs.gnu.org ([208.118.235.92]:34340) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8NjE-0007Tz-Mo for qemu-devel@nongnu.org; Wed, 20 Feb 2013 23:25:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U8Nj8-0002Fx-Q0 for qemu-devel@nongnu.org; Wed, 20 Feb 2013 23:25:52 -0500 Received: from cantor2.suse.de ([195.135.220.15]:49390 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U8Nj7-0002FU-9T for qemu-devel@nongnu.org; Wed, 20 Feb 2013 23:25:46 -0500 Received: from relay1.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id D1348A5208; Thu, 21 Feb 2013 05:25:44 +0100 (CET) From: =?UTF-8?q?Andreas=20F=C3=A4rber?= To: qemu-devel@nongnu.org Date: Thu, 21 Feb 2013 05:25:10 +0100 Message-Id: <1361420711-15698-15-git-send-email-afaerber@suse.de> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1361420711-15698-1-git-send-email-afaerber@suse.de> References: <1361420711-15698-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x X-Received-From: 195.135.220.15 Cc: Blue Swirl , =?UTF-8?q?Andreas=20F=C3=A4rber?= Subject: [Qemu-devel] [PATCH v2 14/15] target-sparc: Refactor debug output macros X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Make debug output compile-testable even if disabled. Inline DEBUG_FEATURES and introduce features_printf() in cpu.c. Inline DEBUG_MMU in ldst_helper.c but leave DPRINTF_MMU() as is due to "MMU: " prefix. Inline DEBUG_{MXCC,ASI} in ldst_helper.c. Signed-off-by: Andreas Färber Acked-by: Blue Swirl --- target-sparc/cpu.c | 38 +++++--- target-sparc/ldst_helper.c | 221 +++++++++++++++++++++++++++----------------- 2 Dateien geändert, 158 Zeilen hinzugefügt(+), 101 Zeilen entfernt(-) diff --git a/target-sparc/cpu.c b/target-sparc/cpu.c index ef52df6..86dbf40 100644 --- a/target-sparc/cpu.c +++ b/target-sparc/cpu.c @@ -21,6 +21,22 @@ //#define DEBUG_FEATURES +#ifdef DEBUG_FEATURES +static const bool debug_features = true; +#else +static const bool debug_features; +#endif + +static void GCC_FMT_ATTR(1, 2) features_printf(const char *fmt, ...) +{ + if (debug_features) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + } +} + static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model); /* CPUClass::reset() */ @@ -676,9 +692,7 @@ static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model) goto error; } cpu_def->iu_version = iu_version; -#ifdef DEBUG_FEATURES - fprintf(stderr, "iu_version %" PRIx64 "\n", iu_version); -#endif + features_printf("iu_version %" PRIx64 "\n", iu_version); } else if (!strcmp(featurestr, "fpu_version")) { char *err; @@ -688,9 +702,7 @@ static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model) goto error; } cpu_def->fpu_version = fpu_version; -#ifdef DEBUG_FEATURES - fprintf(stderr, "fpu_version %x\n", fpu_version); -#endif + features_printf("fpu_version %x\n", fpu_version); } else if (!strcmp(featurestr, "mmu_version")) { char *err; @@ -700,9 +712,7 @@ static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model) goto error; } cpu_def->mmu_version = mmu_version; -#ifdef DEBUG_FEATURES - fprintf(stderr, "mmu_version %x\n", mmu_version); -#endif + features_printf("mmu_version %x\n", mmu_version); } else if (!strcmp(featurestr, "nwindows")) { char *err; @@ -713,9 +723,7 @@ static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model) goto error; } cpu_def->nwindows = nwindows; -#ifdef DEBUG_FEATURES - fprintf(stderr, "nwindows %d\n", nwindows); -#endif + features_printf("nwindows %d\n", nwindows); } else { fprintf(stderr, "unrecognized feature %s\n", featurestr); goto error; @@ -729,9 +737,9 @@ static int cpu_sparc_find_by_name(sparc_def_t *cpu_def, const char *cpu_model) } cpu_def->features |= plus_features; cpu_def->features &= ~minus_features; -#ifdef DEBUG_FEATURES - print_features(stderr, fprintf, cpu_def->features, NULL); -#endif + if (debug_features) { + print_features(stderr, fprintf, cpu_def->features, NULL); + } g_free(s); return 0; diff --git a/target-sparc/ldst_helper.c b/target-sparc/ldst_helper.c index 7decd66..9be9e41 100644 --- a/target-sparc/ldst_helper.c +++ b/target-sparc/ldst_helper.c @@ -28,29 +28,87 @@ //#define DEBUG_CACHE_CONTROL #ifdef DEBUG_MMU -#define DPRINTF_MMU(fmt, ...) \ - do { printf("MMU: " fmt , ## __VA_ARGS__); } while (0) +static const bool debug_mmu = true; #else -#define DPRINTF_MMU(fmt, ...) do {} while (0) +static const bool debug_mmu; #endif #ifdef DEBUG_MXCC -#define DPRINTF_MXCC(fmt, ...) \ - do { printf("MXCC: " fmt , ## __VA_ARGS__); } while (0) +static const bool debug_mxcc = true; #else -#define DPRINTF_MXCC(fmt, ...) do {} while (0) +static const bool debug_mxcc; #endif #ifdef DEBUG_ASI -#define DPRINTF_ASI(fmt, ...) \ - do { printf("ASI: " fmt , ## __VA_ARGS__); } while (0) +static const bool debug_asi = true; +#else +static const bool debug_asi; #endif #ifdef DEBUG_CACHE_CONTROL -#define DPRINTF_CACHE_CONTROL(fmt, ...) \ - do { printf("CACHE_CONTROL: " fmt , ## __VA_ARGS__); } while (0) +static const bool debug_cache_control = true; #else -#define DPRINTF_CACHE_CONTROL(fmt, ...) do {} while (0) +static const bool debug_cache_control; +#endif + +#define DPRINTF_MMU(fmt, ...) \ + dprintf_mmu("MMU: " fmt, ## __VA_ARGS__) + +#ifndef CONFIG_USER_ONLY +static void GCC_FMT_ATTR(1, 2) dprintf_mmu(const char *fmt, ...) +{ + if (debug_mmu) { + va_list ap; + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); + } +} + +#define DPRINTF_MXCC(fmt, ...) \ + dprintf_mxcc("MXCC: " fmt, ## __VA_ARGS__) + +#ifndef TARGET_SPARC64 +static void GCC_FMT_ATTR(1, 2) dprintf_mxcc(const char *fmt, ...) +{ + if (debug_mxcc) { + va_list ap; + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); + } +} +#endif /* !TARGET_SPARC64 */ +#endif /* !CONFIG_USER_ONLY */ + +#define DPRINTF_ASI(fmt, ...) \ + dprintf_asi("ASI:" fmt, ## __VA_ARGS__) + +#if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64) +static void GCC_FMT_ATTR(1, 2) dprintf_asi(const char *fmt, ...) +{ + if (debug_asi) { + va_list ap; + va_start(ap, fmt); + vprintf(fmt , ap); + va_end(ap); + } +} +#endif + +#define DPRINTF_CACHE_CONTROL(fmt, ...) \ + dprintf_cache_control("CACHE_CONTROL: " fmt, ## __VA_ARGS__) + +#if !defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) +static void GCC_FMT_ATTR(1, 2) dprintf_cache_control(const char *fmt, ...) +{ + if (debug_cache_control) { + va_list ap; + va_start(ap, fmt); + vprintf(fmt, ap); + va_end(ap); + } +} #endif #ifdef TARGET_SPARC64 @@ -209,10 +267,10 @@ static void demap_tlb(SparcTLBEntry *tlb, target_ulong demap_addr, } replace_tlb_entry(&tlb[i], 0, 0, env1); -#ifdef DEBUG_MMU DPRINTF_MMU("%s demap invalidated entry [%02u]\n", strmmu, i); - dump_mmu(stdout, fprintf, env1); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env1); + } } } } @@ -227,10 +285,10 @@ static void replace_tlb_1bit_lru(SparcTLBEntry *tlb, for (i = 0; i < 64; i++) { if (!TTE_IS_VALID(tlb[i].tte)) { replace_tlb_entry(&tlb[i], tlb_tag, tlb_tte, env1); -#ifdef DEBUG_MMU DPRINTF_MMU("%s lru replaced invalid entry [%i]\n", strmmu, i); - dump_mmu(stdout, fprintf, env1); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env1); + } return; } } @@ -245,11 +303,12 @@ static void replace_tlb_1bit_lru(SparcTLBEntry *tlb, if (!TTE_IS_LOCKED(tlb[i].tte) && !TTE_IS_USED(tlb[i].tte)) { replace_tlb_entry(&tlb[i], tlb_tag, tlb_tte, env1); -#ifdef DEBUG_MMU + DPRINTF_MMU("%s lru replaced unlocked %s entry [%i]\n", strmmu, (replace_used ? "used" : "unused"), i); - dump_mmu(stdout, fprintf, env1); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env1); + } return; } } @@ -261,9 +320,7 @@ static void replace_tlb_1bit_lru(SparcTLBEntry *tlb, } } -#ifdef DEBUG_MMU DPRINTF_MMU("%s lru replacement failed: no entries available\n", strmmu); -#endif /* error state? */ } @@ -327,8 +384,7 @@ void helper_check_align(CPUSPARCState *env, target_ulong addr, uint32_t align) } } -#if !defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) && \ - defined(DEBUG_MXCC) +#if !defined(TARGET_SPARC64) && !defined(CONFIG_USER_ONLY) static void dump_mxcc(CPUSPARCState *env) { printf("mxccdata: %016" PRIx64 " %016" PRIx64 " %016" PRIx64 " %016" PRIx64 @@ -346,8 +402,7 @@ static void dump_mxcc(CPUSPARCState *env) } #endif -#if (defined(TARGET_SPARC64) || !defined(CONFIG_USER_ONLY)) \ - && defined(DEBUG_ASI) +#if (defined(TARGET_SPARC64) || !defined(CONFIG_USER_ONLY)) static void dump_asi(const char *txt, target_ulong addr, int asi, int size, uint64_t r1) { @@ -448,9 +503,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, int sign) { uint64_t ret = 0; -#if defined(DEBUG_MXCC) || defined(DEBUG_ASI) uint32_t last_addr = addr; -#endif helper_check_align(env, addr, size - 1); switch (asi) { @@ -509,9 +562,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, DPRINTF_MXCC("asi = %d, size = %d, sign = %d, " "addr = %08x -> ret = %" PRIx64 "," "addr = %08x\n", asi, size, sign, last_addr, ret, addr); -#ifdef DEBUG_MXCC - dump_mxcc(env); -#endif + if (debug_mxcc) { + dump_mxcc(env); + } break; case 3: /* MMU probe */ { @@ -702,9 +755,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, break; } } -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } return ret; } @@ -839,9 +892,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val, int asi, } DPRINTF_MXCC("asi = %d, size = %d, addr = %08x, val = %" PRIx64 "\n", asi, size, addr, val); -#ifdef DEBUG_MXCC - dump_mxcc(env); -#endif + if (debug_mxcc) { + dump_mxcc(env); + } break; case 3: /* MMU flush */ { @@ -862,9 +915,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val, int asi, default: break; } -#ifdef DEBUG_MMU - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } } break; case 4: /* write MMU regs */ @@ -916,9 +969,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val, int asi, DPRINTF_MMU("mmu change reg[%d]: 0x%08x -> 0x%08x\n", reg, oldreg, env->mmuregs[reg]); } -#ifdef DEBUG_MMU - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } } break; case 5: /* Turbosparc ITLB Diagnostic */ @@ -1085,9 +1138,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val, int asi, cpu_unassigned_access(env, addr, 1, 0, asi, size); break; } -#ifdef DEBUG_ASI - dump_asi("write", addr, asi, size, val); -#endif + if (debug_asi) { + dump_asi("write", addr, asi, size, val); + } } #endif /* CONFIG_USER_ONLY */ @@ -1098,9 +1151,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, int sign) { uint64_t ret = 0; -#if defined(DEBUG_ASI) target_ulong last_addr = addr; -#endif if (asi < 0x80) { helper_raise_exception(env, TT_PRIV_ACT); @@ -1113,9 +1164,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, case 0x82: /* Primary no-fault */ case 0x8a: /* Primary no-fault LE */ if (page_check_range(addr, size, PAGE_READ) == -1) { -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } return 0; } /* Fall through */ @@ -1142,9 +1193,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, case 0x83: /* Secondary no-fault */ case 0x8b: /* Secondary no-fault LE */ if (page_check_range(addr, size, PAGE_READ) == -1) { -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } return 0; } /* Fall through */ @@ -1195,18 +1246,18 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, break; } } -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } return ret; } void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, int asi, int size) { -#ifdef DEBUG_ASI - dump_asi("write", addr, asi, size, val); -#endif + if (debug_asi) { + dump_asi("write", addr, asi, size, val); + } if (asi < 0x80) { helper_raise_exception(env, TT_PRIV_ACT); } @@ -1277,9 +1328,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, int sign) { uint64_t ret = 0; -#if defined(DEBUG_ASI) target_ulong last_addr = addr; -#endif asi &= 0xff; @@ -1305,9 +1354,9 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, } if (cpu_get_phys_page_nofault(env, addr, mmu_idx) == -1ULL) { -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } /* env->exception_index is set in get_physical_address_data(). */ helper_raise_exception(env, env->exception_index); } @@ -1635,18 +1684,18 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr, int asi, int size, break; } } -#ifdef DEBUG_ASI - dump_asi("read ", last_addr, asi, size, ret); -#endif + if (debug_asi) { + dump_asi("read ", last_addr, asi, size, ret); + } return ret; } void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, int asi, int size) { -#ifdef DEBUG_ASI - dump_asi("write", addr, asi, size, val); -#endif + if (debug_asi) { + dump_asi("write", addr, asi, size, val); + } asi &= 0xff; @@ -1849,9 +1898,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, if (oldreg != env->lsu) { DPRINTF_MMU("LSU change: 0x%" PRIx64 " -> 0x%" PRIx64 "\n", oldreg, env->lsu); -#ifdef DEBUG_MMU - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } tlb_flush(env, 1); } return; @@ -1895,9 +1944,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, DPRINTF_MMU("immu change reg[%d]: 0x%016" PRIx64 " -> 0x%016" PRIx64 "\n", reg, oldreg, env->immuregs[reg]); } -#ifdef DEBUG_MMU - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } return; } case 0x54: /* I-MMU data in */ @@ -1911,10 +1960,10 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, replace_tlb_entry(&env->itlb[i], env->immu.tag_access, val, env); -#ifdef DEBUG_MMU DPRINTF_MMU("immu data access replaced entry [%i]\n", i); - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } return; } case 0x57: /* I-MMU demap */ @@ -1968,9 +2017,9 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, DPRINTF_MMU("dmmu change reg[%d]: 0x%016" PRIx64 " -> 0x%016" PRIx64 "\n", reg, oldreg, env->dmmuregs[reg]); } -#ifdef DEBUG_MMU - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } return; } case 0x5c: /* D-MMU data in */ @@ -1982,10 +2031,10 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val, replace_tlb_entry(&env->dtlb[i], env->dmmu.tag_access, val, env); -#ifdef DEBUG_MMU DPRINTF_MMU("dmmu data access replaced entry [%i]\n", i); - dump_mmu(stdout, fprintf, env); -#endif + if (debug_mmu) { + dump_mmu(stdout, fprintf, env); + } return; } case 0x5f: /* D-MMU demap */