/*************************************************************************** * 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: bsymbols.c $ * $brcm_Revision: 4 $ * $brcm_Date: 12/8/06 7:22p $ * * Module Description: * * Embeddeble profiler library * symbol module * * Revision History: * * $brcm_Log: /BSEAV/lib/bprofile/bsymbols.c $ * * 4 12/8/06 7:22p vsilyaev * PR 25997: Fixed offset handling * * 3 11/20/06 4:54p vsilyaev * PR 25997: Decoupled profiling and symbol table * * 2 11/16/06 6:59p vsilyaev * PR 25997: Added UCOS support * * 1 11/16/06 5:24p vsilyaev * PR 25997: Embeddable profiler * *******************************************************************************/ #include "bstd.h" #include "bkni.h" #include "bsymtable.h" BDBG_MODULE(bsymtable); static const bsymbol_entry b_sym_table[] = { #define B_SYM(addr,name) {addr,#name}, #include "bsymbols.inc" {0,""} }; static bsymbol_table bsymbol_map = { b_sym_table, (sizeof(b_sym_table)/sizeof(*b_sym_table))-1, 0 }; static int b_sym_strcmp(const char *s1, const char *s2) { for(;;) { int ch1 = *s1++; int diff = ch1 - *s2++; if (diff || /* strings are different */ ch1 == 0 /* end of string reached */ ) { return diff; /* return difference */ } } } static const bsymbol_entry s_dumby_entry[] = { {0, ""}}; static const bsymbol_table s_dumby_table = { s_dumby_entry, 1,0}; const bsymbol_table * bsymbol_fixup(void) { unsigned i; const unsigned size = (sizeof(b_sym_table)/sizeof(*b_sym_table))-1; static const char self[] = "bsymbol_fixup"; BDBG_MSG(("size = %u", size)); /* Don't fail, just exit */ if (size <= 1) { return &s_dumby_table; } BDBG_ASSERT(size>1); /* shall have more than one entry in the symbol table */ for(i=0;i0) { /* move all entries to discovered offset */ for(i=0;i