From 9a0030858ea9f26bb8fddc920f217f431f5bdebb Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Mon, 3 Aug 2009 20:32:52 +0000 Subject: [PATCH] Common up two closure type -> string tables Also, use C99-style array initialisers --- rts/Printer.c | 191 +++++++++++++++++++++++++++----------------------------- rts/Printer.h | 10 +-- rts/ProfHeap.c | 82 +----------------------- 3 files changed, 99 insertions(+), 184 deletions(-) diff --git a/rts/Printer.c b/rts/Printer.c index ee91777..91bc6c8 100644 --- a/rts/Printer.c +++ b/rts/Printer.c @@ -13,13 +13,13 @@ #include "Printer.h" #include "RtsUtils.h" +#include + #ifdef DEBUG #include "Disassembler.h" #include "Apply.h" -#include - /* -------------------------------------------------------------------------- * local function decls * ------------------------------------------------------------------------*/ @@ -583,103 +583,6 @@ void printTSO( StgTSO *tso ) printStackChunk( tso->sp, tso->stack+tso->stack_size); } -/* ----------------------------------------------------------------------------- - Closure types - - NOTE: must be kept in sync with the closure types in includes/ClosureTypes.h - -------------------------------------------------------------------------- */ - -static char *closure_type_names[] = { - "INVALID_OBJECT", - "CONSTR", - "CONSTR_1", - "CONSTR_0", - "CONSTR_2", - "CONSTR_1", - "CONSTR_0", - "CONSTR_STATIC", - "CONSTR_NOCAF_STATIC", - "FUN", - "FUN_1_0", - "FUN_0_1", - "FUN_2_0", - "FUN_1_1", - "FUN_0", - "FUN_STATIC", - "THUNK", - "THUNK_1_0", - "THUNK_0_1", - "THUNK_2_0", - "THUNK_1_1", - "THUNK_0", - "THUNK_STATIC", - "THUNK_SELECTOR", - "BCO", - "AP_UPD", - "PAP", - "AP_STACK", - "IND", - "IND_OLDGEN", - "IND_PERM", - "IND_OLDGEN_PERM", - "IND_STATIC", - "RET_BCO", - "RET_SMALL", - "RET_BIG", - "RET_DYN", - "RET_FUN", - "UPDATE_FRAME", - "CATCH_FRAME", - "STOP_FRAME", - "CAF_BLACKHOLE", - "BLACKHOLE", - "BLACKHOLE_BQ", - "SE_BLACKHOLE", - "SE_CAF_BLACKHOLE", - "MVAR", - "ARR_WORDS", - "MUT_ARR_PTRS_CLEAN", - "MUT_ARR_PTRS_DIRTY", - "MUT_ARR_PTRS_FROZEN", - "MUT_VAR_CLEAN", - "MUT_VAR_DIRTY", - "MUT_CONS", - "WEAK", - "FOREIGN", - "STABLE_NAME", - "TSO", - "BLOCKED_FETCH", - "FETCH_ME", - "FETCH_ME_BQ", - "RBH", - "EVACUATED", - "REMOTE_REF", - "TVAR_WATCH_QUEUE", - "INVARIANT_CHECK_QUEUE", - "ATOMIC_INVARIANT", - "TVAR", - "TREC_CHUNK", - "TREC_HEADER", - "ATOMICALLY_FRAME", - "CATCH_RETRY_FRAME" -}; - - -char * -info_type(StgClosure *closure){ - return closure_type_names[get_itbl(closure)->type]; -} - -char * -info_type_by_ip(StgInfoTable *ip){ - return closure_type_names[ip->type]; -} - -void -info_hdr_type(StgClosure *closure, char *res){ - strcpy(res,closure_type_names[get_itbl(closure)->type]); -} - /* -------------------------------------------------------------------------- * Address printing code * @@ -1161,3 +1064,93 @@ void printObj( StgClosure *obj ) #endif /* DEBUG */ + +/* ----------------------------------------------------------------------------- + Closure types + + NOTE: must be kept in sync with the closure types in includes/ClosureTypes.h + -------------------------------------------------------------------------- */ + +char *closure_type_names[] = { + [INVALID_OBJECT] = "INVALID_OBJECT", + [CONSTR] = "CONSTR", + [CONSTR_1_0] = "CONSTR_1_0", + [CONSTR_0_1] = "CONSTR_0_1", + [CONSTR_2_0] = "CONSTR_2_0", + [CONSTR_1_1] = "CONSTR_1_1", + [CONSTR_0_2] = "CONSTR_0_2", + [CONSTR_STATIC] = "CONSTR_STATIC", + [CONSTR_NOCAF_STATIC] = "CONSTR_NOCAF_STATIC", + [FUN] = "FUN", + [FUN_1_0] = "FUN_1_0", + [FUN_0_1] = "FUN_0_1", + [FUN_2_0] = "FUN_2_0", + [FUN_1_1] = "FUN_1_1", + [FUN_0_2] = "FUN_0_2", + [FUN_STATIC] = "FUN_STATIC", + [THUNK] = "THUNK", + [THUNK_1_0] = "THUNK_1_0", + [THUNK_0_1] = "THUNK_0_1", + [THUNK_2_0] = "THUNK_2_0", + [THUNK_1_1] = "THUNK_1_1", + [THUNK_0_2] = "THUNK_0_2", + [THUNK_STATIC] = "THUNK_STATIC", + [THUNK_SELECTOR] = "THUNK_SELECTOR", + [BCO] = "BCO", + [AP] = "AP", + [PAP] = "PAP", + [AP_STACK] = "AP_STACK", + [IND] = "IND", + [IND_OLDGEN] = "IND_OLDGEN", + [IND_PERM] = "IND_PERM", + [IND_OLDGEN_PERM] = "IND_OLDGEN_PERM", + [IND_STATIC] = "IND_STATIC", + [RET_BCO] = "RET_BCO", + [RET_SMALL] = "RET_SMALL", + [RET_BIG] = "RET_BIG", + [RET_DYN] = "RET_DYN", + [RET_FUN] = "RET_FUN", + [UPDATE_FRAME] = "UPDATE_FRAME", + [CATCH_FRAME] = "CATCH_FRAME", + [STOP_FRAME] = "STOP_FRAME", + [CAF_BLACKHOLE] = "CAF_BLACKHOLE", + [BLACKHOLE] = "BLACKHOLE", + [MVAR_CLEAN] = "MVAR_CLEAN", + [MVAR_DIRTY] = "MVAR_DIRTY", + [ARR_WORDS] = "ARR_WORDS", + [MUT_ARR_PTRS_CLEAN] = "MUT_ARR_PTRS_CLEAN", + [MUT_ARR_PTRS_DIRTY] = "MUT_ARR_PTRS_DIRTY", + [MUT_ARR_PTRS_FROZEN0] = "MUT_ARR_PTRS_FROZEN0", + [MUT_ARR_PTRS_FROZEN] = "MUT_ARR_PTRS_FROZEN", + [MUT_VAR_CLEAN] = "MUT_VAR_CLEAN", + [MUT_VAR_DIRTY] = "MUT_VAR_DIRTY", + [WEAK] = "WEAK", + [STABLE_NAME] = "STABLE_NAME", + [TSO] = "TSO", + [TVAR_WATCH_QUEUE] = "TVAR_WATCH_QUEUE", + [INVARIANT_CHECK_QUEUE] = "INVARIANT_CHECK_QUEUE", + [ATOMIC_INVARIANT] = "ATOMIC_INVARIANT", + [TVAR] = "TVAR", + [TREC_CHUNK] = "TREC_CHUNK", + [TREC_HEADER] = "TREC_HEADER", + [ATOMICALLY_FRAME] = "ATOMICALLY_FRAME", + [CATCH_RETRY_FRAME] = "CATCH_RETRY_FRAME", + [CATCH_STM_FRAME] = "CATCH_STM_FRAME", + [WHITEHOLE] = "WHITEHOLE" +}; + +char * +info_type(StgClosure *closure){ + return closure_type_names[get_itbl(closure)->type]; +} + +char * +info_type_by_ip(StgInfoTable *ip){ + return closure_type_names[ip->type]; +} + +void +info_hdr_type(StgClosure *closure, char *res){ + strcpy(res,closure_type_names[get_itbl(closure)->type]); +} + diff --git a/rts/Printer.h b/rts/Printer.h index 52c1c3e..f627049 100644 --- a/rts/Printer.h +++ b/rts/Printer.h @@ -12,6 +12,12 @@ extern void printPtr ( StgPtr p ); extern void printObj ( StgClosure *obj ); +extern char * closure_type_names[]; + +void info_hdr_type ( StgClosure *closure, char *res ); +char * info_type ( StgClosure *closure ); +char * info_type_by_ip ( StgInfoTable *ip ); + #ifdef DEBUG extern void prettyPrintClosure (StgClosure *obj); extern void printClosure ( StgClosure *obj ); @@ -19,10 +25,6 @@ extern StgPtr printStackObj ( StgPtr sp ); extern void printStackChunk ( StgPtr sp, StgPtr spLim ); extern void printTSO ( StgTSO *tso ); -void info_hdr_type ( StgClosure *closure, char *res ); -char * info_type ( StgClosure *closure ); -char * info_type_by_ip ( StgInfoTable *ip ); - extern void DEBUG_LoadSymbols( char *name ); extern const char *lookupGHCName( void *addr ); diff --git a/rts/ProfHeap.c b/rts/ProfHeap.c index 8d98438..f446d0b 100644 --- a/rts/ProfHeap.c +++ b/rts/ProfHeap.c @@ -95,86 +95,6 @@ static void dumpCensus( Census *census ); static rtsBool closureSatisfiesConstraints( StgClosure* p ); /* ---------------------------------------------------------------------------- - Closure Type Profiling; - ------------------------------------------------------------------------- */ - -#ifndef PROFILING -static char *type_names[] = { - "INVALID_OBJECT", - "CONSTR", - "CONSTR_1_0", - "CONSTR_0_1", - "CONSTR_2_0", - "CONSTR_1_1", - "CONSTR_0_2", - "CONSTR_STATIC", - "CONSTR_NOCAF_STATIC", - "FUN", - "FUN_1_0", - "FUN_0_1", - "FUN_2_0", - "FUN_1_1", - "FUN_0_2", - "FUN_STATIC", - "THUNK", - "THUNK_1_0", - "THUNK_0_1", - "THUNK_2_0", - "THUNK_1_1", - "THUNK_0_2", - "THUNK_STATIC", - "THUNK_SELECTOR", - "BCO", - "AP", - "PAP", - "AP_STACK", - "IND", - "IND_OLDGEN", - "IND_PERM", - "IND_OLDGEN_PERM", - "IND_STATIC", - "RET_BCO", - "RET_SMALL", - "RET_BIG", - "RET_DYN", - "RET_FUN", - "UPDATE_FRAME", - "CATCH_FRAME", - "STOP_FRAME", - "CAF_BLACKHOLE", - "BLACKHOLE", - "MVAR_CLEAN", - "MVAR_DIRTY", - "ARR_WORDS", - "MUT_ARR_PTRS_CLEAN", - "MUT_ARR_PTRS_DIRTY", - "MUT_ARR_PTRS_FROZEN0", - "MUT_ARR_PTRS_FROZEN", - "MUT_VAR_CLEAN", - "MUT_VAR_DIRTY", - "WEAK", - "STABLE_NAME", - "TSO", - "BLOCKED_FETCH", - "FETCH_ME", - "FETCH_ME_BQ", - "RBH", - "REMOTE_REF", - "TVAR_WATCH_QUEUE", - "INVARIANT_CHECK_QUEUE", - "ATOMIC_INVARIANT", - "TVAR", - "TREC_CHUNK", - "TREC_HEADER", - "ATOMICALLY_FRAME", - "CATCH_RETRY_FRAME", - "CATCH_STM_FRAME", - "WHITEHOLE", - "N_CLOSURE_TYPES" - }; -#endif - -/* ---------------------------------------------------------------------------- * Find the "closure identity", which is a unique pointer reresenting * the band to which this closure's heap space is attributed in the * heap profile. @@ -217,7 +137,7 @@ closureIdentity( StgClosure *p ) case CONSTR_NOCAF_STATIC: return GET_CON_DESC(itbl_to_con_itbl(info)); default: - return type_names[info->type]; + return closure_type_names[info->type]; } } -- 1.7.10.4