/* Hash table mapping symbol names to StgStablePtr */
static /*Str*/HashTable *stablehash;
-#if defined(DEBUGGER)
-/* Hash table mapping info table ptrs to DataCon names */
-static HashTable *dchash;
-#endif
-
/* List of currently loaded objects */
ObjectCode *objects = NULL; /* initially empty */
SymX(stg_block_1) \
SymX(stg_block_takemvar) \
SymX(stg_block_putmvar) \
- SymX(stg_seq_frame_info) \
MAIN_CAP_SYM \
SymX(MallocFailHook) \
SymX(OnExitHook) \
SymX(insertStableSymbol) \
SymX(insertSymbol) \
SymX(lookupSymbol) \
- SymX(lookupDataCon) \
SymX(makeStablePtrzh_fast) \
SymX(minusIntegerzh_fast) \
SymX(mkApUpd0zh_fast) \
SymX(newMVarzh_fast) \
SymX(newMutVarzh_fast) \
SymX(newTVarzh_fast) \
+ SymX(noDuplicatezh_fast) \
SymX(atomicModifyMutVarzh_fast) \
SymX(newPinnedByteArrayzh_fast) \
SymX(newSpark) \
SymX(xorIntegerzh_fast) \
SymX(yieldzh_fast) \
SymX(stg_interp_constr_entry) \
- SymX(stg_interp_constr1_entry) \
- SymX(stg_interp_constr2_entry) \
- SymX(stg_interp_constr3_entry) \
- SymX(stg_interp_constr4_entry) \
- SymX(stg_interp_constr5_entry) \
- SymX(stg_interp_constr6_entry) \
- SymX(stg_interp_constr7_entry) \
- SymX(stg_interp_constr8_entry) \
SymX(allocateExec) \
SymX(freeExec) \
SymX(getAllocations) \
/* -----------------------------------------------------------------------------
* Insert symbols into hash tables, checking for duplicates.
*/
-int isSuffixOf(char* x, char* suffix);
static void ghciInsertStrHashTable ( char* obj_name,
HashTable *table,
if (lookupHashTable(table, (StgWord)key) == NULL)
{
insertStrHashTable(table, (StgWord)key, data);
-#if defined(DEBUGGER)
- // Insert the reverse pair in the datacon hash if it is a closure
- {
- if(isSuffixOf(key, "static_info") || isSuffixOf(key, "con_info")) {
- insertHashTable(dchash, (StgWord)data, key);
- // debugBelch("DChash addSymbol: %s (%p)\n", key, data);
- }
- }
-#endif
return;
}
debugBelch(
stablehash = allocStrHashTable();
symhash = allocStrHashTable();
-#if defined(DEBUGGER)
- dchash = allocHashTable();
-#endif
/* populate the symbol table with stuff from the RTS */
for (sym = rtsSyms; sym->lbl != NULL; sym++) {
}
}
-#if defined(DEBUGGER)
-char *
-lookupDataCon( StgWord addr )
-{
- void *val;
- initLinker() ;
- ASSERT(dchash != NULL);
- val = lookupHashTable(dchash, addr);
-
- return val;
-}
-#else
-char* lookupDataCon( StgWord addr )
-{
- return NULL;
-}
-#endif
-
static
__attribute((unused))
void *
#endif
-int isSuffixOf(char* x, char* suffix) {
- int suffix_len = strlen (suffix);
- int x_len = strlen (x);
-
- if (x_len == 0)
- return 0;
- if (suffix_len > x_len)
- return 0;
- if (suffix_len == 0)
- return 1;
-
- char* x_suffix = &x[strlen(x)-strlen(suffix)];
- return strcmp(x_suffix, suffix) == 0;
- }