Commit b3239bef authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Make ghci work with libraries compiled with -ticky

This is a follow up to the patch tha fixes Trac #3439.
We had forgotten the dynamic linker, which needs to
know all these ticky symbols too.
parent 524c609b
......@@ -17,11 +17,26 @@
/* These should probably be automatically generated in order to
keep them consistent with the macros that use them (which are
defined in Cmm.h. */
defined in Cmm.h) */
/* same trick as in the former StgTicky.h: recycle the same declarations
for both extern decls (which are included everywhere)
and initializations (which only happen once) */
/* Here are all the counter declarations: */
/* If you change this list, make the corresponding change
in RTS_TICKY_SYMBOLS in rts/Linker.c */
/* These two are explicitly declared in rts/Ticky.c, and
hence should not be extern'd except when using this header
file from STG code; hence IN_STG_CODE */
#if IN_STG_CODE
extern W_ ticky_entry_ctrs[];
extern W_ top_ct[];
#endif
/* The rest are not explicity declared in rts/Ticky.c. Instead
we use the same trick as in the former StgTicky.h: recycle the
same declarations for both extern decls (which are included everywhere)
and initializations (which only happen once)
TICKY_C is defined only in rts/Ticky.c */
#ifdef TICKY_C
#define INIT(ializer) = ializer
#define EXTERN
......@@ -30,8 +45,6 @@
#define EXTERN extern
#endif
/* Here are all the counter declarations: */
EXTERN StgInt ENT_VIA_NODE_ctr INIT(0);
EXTERN StgInt ENT_STATIC_THK_ctr INIT(0);
EXTERN StgInt ENT_DYN_THK_ctr INIT(0);
......
......@@ -553,8 +553,122 @@ typedef struct _RtsSymbolVal {
SymI_HasProto(stg_ap_pppppp_ret)
#endif
/* Modules compiled with -ticky may mention ticky counters */
/* This list should marry up with the one in $(TOP)/includes/stg/Ticky.h */
#define RTS_TICKY_SYMBOLS \
SymI_NeedsProto(ticky_entry_ctrs) \
SymI_NeedsProto(top_ct) \
\
SymI_HasProto(ENT_VIA_NODE_ctr) \
SymI_HasProto(ENT_STATIC_THK_ctr) \
SymI_HasProto(ENT_DYN_THK_ctr) \
SymI_HasProto(ENT_STATIC_FUN_DIRECT_ctr) \
SymI_HasProto(ENT_DYN_FUN_DIRECT_ctr) \
SymI_HasProto(ENT_STATIC_CON_ctr) \
SymI_HasProto(ENT_DYN_CON_ctr) \
SymI_HasProto(ENT_STATIC_IND_ctr) \
SymI_HasProto(ENT_DYN_IND_ctr) \
SymI_HasProto(ENT_PERM_IND_ctr) \
SymI_HasProto(ENT_PAP_ctr) \
SymI_HasProto(ENT_AP_ctr) \
SymI_HasProto(ENT_AP_STACK_ctr) \
SymI_HasProto(ENT_BH_ctr) \
SymI_HasProto(UNKNOWN_CALL_ctr) \
SymI_HasProto(SLOW_CALL_v_ctr) \
SymI_HasProto(SLOW_CALL_f_ctr) \
SymI_HasProto(SLOW_CALL_d_ctr) \
SymI_HasProto(SLOW_CALL_l_ctr) \
SymI_HasProto(SLOW_CALL_n_ctr) \
SymI_HasProto(SLOW_CALL_p_ctr) \
SymI_HasProto(SLOW_CALL_pv_ctr) \
SymI_HasProto(SLOW_CALL_pp_ctr) \
SymI_HasProto(SLOW_CALL_ppv_ctr) \
SymI_HasProto(SLOW_CALL_ppp_ctr) \
SymI_HasProto(SLOW_CALL_pppv_ctr) \
SymI_HasProto(SLOW_CALL_pppp_ctr) \
SymI_HasProto(SLOW_CALL_ppppp_ctr) \
SymI_HasProto(SLOW_CALL_pppppp_ctr) \
SymI_HasProto(SLOW_CALL_OTHER_ctr) \
SymI_HasProto(ticky_slow_call_unevald) \
SymI_HasProto(SLOW_CALL_ctr) \
SymI_HasProto(MULTI_CHUNK_SLOW_CALL_ctr) \
SymI_HasProto(MULTI_CHUNK_SLOW_CALL_CHUNKS_ctr) \
SymI_HasProto(KNOWN_CALL_ctr) \
SymI_HasProto(KNOWN_CALL_TOO_FEW_ARGS_ctr) \
SymI_HasProto(KNOWN_CALL_EXTRA_ARGS_ctr) \
SymI_HasProto(SLOW_CALL_FUN_TOO_FEW_ctr) \
SymI_HasProto(SLOW_CALL_FUN_CORRECT_ctr) \
SymI_HasProto(SLOW_CALL_FUN_TOO_MANY_ctr) \
SymI_HasProto(SLOW_CALL_PAP_TOO_FEW_ctr) \
SymI_HasProto(SLOW_CALL_PAP_CORRECT_ctr) \
SymI_HasProto(SLOW_CALL_PAP_TOO_MANY_ctr) \
SymI_HasProto(SLOW_CALL_UNEVALD_ctr) \
SymI_HasProto(UPDF_OMITTED_ctr) \
SymI_HasProto(UPDF_PUSHED_ctr) \
SymI_HasProto(CATCHF_PUSHED_ctr) \
SymI_HasProto(UPDF_RCC_PUSHED_ctr) \
SymI_HasProto(UPDF_RCC_OMITTED_ctr) \
SymI_HasProto(UPD_SQUEEZED_ctr) \
SymI_HasProto(UPD_CON_IN_NEW_ctr) \
SymI_HasProto(UPD_CON_IN_PLACE_ctr) \
SymI_HasProto(UPD_PAP_IN_NEW_ctr) \
SymI_HasProto(UPD_PAP_IN_PLACE_ctr) \
SymI_HasProto(ALLOC_HEAP_ctr) \
SymI_HasProto(ALLOC_HEAP_tot) \
SymI_HasProto(ALLOC_FUN_ctr) \
SymI_HasProto(ALLOC_FUN_adm) \
SymI_HasProto(ALLOC_FUN_gds) \
SymI_HasProto(ALLOC_FUN_slp) \
SymI_HasProto(UPD_NEW_IND_ctr) \
SymI_HasProto(UPD_NEW_PERM_IND_ctr) \
SymI_HasProto(UPD_OLD_IND_ctr) \
SymI_HasProto(UPD_OLD_PERM_IND_ctr) \
SymI_HasProto(UPD_BH_UPDATABLE_ctr) \
SymI_HasProto(UPD_BH_SINGLE_ENTRY_ctr) \
SymI_HasProto(UPD_CAF_BH_UPDATABLE_ctr) \
SymI_HasProto(UPD_CAF_BH_SINGLE_ENTRY_ctr) \
SymI_HasProto(GC_SEL_ABANDONED_ctr) \
SymI_HasProto(GC_SEL_MINOR_ctr) \
SymI_HasProto(GC_SEL_MAJOR_ctr) \
SymI_HasProto(GC_FAILED_PROMOTION_ctr) \
SymI_HasProto(ALLOC_UP_THK_ctr) \
SymI_HasProto(ALLOC_SE_THK_ctr) \
SymI_HasProto(ALLOC_THK_adm) \
SymI_HasProto(ALLOC_THK_gds) \
SymI_HasProto(ALLOC_THK_slp) \
SymI_HasProto(ALLOC_CON_ctr) \
SymI_HasProto(ALLOC_CON_adm) \
SymI_HasProto(ALLOC_CON_gds) \
SymI_HasProto(ALLOC_CON_slp) \
SymI_HasProto(ALLOC_TUP_ctr) \
SymI_HasProto(ALLOC_TUP_adm) \
SymI_HasProto(ALLOC_TUP_gds) \
SymI_HasProto(ALLOC_TUP_slp) \
SymI_HasProto(ALLOC_BH_ctr) \
SymI_HasProto(ALLOC_BH_adm) \
SymI_HasProto(ALLOC_BH_gds) \
SymI_HasProto(ALLOC_BH_slp) \
SymI_HasProto(ALLOC_PRIM_ctr) \
SymI_HasProto(ALLOC_PRIM_adm) \
SymI_HasProto(ALLOC_PRIM_gds) \
SymI_HasProto(ALLOC_PRIM_slp) \
SymI_HasProto(ALLOC_PAP_ctr) \
SymI_HasProto(ALLOC_PAP_adm) \
SymI_HasProto(ALLOC_PAP_gds) \
SymI_HasProto(ALLOC_PAP_slp) \
SymI_HasProto(ALLOC_TSO_ctr) \
SymI_HasProto(ALLOC_TSO_adm) \
SymI_HasProto(ALLOC_TSO_gds) \
SymI_HasProto(ALLOC_TSO_slp) \
SymI_HasProto(RET_NEW_ctr) \
SymI_HasProto(RET_OLD_ctr) \
SymI_HasProto(RET_UNBOXED_TUP_ctr) \
SymI_HasProto(RET_SEMI_loads_avoided)
#define RTS_SYMBOLS \
Maybe_Stable_Names \
RTS_TICKY_SYMBOLS \
SymI_HasProto(StgReturn) \
SymI_HasProto(stg_enter_info) \
SymI_HasProto(stg_gc_void_info) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment