int dwfl_module_getsymtab (Dwfl_Module *mod) { if (mod == NULL) return -1; find_symtab (mod); if (mod->symerr == DWFL_E_NOERROR) return mod->syments; __libdwfl_seterrno (mod->symerr); return -1; }
/* Try to start up libdw on DEBUGFILE. */ static Dwfl_Error load_dw (Dwfl_Module *mod, struct dwfl_file *debugfile) { if (mod->e_type == ET_REL && !debugfile->relocated) { const Dwfl_Callbacks *const cb = mod->dwfl->callbacks; /* The debugging sections have to be relocated. */ if (cb->section_address == NULL) return DWFL_E_NOREL; Dwfl_Error error = __libdwfl_module_getebl (mod); if (error != DWFL_E_NOERROR) return error; find_symtab (mod); Dwfl_Error result = mod->symerr; if (result == DWFL_E_NOERROR) result = __libdwfl_relocate (mod, debugfile->elf, true); if (result != DWFL_E_NOERROR) return result; /* Don't keep the file descriptors around. */ if (mod->main.fd != -1 && elf_cntl (mod->main.elf, ELF_C_FDREAD) == 0) { close (mod->main.fd); mod->main.fd = -1; } if (debugfile->fd != -1 && elf_cntl (debugfile->elf, ELF_C_FDREAD) == 0) { close (debugfile->fd); debugfile->fd = -1; } } mod->dw = INTUSE(dwarf_begin_elf) (debugfile->elf, DWARF_C_READ, NULL); if (mod->dw == NULL) { int err = INTUSE(dwarf_errno) (); return err == DWARF_E_NO_DWARF ? DWFL_E_NO_DWARF : DWFL_E (LIBDW, err); } /* Until we have iterated through all CU's, we might do lazy lookups. */ mod->lazycu = 1; return DWFL_E_NOERROR; }
void flt_dump_symtab(const char *table_name) { CLASS *p; if (table_name == 0) { dump_init(); for (p = classes; p != 0; p = p->next) { flt_dump_symtab(p->name); } } else if ((p = find_symtab(table_name)) != 0) { dump_update(p->name); flt_message("%ctable %s\n", dump_meta_ch, p->name); dump_symtab(p, dump_class); dump_symtab(p, dump_keyword); } }