static void dump_SymbolHash ( SymbolHash *symtab, char *name ) { SymbolHashElem *iter; Symbol *sym; warn("Symtab \"%s\": %s\n", name, SymbolHash_empty(symtab) ? "EMPTY" : "" ); for ( iter = SymbolHash_first( symtab ); iter; iter = SymbolHash_next( iter ) ) { sym = (Symbol *)iter->value; if ( sym != SymbolHash_get( symtab, sym->name ) ) warn("ERROR: symbol %s not found in hash\n", sym->name); warn(" "); dump_Symbol( sym ); } }
void write_map_file( void ) { char *filename; FILE *file; SymbolHash *map_symtab; /* use first module filename to create global map file */ filename = get_map_filename( get_first_module( NULL )->filename ); /* set '.map' extension */ /* Create MAP file */ file = myfopen( filename, "w" ); if (file) { if (opts.verbose) puts("Creating map..."); /* BUG_0036, BUG_0051 */ map_symtab = select_symbols(cond_all_symbols); if (SymbolHash_empty(map_symtab)) { fputs("None.\n", file); } else { /* Write map symbols alphabetically */ SymbolHash_sort(map_symtab, SymbolHash_by_name); write_map_syms(file, map_symtab); fputs("\n\n", file); /* Write map symbols numerically */ SymbolHash_sort(map_symtab, SymbolHash_by_value); write_map_syms(file, map_symtab); } OBJ_DELETE(map_symtab); myfclose(file); } }