16 static struct symmap *mymap;
27 for (i = 0; i < nmap; i++) {
31 fprintf(stderr,
"ERROR: could not load debugfile from %s!\n",
45 debugfile_release(dbfile);
46 for (j = 0; j <
i; j++) {
48 debugfile_release(map[j].dbfile);
57 symlist_find(uint32_t addr,
struct symmap **map)
62 for (i = 0; i < mymapsize; i++) {
63 if (addr >= mymap[i].loaddr && addr <= mymap[i].hiaddr &&
81 uint32_t *loaddr, uint32_t *hiaddr)
83 struct lsymbol *lsymbol;
91 lsymbol = symlist_find(addr, NULL);
92 if (lsymbol && lsymbol->
symbol->
type == SYMBOL_TYPE_FUNCTION &&
93 symbol_get_location_addr(lsymbol->
symbol, &saddr) == 0 &&
97 printf(
"isfunc_2: addr=%x, name='%s'/%x\n",
98 addr, name, lsymbol->
symbol->base_addr);
102 if (strncmp(name,
"__INLINED", 9) == 0)
110 *namep = strdup(name);
112 if (loaddr || hiaddr) {
114 if (strcmp(name,
"find_vma") == 0 ||
115 strcmp(name,
"follow_page") == 0) {
123 fprintf(stderr,
"\n");
126 if (symbol_get_location_range(lsymbol->
symbol, &lo, &hi, NULL)) {
137 fprintf(stderr,
"%s range is pc %x/%x\n", name, lo, hi);
157 __symlist_string(uint32_t addr,
char *buf,
int bufsize,
int gdbstyle)
159 struct lsymbol *lsymbol;
162 unsigned long offset, ooffset;
170 lsymbol = symlist_find(addr, &map);
171 if (lsymbol == NULL) {
172 snprintf(buf, bufsize,
"0x%08x", addr);
190 fprintf(stderr,
"======== ADDR 0x%x\n", addr);
192 fprintf(stderr,
"\n========\n");
194 fprintf(stderr,
"non-inline returns %p (%s)\n",
195 osymbol, osymbol ? osymbol->
name :
"<UNDEF>");
198 snprintf(buf, bufsize,
"0x%08x", addr);
208 if (symbol_get_location_addr(lsymbol->
symbol, &saddr))
210 offset = addr - saddr;
226 if (symbol_get_location_addr(osymbol, &saddr))
228 ooffset = addr - saddr;
235 if (strncmp(name,
"__INLINED", 9) == 0) {
237 printf(
"addr=%x, name=%s...hacking!\n", addr, name);
246 assert(strncmp(oname,
"__INLINED", 9) != 0);
249 printf(
"addr=%x, name='%s'/%x, outername='%s'/%x, innername='%s'\n",
251 name, lsymbol->
symbol->base_addr,
252 oname, osymbol ? osymbol->base_addr : ~0U,
256 if (addr == 0xc011e552) {
263 fprintf(stderr,
"======== ADDR 0x%x\n", addr);
265 fprintf(stderr,
"\n========\n");
276 snprintf(buf, bufsize,
"0x%08x <%s%s>",
277 addr, prefix, oname);
279 snprintf(buf, bufsize,
"0x%08x <%s%s+%lu>",
280 addr, prefix, oname, ooffset);
290 if (strcmp(name, oname) != 0) {
295 snprintf(buf, bufsize,
"0x%08x <%s%s @ %s%s>",
296 addr, prefix, iname, prefix, oname);
298 snprintf(buf, bufsize,
"0x%08x <%s%s%+ld @ %s%s>",
299 addr, prefix, iname, offset, prefix, oname);
302 snprintf(buf, bufsize,
"0x%08x <%s%s @ %s%s+%lu>",
303 addr, prefix, iname, prefix, oname, ooffset);
305 snprintf(buf, bufsize,
"0x%08x <%s%s%+ld @ %s%s+%lu>",
306 addr, prefix, iname, offset, prefix, oname, ooffset);
315 snprintf(buf, bufsize,
"0x%08x <%s%s>",
318 snprintf(buf, bufsize,
"0x%08x <%s%s+%lu>",
319 addr, prefix, name, offset);
328 __symlist_string(addr, buf, bufsize, 1);
334 __symlist_string(addr, buf, bufsize, 0);
340 struct lsymbol *lsymbol;
343 for (i = 0; i < mymapsize; i++) {
344 if (mymap[i].dbfile) {
363 for (i = 0; i < mymapsize; i++) {
364 if (mymap[i].dbfile) {
365 debugfile_release(mymap[i].dbfile);
char * symbol_get_name_inline(struct symbol *symbol)
struct debugfile * debugfile_from_file(char *filename, char *root_prefix, struct array_list *debugfile_load_opts_list)
REFCNT lsymbol_release(struct lsymbol *lsymbol)
struct symbol * lsymbol_get_noninline_parent_symbol(struct lsymbol *lsymbol)
static uint64_t unsigned int i
struct lsymbol * debugfile_lookup_addr(struct debugfile *debugfile, ADDR addr)
void lsymbol_dump(struct lsymbol *lsymbol, struct dump_info *ud)
char * lsymbol_get_name(struct lsymbol *lsymbol)
struct dt_argp_state opts
struct lsymbol * debugfile_lookup_sym(struct debugfile *debugfile, char *name, const char *delim, struct rfilter *srcfile_filter, symbol_type_flag_t flags)
char * symbol_get_name(struct symbol *symbol)