/*************************************************************************** * Copyright (c) 2006, Broadcom Corporation * All Rights Reserved * Confidential Property of Broadcom Corporation * * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE * AGREEMENT BETWEEN THE USER AND BROADCOM. YOU HAVE NO RIGHT TO USE OR * EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT. * * $brcm_Workfile: $ * $brcm_Revision: $ * $brcm_Date: $ * * Module Description: * * Revision History: * * $brcm_Log: $ * ***************************************************************************/ #define BDISPATCH_BYPASS #include "symbols.h" #undef BDISPATCH_BYPASS #include "projinc.h" #if CONFIG_SYMTABLE #include "bsymtable.h" /* this function does lookup in ram and rom symbol table and returns closest match */ const char * bsymtable_lookup(uint32_t addr, unsigned *offset) { static const char sym_unknown[] = ""; const char *rom_name = sym_unknown; unsigned rom_offset = (unsigned)-1; const char *ram_name = sym_unknown; unsigned ram_offset = (unsigned)-1; if (g_symtable_rom) { rom_name = bsymbol_lookup(g_symtable_rom, addr, &rom_offset); } if (g_symtable_ram) { ram_name = bsymbol_lookup(g_symtable_ram, addr, &ram_offset); } if (rom_offset < ram_offset) { *offset = rom_offset; return rom_name; } else { *offset = ram_offset; return ram_name; } } const char * bsymtable_get_name(uint32_t addr, char *buf, size_t buf_len) { unsigned offset; const char *name; name = bsymtable_lookup(addr, &offset); if (offset==0) { return name; } if (offset < 4096) { /* maximum function size */ snprintf(buf, buf_len, "%s+0x%x", name, offset); } else { snprintf(buf, buf_len, "0x%08x", addr); } return buf; } void bsymtable_init(void) { const bsymbol_table *map = bsymbol_fixup(); if (g_symtable_rom==NULL) { g_symtable_rom = map; } else { g_symtable_ram = map; } } #else /* DCONFIG_SYMTABLE */ void bsymtable_init(void) { return; } const char * bsymtable_lookup(uint32_t addr, unsigned *offset) { *offset = (unsigned)-1; return ""; } const char * bsymtable_get_name(uint32_t addr, char *buf, size_t buf_len) { snprintf(buf, buf_len, "0x%08x", addr); return buf; } #endif