Lines Matching full:re

252 static void add_dumpop(struct readelf *re, size_t si, const char *sn, int op,
294 static bool dump_ar(struct readelf *re, int);
295 static void dump_arm_attributes(struct readelf *re, uint8_t *p, uint8_t *pe);
296 static void dump_attributes(struct readelf *re);
298 static void dump_dwarf(struct readelf *re);
299 static void dump_dwarf_abbrev(struct readelf *re);
300 static void dump_dwarf_aranges(struct readelf *re);
301 static void dump_dwarf_block(struct readelf *re, uint8_t *b,
303 static void dump_dwarf_die(struct readelf *re, Dwarf_Die die, int level);
304 static void dump_dwarf_frame(struct readelf *re, int alt);
305 static void dump_dwarf_frame_inst(struct readelf *re, Dwarf_Cie cie,
308 static int dump_dwarf_frame_regtable(struct readelf *re, Dwarf_Fde fde,
310 static void dump_dwarf_frame_section(struct readelf *re, struct section *s,
312 static void dump_dwarf_info(struct readelf *re, Dwarf_Bool is_info);
313 static void dump_dwarf_macinfo(struct readelf *re);
314 static void dump_dwarf_line(struct readelf *re);
315 static void dump_dwarf_line_decoded(struct readelf *re);
316 static void dump_dwarf_loc(struct readelf *re, Dwarf_Loc *lr);
317 static void dump_dwarf_loclist(struct readelf *re);
318 static void dump_dwarf_pubnames(struct readelf *re);
319 static void dump_dwarf_ranges(struct readelf *re);
320 static void dump_dwarf_ranges_foreach(struct readelf *re, Dwarf_Die die,
322 static void dump_dwarf_str(struct readelf *re);
323 static void dump_eflags(struct readelf *re, uint64_t e_flags);
324 static bool dump_elf(struct readelf *re);
326 static void dump_dyn_val(struct readelf *re, GElf_Dyn *dyn, uint32_t stab);
327 static void dump_dynamic(struct readelf *re);
328 static void dump_liblist(struct readelf *re);
329 static void dump_mips_abiflags(struct readelf *re, struct section *s);
330 static void dump_mips_attributes(struct readelf *re, uint8_t *p, uint8_t *pe);
331 static void dump_mips_odk_reginfo(struct readelf *re, uint8_t *p, size_t sz);
332 static void dump_mips_options(struct readelf *re, struct section *s);
335 static void dump_mips_reginfo(struct readelf *re, struct section *s);
336 static void dump_mips_specific_info(struct readelf *re);
337 static void dump_notes(struct readelf *re);
338 static void dump_notes_content(struct readelf *re, const char *buf, size_t sz,
340 static void dump_notes_data(struct readelf *re, const char *name,
343 static void dump_svr4_hash64(struct readelf *re, struct section *s);
344 static void dump_gnu_hash(struct readelf *re, struct section *s);
345 static void dump_gnu_property_type_0(struct readelf *re, const char *buf,
347 static void dump_hash(struct readelf *re);
348 static void dump_phdr(struct readelf *re);
350 static void dump_section_groups(struct readelf *re);
351 static void dump_symtab(struct readelf *re, int i);
352 static void dump_symtabs(struct readelf *re);
354 static void dump_ver(struct readelf *re);
355 static void dump_verdef(struct readelf *re, int dump);
356 static void dump_verneed(struct readelf *re, int dump);
357 static void dump_versym(struct readelf *re);
359 static const char *dwarf_regname(struct readelf *re, unsigned int num);
360 static struct dumpop *find_dumpop(struct readelf *re, size_t si,
364 static char *get_regoff_str(struct readelf *re, Dwarf_Half reg,
366 static const char *get_string(struct readelf *re, int strtab, size_t off);
367 static const char *get_symbol_name(struct readelf *re, int symtab, int i);
368 static uint64_t get_symbol_value(struct readelf *re, int symtab, int i);
369 static void load_sections(struct readelf *re);
389 static void search_loclist_at(struct readelf *re, Dwarf_Die die,
392 static void search_ver(struct readelf *re);
394 static void set_cu_context(struct readelf *re, Dwarf_Half psize,
402 static void unload_sections(struct readelf *re);
2261 dump_ehdr(struct readelf *re) in dump_ehdr() argument
2271 printf("%.2x ", re->ehdr.e_ident[i]); in dump_ehdr()
2275 printf("%-37s%s\n", " Class:", elf_class(re->ehdr.e_ident[EI_CLASS])); in dump_ehdr()
2278 printf("%-37s%s\n", " Data:", elf_endian(re->ehdr.e_ident[EI_DATA])); in dump_ehdr()
2281 printf("%-37s%d %s\n", " Version:", re->ehdr.e_ident[EI_VERSION], in dump_ehdr()
2282 elf_ver(re->ehdr.e_ident[EI_VERSION])); in dump_ehdr()
2285 printf("%-37s%s\n", " OS/ABI:", elf_osabi(re->ehdr.e_ident[EI_OSABI])); in dump_ehdr()
2288 printf("%-37s%d\n", " ABI Version:", re->ehdr.e_ident[EI_ABIVERSION]); in dump_ehdr()
2291 printf("%-37s%s\n", " Type:", elf_type(re->ehdr.e_type)); in dump_ehdr()
2294 printf("%-37s%s\n", " Machine:", elf_machine(re->ehdr.e_machine)); in dump_ehdr()
2297 printf("%-37s%#x\n", " Version:", re->ehdr.e_version); in dump_ehdr()
2301 (uintmax_t)re->ehdr.e_entry); in dump_ehdr()
2305 (uintmax_t)re->ehdr.e_phoff); in dump_ehdr()
2309 (uintmax_t)re->ehdr.e_shoff); in dump_ehdr()
2312 printf("%-37s%#x", " Flags:", re->ehdr.e_flags); in dump_ehdr()
2313 dump_eflags(re, re->ehdr.e_flags); in dump_ehdr()
2318 re->ehdr.e_ehsize); in dump_ehdr()
2322 re->ehdr.e_phentsize); in dump_ehdr()
2325 printf("%-37s%u", " Number of program headers:", re->ehdr.e_phnum); in dump_ehdr()
2326 if (re->ehdr.e_phnum == PN_XNUM) { in dump_ehdr()
2328 if (elf_getphnum(re->elf, &phnum)) in dump_ehdr()
2335 re->ehdr.e_shentsize); in dump_ehdr()
2338 printf("%-37s%u", " Number of section headers:", re->ehdr.e_shnum); in dump_ehdr()
2339 if (re->ehdr.e_shnum == SHN_UNDEF) { in dump_ehdr()
2341 if (elf_getshnum(re->elf, &shnum)) in dump_ehdr()
2348 re->ehdr.e_shstrndx); in dump_ehdr()
2349 if (re->ehdr.e_shstrndx == SHN_XINDEX) { in dump_ehdr()
2351 if (elf_getshstrndx(re->elf, &shstrndx)) in dump_ehdr()
2358 dump_eflags(struct readelf *re, uint64_t e_flags) in dump_eflags() argument
2364 switch (re->ehdr.e_machine) { in dump_eflags()
2466 dump_phdr(struct readelf *re) in dump_phdr() argument
2475 #define PH_CT phdr_type(re->ehdr.e_machine, phdr.p_type), \ in dump_phdr()
2484 if (elf_getphnum(re->elf, &phnum) == 0) { in dump_phdr()
2493 printf("\nElf file type is %s", elf_type(re->ehdr.e_type)); in dump_phdr()
2494 printf("\nEntry point 0x%jx\n", (uintmax_t)re->ehdr.e_entry); in dump_phdr()
2496 (uintmax_t)phnum, (uintmax_t)re->ehdr.e_phoff); in dump_phdr()
2500 if (re->ec == ELFCLASS32) in dump_phdr()
2502 else if (re->options & RE_WW) in dump_phdr()
2508 if (gelf_getphdr(re->elf, i, &phdr) != &phdr) { in dump_phdr()
2513 if (re->ec == ELFCLASS32) in dump_phdr()
2516 else if (re->options & RE_WW) in dump_phdr()
2524 if ((rawfile = elf_rawfile(re->elf, &size)) == NULL) { in dump_phdr()
2538 if (re->shnum == 0) in dump_phdr()
2543 if (gelf_getphdr(re->elf, i, &phdr) != &phdr) { in dump_phdr()
2549 for (j = 1; (size_t)j < re->shnum; j++) { in dump_phdr()
2550 if (re->sl[j].off < phdr.p_offset) in dump_phdr()
2552 if (re->sl[j].off + re->sl[j].sz > in dump_phdr()
2554 re->sl[j].type != SHT_NOBITS) in dump_phdr()
2556 if (re->sl[j].addr < phdr.p_vaddr || in dump_phdr()
2557 re->sl[j].addr + re->sl[j].sz > in dump_phdr()
2561 (re->sl[j].flags & SHF_TLS) == 0) in dump_phdr()
2563 printf("%s ", re->sl[j].name); in dump_phdr()
2572 section_flags(struct readelf *re, struct section *s) in section_flags() argument
2579 nb = re->ec == ELFCLASS32 ? 8 : 16; in section_flags()
2580 if (re->options & RE_T) { in section_flags()
2588 if (re->options & RE_T) { in section_flags()
2595 if (re->options & RE_T && p > nb + 4) in section_flags()
2603 dump_shdr(struct readelf *re) in dump_shdr() argument
2616 #define S_CT i, s->name, section_type(re->ehdr.e_machine, s->type), \ in dump_shdr()
2618 (uintmax_t)s->entsize, section_flags(re, s), \ in dump_shdr()
2620 #define ST_CT i, s->name, section_type(re->ehdr.e_machine, s->type), \ in dump_shdr()
2623 (uintmax_t)s->align, section_flags(re, s) in dump_shdr()
2624 #define ST_CTL i, s->name, section_type(re->ehdr.e_machine, s->type), \ in dump_shdr()
2627 (uintmax_t)s->align, section_flags(re, s) in dump_shdr()
2629 if (re->shnum == 0) { in dump_shdr()
2634 (uintmax_t)re->shnum, (uintmax_t)re->ehdr.e_shoff); in dump_shdr()
2636 if (re->ec == ELFCLASS32) { in dump_shdr()
2637 if (re->options & RE_T) in dump_shdr()
2643 } else if (re->options & RE_WW) { in dump_shdr()
2644 if (re->options & RE_T) in dump_shdr()
2651 if (re->options & RE_T) in dump_shdr()
2658 for (i = 0; (size_t)i < re->shnum; i++) { in dump_shdr()
2659 s = &re->sl[i]; in dump_shdr()
2660 if (re->ec == ELFCLASS32) { in dump_shdr()
2661 if (re->options & RE_T) in dump_shdr()
2666 if (re->options & RE_WW) in dump_shdr()
2674 } else if (re->options & RE_WW) { in dump_shdr()
2675 if (re->options & RE_T) in dump_shdr()
2684 if (re->options & RE_T) in dump_shdr()
2694 if ((re->options & RE_T) == 0) in dump_shdr()
2729 dump_dynamic(struct readelf *re) in dump_dynamic() argument
2738 for (i = 0; (size_t)i < re->shnum; i++) { in dump_dynamic()
2739 s = &re->sl[i]; in dump_dynamic()
2772 if (re->ec == ELFCLASS32) in dump_dynamic()
2781 if (re->ec == ELFCLASS32) in dump_dynamic()
2785 printf(" %-20s", dt_type(re->ehdr.e_machine, in dump_dynamic()
2788 dump_dyn_val(re, &dyn, s->link); in dump_dynamic()
2811 dyn_str(struct readelf *re, uint32_t stab, uint64_t d_val) in dyn_str() argument
2817 else if ((name = elf_strptr(re->elf, stab, d_val)) == NULL) { in dyn_str()
2826 dump_arch_dyn_val(struct readelf *re, GElf_Dyn *dyn) in dump_arch_dyn_val() argument
2828 switch (re->ehdr.e_machine) { in dump_arch_dyn_val()
2951 dump_dyn_val(struct readelf *re, GElf_Dyn *dyn, uint32_t stab) in dump_dyn_val() argument
2957 dump_arch_dyn_val(re, dyn); in dump_dyn_val()
2966 name = dyn_str(re, stab, dyn->d_un.d_val); in dump_dyn_val()
3029 printf(" %s\n", dt_type(re->ehdr.e_machine, dyn->d_un.d_val)); in dump_dyn_val()
3046 dump_rel(struct readelf *re, struct section *s, Elf_Data *d) in dump_rel() argument
3055 if (s->link >= re->shnum) in dump_rel()
3060 elftc_reloc_type_str(re->ehdr.e_machine, \ in dump_rel()
3063 elftc_reloc_type_str(re->ehdr.e_machine, type), \ in dump_rel()
3067 if (re->ec == ELFCLASS32) in dump_rel()
3070 if (re->options & RE_WW) in dump_rel()
3083 symname = get_symbol_name(re, s->link, GELF_R_SYM(r.r_info)); in dump_rel()
3084 symval = get_symbol_value(re, s->link, GELF_R_SYM(r.r_info)); in dump_rel()
3085 if (re->ec == ELFCLASS32) { in dump_rel()
3091 if (re->ehdr.e_machine == EM_MIPS) { in dump_rel()
3098 if (re->options & RE_WW) in dump_rel()
3104 if (re->ehdr.e_machine == EM_MIPS) { in dump_rel()
3105 if (re->options & RE_WW) { in dump_rel()
3129 dump_rela(struct readelf *re, struct section *s, Elf_Data *d) in dump_rela() argument
3138 if (s->link >= re->shnum) in dump_rela()
3144 elftc_reloc_type_str(re->ehdr.e_machine, \ in dump_rela()
3147 elftc_reloc_type_str(re->ehdr.e_machine, type), \ in dump_rela()
3151 if (re->ec == ELFCLASS32) in dump_rela()
3154 if (re->options & RE_WW) in dump_rela()
3167 symname = get_symbol_name(re, s->link, GELF_R_SYM(r.r_info)); in dump_rela()
3168 symval = get_symbol_value(re, s->link, GELF_R_SYM(r.r_info)); in dump_rela()
3169 if (re->ec == ELFCLASS32) { in dump_rela()
3176 if (re->ehdr.e_machine == EM_MIPS) { in dump_rela()
3183 if (re->options & RE_WW) in dump_rela()
3190 if (re->ehdr.e_machine == EM_MIPS) { in dump_rela()
3191 if (re->options & RE_WW) { in dump_rela()
3215 dump_reloc(struct readelf *re) in dump_reloc() argument
3221 for (i = 0; (size_t)i < re->shnum; i++) { in dump_reloc()
3222 s = &re->sl[i]; in dump_reloc()
3233 dump_rel(re, s, d); in dump_reloc()
3235 dump_rela(re, s, d); in dump_reloc()
3241 dump_symtab(struct readelf *re, int i) in dump_symtab() argument
3251 s = &re->sl[i]; in dump_symtab()
3252 if (s->link >= re->shnum) in dump_symtab()
3278 printf(" %-7s", st_type(re->ehdr.e_machine, in dump_symtab()
3279 re->ehdr.e_ident[EI_OSABI], GELF_ST_TYPE(sym.st_info))); in dump_symtab()
3283 if ((name = elf_strptr(re->elf, stab, sym.st_name)) != NULL) in dump_symtab()
3286 if (s->type == SHT_DYNSYM && re->ver != NULL && in dump_symtab()
3287 re->vs != NULL && re->vs[j] > 1) { in dump_symtab()
3288 vs = re->vs[j] & VERSYM_VERSION; in dump_symtab()
3289 if (vs >= re->ver_sz || re->ver[vs].name == NULL) { in dump_symtab()
3293 if (re->vs[j] & VERSYM_HIDDEN || re->ver[vs].type == 0) in dump_symtab()
3294 printf("@%s (%d)", re->ver[vs].name, vs); in dump_symtab()
3296 printf("@@%s (%d)", re->ver[vs].name, vs); in dump_symtab()
3304 dump_symtabs(struct readelf *re) in dump_symtabs() argument
3317 if (re->options & RE_DD) { in dump_symtabs()
3319 for (i = 0; (size_t)i < re->shnum; i++) in dump_symtabs()
3320 if (re->sl[i].type == SHT_DYNAMIC) { in dump_symtabs()
3321 s = &re->sl[i]; in dump_symtabs()
3351 for (i = 0; (size_t)i < re->shnum; i++) { in dump_symtabs()
3352 s = &re->sl[i]; in dump_symtabs()
3354 if (re->options & RE_DD) { in dump_symtabs()
3356 dump_symtab(re, i); in dump_symtabs()
3360 dump_symtab(re, i); in dump_symtabs()
3426 dump_svr4_hash64(struct readelf *re, struct section *s) in dump_svr4_hash64() argument
3450 if (gelf_xlatetom(re->elf, &dst, d, in dump_svr4_hash64()
3451 re->ehdr.e_ident[EI_DATA]) != &dst) { in dump_svr4_hash64()
3498 dump_gnu_hash(struct readelf *re, struct section *s) in dump_gnu_hash() argument
3525 if (s->link >= re->shnum) in dump_gnu_hash()
3527 ds = &re->sl[s->link]; in dump_gnu_hash()
3536 (re->ec == ELFCLASS32 ? sizeof(uint32_t) : sizeof(uint64_t)) + in dump_gnu_hash()
3541 bucket = buf + (re->ec == ELFCLASS32 ? maskwords : maskwords * 2); in dump_gnu_hash()
3612 dump_gnu_property_type_0(struct readelf *re, const char *buf, size_t sz) in dump_gnu_property_type_0() argument
3638 re->ehdr.e_machine) { in dump_gnu_property_type_0()
3646 re->ehdr.e_machine); in dump_gnu_property_type_0()
3680 dump_hash(struct readelf *re) in dump_hash() argument
3685 for (i = 0; (size_t) i < re->shnum; i++) { in dump_hash()
3686 s = &re->sl[i]; in dump_hash()
3689 dump_gnu_hash(re, s); in dump_hash()
3690 else if (re->ehdr.e_machine == EM_ALPHA && in dump_hash()
3692 dump_svr4_hash64(re, s); in dump_hash()
3700 dump_notes(struct readelf *re) in dump_notes() argument
3709 if (re->ehdr.e_type == ET_CORE) { in dump_notes()
3714 if (elf_getphnum(re->elf, &phnum) == 0) { in dump_notes()
3720 if ((rawfile = elf_rawfile(re->elf, &filesize)) == NULL) { in dump_notes()
3725 if (gelf_getphdr(re->elf, i, &phdr) != &phdr) { in dump_notes()
3736 dump_notes_content(re, rawfile + phdr.p_offset, in dump_notes()
3746 for (i = 0; (size_t) i < re->shnum; i++) { in dump_notes()
3747 s = &re->sl[i]; in dump_notes()
3757 dump_notes_content(re, d->d_buf, d->d_size, in dump_notes()
3808 dump_notes_data(struct readelf *re, const char *name, uint32_t type, in dump_notes_data() argument
3853 dump_gnu_property_type_0(re, buf, sz); in dump_notes_data()
3880 dump_notes_content(struct readelf *re, const char *buf, size_t sz, off_t off) in dump_notes_content() argument
3921 printf(" %s\n", note_type(name, re->ehdr.e_type, in dump_notes_content()
3923 dump_notes_data(re, name, note->n_type, buf, note->n_descsz); in dump_notes_content()
3939 while (x >= re->ver_sz) { \
3940 nv = realloc(re->ver, \
3941 sizeof(*re->ver) * re->ver_sz * 2); \
3944 free(re->ver); \
3947 re->ver = nv; \
3948 for (i = re->ver_sz; i < re->ver_sz * 2; i++) { \
3949 re->ver[i].name = NULL; \
3950 re->ver[i].type = 0; \
3952 re->ver_sz *= 2; \
3955 re->ver[x].name = n; \
3956 re->ver[x].type = t; \
3962 dump_verdef(struct readelf *re, int dump) in dump_verdef() argument
3973 if ((s = re->vd_s) == NULL) in dump_verdef()
3975 if (s->link >= re->shnum) in dump_verdef()
3978 if (re->ver == NULL) { in dump_verdef()
3979 re->ver_sz = 16; in dump_verdef()
3980 if ((re->ver = calloc(re->ver_sz, sizeof(*re->ver))) == in dump_verdef()
3985 re->ver[0].name = "*local*"; in dump_verdef()
3986 re->ver[1].name = "*global*"; in dump_verdef()
4016 name = get_string(re, s->link, vda->vda_name); in dump_verdef()
4037 dump_verneed(struct readelf *re, int dump) in dump_verneed() argument
4048 if ((s = re->vn_s) == NULL) in dump_verneed()
4050 if (s->link >= re->shnum) in dump_verneed()
4053 if (re->ver == NULL) { in dump_verneed()
4054 re->ver_sz = 16; in dump_verneed()
4055 if ((re->ver = calloc(re->ver_sz, sizeof(*re->ver))) == in dump_verneed()
4060 re->ver[0].name = "*local*"; in dump_verneed()
4061 re->ver[1].name = "*global*"; in dump_verneed()
4085 get_string(re, s->link, vn->vn_file), in dump_verneed()
4095 name = get_string(re, s->link, vna->vna_name); in dump_verneed()
4113 dump_versym(struct readelf *re) in dump_versym() argument
4118 if (re->vs_s == NULL || re->ver == NULL || re->vs == NULL) in dump_versym()
4120 printf("\nVersion symbol section (%s):\n", re->vs_s->name); in dump_versym()
4121 for (i = 0; i < re->vs_sz; i++) { in dump_versym()
4127 vs = re->vs[i] & VERSYM_VERSION; in dump_versym()
4128 if (vs >= re->ver_sz || re->ver[vs].name == NULL) { in dump_versym()
4129 warnx("invalid versym version index %u", re->vs[i]); in dump_versym()
4132 if (re->vs[i] & VERSYM_HIDDEN) in dump_versym()
4134 re->ver[re->vs[i] & VERSYM_VERSION].name); in dump_versym()
4136 printf(" %3x %-12s ", vs, re->ver[re->vs[i]].name); in dump_versym()
4142 dump_ver(struct readelf *re) in dump_ver() argument
4145 if (re->vs_s && re->ver && re->vs) in dump_ver()
4146 dump_versym(re); in dump_ver()
4147 if (re->vd_s) in dump_ver()
4148 dump_verdef(re, 1); in dump_ver()
4149 if (re->vn_s) in dump_ver()
4150 dump_verneed(re, 1); in dump_ver()
4154 search_ver(struct readelf *re) in search_ver() argument
4160 for (i = 0; (size_t) i < re->shnum; i++) { in search_ver()
4161 s = &re->sl[i]; in search_ver()
4163 re->vs_s = s; in search_ver()
4165 re->vn_s = s; in search_ver()
4167 re->vd_s = s; in search_ver()
4169 if (re->vd_s) in search_ver()
4170 dump_verdef(re, 0); in search_ver()
4171 if (re->vn_s) in search_ver()
4172 dump_verneed(re, 0); in search_ver()
4173 if (re->vs_s && re->ver != NULL) { in search_ver()
4175 if ((d = elf_getdata(re->vs_s->scn, NULL)) == NULL) { in search_ver()
4184 re->vs = d->d_buf; in search_ver()
4185 re->vs_sz = d->d_size / sizeof(Elf32_Half); in search_ver()
4201 dump_liblist(struct readelf *re) in dump_liblist() argument
4211 for (i = 0; (size_t) i < re->shnum; i++) { in dump_liblist()
4212 s = &re->sl[i]; in dump_liblist()
4215 if (s->link >= re->shnum) in dump_liblist()
4237 get_string(re, s->link, lib->l_name)); in dump_liblist()
4270 dump_section_groups(struct readelf *re) in dump_section_groups() argument
4279 for (i = 0; (size_t) i < re->shnum; i++) { in dump_section_groups()
4280 s = &re->sl[i]; in dump_section_groups()
4283 if (s->link >= re->shnum) in dump_section_groups()
4308 symname = get_symbol_name(re, s->link, s->info); in dump_section_groups()
4317 if (*w >= re->shnum) { in dump_section_groups()
4321 printf(" [%5u] %s\n", *w, re->sl[*w].name); in dump_section_groups()
4364 dump_arm_attributes(struct readelf *re, uint8_t *p, uint8_t *pe) in dump_arm_attributes() argument
4370 (void) re; in dump_arm_attributes()
4437 dump_mips_attributes(struct readelf *re, uint8_t *p, uint8_t *pe) in dump_mips_attributes() argument
4441 (void) re; in dump_mips_attributes()
4496 dump_attributes(struct readelf *re) in dump_attributes() argument
4505 for (i = 0; (size_t) i < re->shnum; i++) { in dump_attributes()
4506 s = &re->sl[i]; in dump_attributes()
4508 (re->ehdr.e_machine != EM_ARM || s->type != SHT_LOPROC + 3)) in dump_attributes()
4534 seclen = re->dw_decode(&p, 4); in dump_attributes()
4551 sublen = re->dw_decode(&p, 4); in dump_attributes()
4569 if (re->ehdr.e_machine == EM_ARM && in dump_attributes()
4571 dump_arm_attributes(re, p, sp + sublen); in dump_attributes()
4572 else if (re->ehdr.e_machine == EM_MIPS || in dump_attributes()
4573 re->ehdr.e_machine == EM_MIPS_RS3_LE) in dump_attributes()
4574 dump_mips_attributes(re, p, in dump_attributes()
4576 else if (re->ehdr.e_machine == EM_PPC) in dump_attributes()
4585 dump_mips_specific_info(struct readelf *re) in dump_mips_specific_info() argument
4591 for (i = 0; (size_t) i < re->shnum; i++) { in dump_mips_specific_info()
4592 s = &re->sl[i]; in dump_mips_specific_info()
4595 dump_mips_options(re, s); in dump_mips_specific_info()
4601 dump_mips_abiflags(re, s); in dump_mips_specific_info()
4607 for (i = 0; (size_t) i < re->shnum; i++) { in dump_mips_specific_info()
4608 s = &re->sl[i]; in dump_mips_specific_info()
4611 dump_mips_reginfo(re, s); in dump_mips_specific_info()
4616 dump_mips_abiflags(struct readelf *re, struct section *s) in dump_mips_abiflags() argument
4638 version = re->dw_decode(&p, 2); in dump_mips_abiflags()
4646 isa_level = re->dw_decode(&p, 1); in dump_mips_abiflags()
4647 isa_rev = re->dw_decode(&p, 1); in dump_mips_abiflags()
4648 gpr_size = re->dw_decode(&p, 1); in dump_mips_abiflags()
4649 cpr1_size = re->dw_decode(&p, 1); in dump_mips_abiflags()
4650 cpr2_size = re->dw_decode(&p, 1); in dump_mips_abiflags()
4651 fp_abi = re->dw_decode(&p, 1); in dump_mips_abiflags()
4652 isa_ext = re->dw_decode(&p, 4); in dump_mips_abiflags()
4653 ases = re->dw_decode(&p, 4); in dump_mips_abiflags()
4654 flags1 = re->dw_decode(&p, 4); in dump_mips_abiflags()
4655 flags2 = re->dw_decode(&p, 4); in dump_mips_abiflags()
4692 dump_mips_reginfo(struct readelf *re, struct section *s) in dump_mips_reginfo() argument
4711 dump_mips_odk_reginfo(re, d->d_buf, d->d_size); in dump_mips_reginfo()
4715 dump_mips_options(struct readelf *re, struct section *s) in dump_mips_options() argument
4743 kind = re->dw_decode(&p, 1); in dump_mips_options()
4744 size = re->dw_decode(&p, 1); in dump_mips_options()
4745 sndx = re->dw_decode(&p, 2); in dump_mips_options()
4746 info = re->dw_decode(&p, 4); in dump_mips_options()
4754 dump_mips_odk_reginfo(re, p, size); in dump_mips_options()
4825 dump_mips_odk_reginfo(struct readelf *re, uint8_t *p, size_t sz) in dump_mips_odk_reginfo() argument
4835 ri_gprmask = re->dw_decode(&p, 4); in dump_mips_odk_reginfo()
4837 if (re->ec == ELFCLASS64) in dump_mips_odk_reginfo()
4838 re->dw_decode(&p, 4); in dump_mips_odk_reginfo()
4840 ri_cprmask[i] = re->dw_decode(&p, 4); in dump_mips_odk_reginfo()
4841 if (re->ec == ELFCLASS32) in dump_mips_odk_reginfo()
4842 ri_gp_value = re->dw_decode(&p, 4); in dump_mips_odk_reginfo()
4844 ri_gp_value = re->dw_decode(&p, 8); in dump_mips_odk_reginfo()
4856 dump_arch_specific_info(struct readelf *re) in dump_arch_specific_info() argument
4859 dump_liblist(re); in dump_arch_specific_info()
4860 dump_attributes(re); in dump_arch_specific_info()
4862 switch (re->ehdr.e_machine) { in dump_arch_specific_info()
4865 dump_mips_specific_info(re); in dump_arch_specific_info()
4872 dwarf_regname(struct readelf *re, unsigned int num) in dwarf_regname() argument
4877 if ((rn = dwarf_reg(re->ehdr.e_machine, num)) != NULL) in dwarf_regname()
4886 dump_dwarf_line(struct readelf *re) in dump_dwarf_line() argument
4905 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_line()
4906 s = &re->sl[i]; in dump_dwarf_line()
4910 if ((size_t) i >= re->shnum) in dump_dwarf_line()
4923 while ((ret = dwarf_next_cu_header(re->dbg, NULL, NULL, NULL, NULL, in dump_dwarf_line()
4926 while (dwarf_siblingof(re->dbg, die, &die, &de) == DW_DLV_OK) { in dump_dwarf_line()
4942 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_line()
4946 length = re->dw_read(d, &offset, 4); in dump_dwarf_line()
4949 length = re->dw_read(d, &offset, 8); in dump_dwarf_line()
4955 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_line()
4961 version = re->dw_read(d, &offset, 2); in dump_dwarf_line()
4962 hdrlen = re->dw_read(d, &offset, dwarf_size); in dump_dwarf_line()
4963 minlen = re->dw_read(d, &offset, 1); in dump_dwarf_line()
4964 defstmt = re->dw_read(d, &offset, 1); in dump_dwarf_line()
4965 lbase = re->dw_read(d, &offset, 1); in dump_dwarf_line()
4966 lrange = re->dw_read(d, &offset, 1); in dump_dwarf_line()
4967 opbase = re->dw_read(d, &offset, 1); in dump_dwarf_line()
4978 (void) dwarf_get_address_size(re->dbg, &pointer_size, &de); in dump_dwarf_line()
4984 oplen = re->dw_read(d, &offset, 1); in dump_dwarf_line()
5048 address = re->dw_decode(&p, in dump_dwarf_line()
5115 udelta = re->dw_decode(&p, 2); in dump_dwarf_line()
5154 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_line()
5165 dump_dwarf_line_decoded(struct readelf *re) in dump_dwarf_line_decoded() argument
5178 while ((ret = dwarf_next_cu_header(re->dbg, NULL, NULL, NULL, NULL, in dump_dwarf_line_decoded()
5180 if (dwarf_siblingof(re->dbg, NULL, &die, &de) != DW_DLV_OK) in dump_dwarf_line_decoded()
5214 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_line_decoded()
5219 dump_dwarf_die(struct readelf *re, Dwarf_Die die, int level) in dump_dwarf_die() argument
5402 dump_dwarf_block(re, v_block->bl_data, v_block->bl_len); in dump_dwarf_die()
5418 dump_dwarf_block(re, v_expr, v_udata); in dump_dwarf_die()
5430 v_sig = re->dw_decode(&p, 8); in dump_dwarf_die()
5484 dump_dwarf_die(re, ret_die, level + 1); in dump_dwarf_die()
5488 ret = dwarf_siblingof_b(re->dbg, die, &ret_die, is_info, &de); in dump_dwarf_die()
5492 dump_dwarf_die(re, ret_die, level); in dump_dwarf_die()
5494 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_die()
5498 set_cu_context(struct readelf *re, Dwarf_Half psize, Dwarf_Half osize, in set_cu_context() argument
5502 re->cu_psize = psize; in set_cu_context()
5503 re->cu_osize = osize; in set_cu_context()
5504 re->cu_ver = ver; in set_cu_context()
5508 dump_dwarf_info(struct readelf *re, Dwarf_Bool is_info) in dump_dwarf_info() argument
5526 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_info()
5527 s = &re->sl[i]; in dump_dwarf_info()
5531 if ((size_t) i >= re->shnum) in dump_dwarf_info()
5537 while ((ret = dwarf_next_cu_header_c(re->dbg, is_info, NULL, in dump_dwarf_info()
5540 set_cu_context(re, pointer_size, off_size, version); in dump_dwarf_info()
5542 while (dwarf_siblingof_b(re->dbg, die, &die, is_info, in dump_dwarf_info()
5575 sig = re->dw_decode(&p, 8); in dump_dwarf_info()
5593 dump_dwarf_die(re, die, 0); in dump_dwarf_info()
5599 } while (dwarf_next_types_section(re->dbg, &de) == DW_DLV_OK); in dump_dwarf_info()
5603 dump_dwarf_abbrev(struct readelf *re) in dump_dwarf_abbrev() argument
5617 while ((ret = dwarf_next_cu_header(re->dbg, NULL, NULL, &aboff, in dump_dwarf_abbrev()
5621 while ((ret = dwarf_get_abbrev(re->dbg, aboff, &ab, &length, in dump_dwarf_abbrev()
5624 dwarf_dealloc(re->dbg, ab, DW_DLA_ABBREV); in dump_dwarf_abbrev()
5670 dwarf_dealloc(re->dbg, ab, DW_DLA_ABBREV); in dump_dwarf_abbrev()
5680 dump_dwarf_pubnames(struct readelf *re) in dump_dwarf_pubnames() argument
5696 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_pubnames()
5697 s = &re->sl[i]; in dump_dwarf_pubnames()
5701 if ((size_t) i >= re->shnum) in dump_dwarf_pubnames()
5716 length = re->dw_read(d, &offset, 4); in dump_dwarf_pubnames()
5719 length = re->dw_read(d, &offset, 8); in dump_dwarf_pubnames()
5728 nt_version = re->dw_read(d, &offset, 2); in dump_dwarf_pubnames()
5729 nt_cu_offset = re->dw_read(d, &offset, dwarf_size); in dump_dwarf_pubnames()
5730 nt_cu_length = re->dw_read(d, &offset, dwarf_size); in dump_dwarf_pubnames()
5738 if (dwarf_get_globals(re->dbg, &globs, &cnt, &de) != DW_DLV_OK) { in dump_dwarf_pubnames()
5760 dump_dwarf_aranges(struct readelf *re) in dump_dwarf_aranges() argument
5776 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_aranges()
5777 s = &re->sl[i]; in dump_dwarf_aranges()
5781 if ((size_t) i >= re->shnum) in dump_dwarf_aranges()
5796 length = re->dw_read(d, &offset, 4); in dump_dwarf_aranges()
5799 length = re->dw_read(d, &offset, 8); in dump_dwarf_aranges()
5808 as_version = re->dw_read(d, &offset, 2); in dump_dwarf_aranges()
5809 as_cu_offset = re->dw_read(d, &offset, dwarf_size); in dump_dwarf_aranges()
5810 as_addrsz = re->dw_read(d, &offset, 1); in dump_dwarf_aranges()
5811 as_segsz = re->dw_read(d, &offset, 1); in dump_dwarf_aranges()
5819 if (dwarf_get_aranges(re->dbg, &aranges, &cnt, &de) != DW_DLV_OK) { in dump_dwarf_aranges()
5838 dump_dwarf_ranges_foreach(struct readelf *re, Dwarf_Die die, Dwarf_Addr base) in dump_dwarf_ranges_foreach() argument
5870 if (dwarf_get_ranges(re->dbg, off, &ranges, &cnt, in dump_dwarf_ranges_foreach()
5884 if (re->ec == ELFCLASS32) in dump_dwarf_ranges_foreach()
5901 dump_dwarf_ranges_foreach(re, ret_die, base); in dump_dwarf_ranges_foreach()
5904 ret = dwarf_siblingof(re->dbg, die, &ret_die, &de); in dump_dwarf_ranges_foreach()
5908 dump_dwarf_ranges_foreach(re, ret_die, base); in dump_dwarf_ranges_foreach()
5910 dwarf_dealloc(re->dbg, die, DW_DLA_DIE); in dump_dwarf_ranges_foreach()
5914 dump_dwarf_ranges(struct readelf *re) in dump_dwarf_ranges() argument
5925 if (dwarf_get_ranges(re->dbg, 0, &ranges, &cnt, &bytecnt, &de) != in dump_dwarf_ranges()
5930 if (re->ec == ELFCLASS32) in dump_dwarf_ranges()
5935 while ((ret = dwarf_next_cu_header(re->dbg, NULL, NULL, NULL, NULL, in dump_dwarf_ranges()
5938 if (dwarf_siblingof(re->dbg, die, &die, &de) != DW_DLV_OK) in dump_dwarf_ranges()
5952 dump_dwarf_ranges_foreach(re, die, (Dwarf_Addr) lowpc); in dump_dwarf_ranges()
5958 dump_dwarf_macinfo(struct readelf *re) in dump_dwarf_macinfo() argument
5973 while (dwarf_get_macro_details(re->dbg, offset, _MAX_MACINFO_ENTRY, in dump_dwarf_macinfo()
6009 dump_dwarf_frame_inst(struct readelf *re, Dwarf_Cie cie, uint8_t *insts, in dump_dwarf_frame_inst() argument
6051 dwarf_regname(re, oplist[i].fp_register), in dump_dwarf_frame_inst()
6056 dwarf_regname(re, oplist[i].fp_register)); in dump_dwarf_frame_inst()
6071 dwarf_regname(re, oplist[i].fp_register), in dump_dwarf_frame_inst()
6076 dwarf_regname(re, oplist[i].fp_register), in dump_dwarf_frame_inst()
6081 dwarf_regname(re, oplist[i].fp_register)); in dump_dwarf_frame_inst()
6099 get_regoff_str(struct readelf *re, Dwarf_Half reg, Dwarf_Addr off) in get_regoff_str() argument
6108 snprintf(rs, sizeof(rs), "%s%+jd", dwarf_regname(re, reg), in get_regoff_str()
6115 dump_dwarf_frame_regtable(struct readelf *re, Dwarf_Fde fde, Dwarf_Addr pc, in dump_dwarf_frame_regtable() argument
6160 dwarf_regname(re, (unsigned int) i)); in dump_dwarf_frame_regtable()
6180 printf("%-8s ", get_regoff_str(re, RT(0).dw_regnum, in dump_dwarf_frame_regtable()
6184 printf("%-5s", get_regoff_str(re, in dump_dwarf_frame_regtable()
6202 dump_dwarf_frame_section(struct readelf *re, struct section *s, int alt) in dump_dwarf_frame_section() argument
6222 if (dwarf_get_fde_list(re->dbg, &cie_list, &cie_count, in dump_dwarf_frame_section()
6230 ret = dwarf_get_fde_list_eh(re->dbg, &cie_list, &cie_count, in dump_dwarf_frame_section()
6292 dump_dwarf_frame_inst(re, cie, cie_inst, in dump_dwarf_frame_section()
6294 re->dbg); in dump_dwarf_frame_section()
6305 dump_dwarf_frame_regtable(re, fde, low_pc, 1, in dump_dwarf_frame_section()
6317 dump_dwarf_frame_inst(re, cie, fde_inst, fde_instlen, in dump_dwarf_frame_section()
6318 cie_caf, cie_daf, low_pc, re->dbg); in dump_dwarf_frame_section()
6320 dump_dwarf_frame_regtable(re, fde, low_pc, func_len, in dump_dwarf_frame_section()
6327 dump_dwarf_frame(struct readelf *re, int alt) in dump_dwarf_frame() argument
6332 (void) dwarf_set_frame_cfa_value(re->dbg, DW_FRAME_CFA_COL); in dump_dwarf_frame()
6334 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_frame()
6335 s = &re->sl[i]; in dump_dwarf_frame()
6338 dump_dwarf_frame_section(re, s, alt); in dump_dwarf_frame()
6343 dump_dwarf_str(struct readelf *re) in dump_dwarf_str() argument
6353 for (i = 0; (size_t) i < re->shnum; i++) { in dump_dwarf_str()
6354 s = &re->sl[i]; in dump_dwarf_str()
6358 if ((size_t) i >= re->shnum) in dump_dwarf_str()
6416 search_loclist_at(struct readelf *re, Dwarf_Die die, Dwarf_Unsigned lowpc, in search_loclist_at() argument
6486 la->la_cu_psize = re->cu_psize; in search_loclist_at()
6487 la->la_cu_osize = re->cu_osize; in search_loclist_at()
6488 la->la_cu_ver = re->cu_ver; in search_loclist_at()
6498 search_loclist_at(re, ret_die, lowpc, la_list, in search_loclist_at()
6502 ret = dwarf_siblingof_b(re->dbg, die, &ret_die, is_info, &de); in search_loclist_at()
6506 search_loclist_at(re, ret_die, lowpc, la_list, in search_loclist_at()
6511 dump_dwarf_loc(struct readelf *re, Dwarf_Loc *lr) in dump_dwarf_loc() argument
6560 printf(" (%s)", dwarf_regname(re, lr->lr_atom - DW_OP_reg0)); in dump_dwarf_loc()
6690 dwarf_regname(re, lr->lr_atom - DW_OP_breg0), in dump_dwarf_loc()
6702 dwarf_regname(re, (unsigned int) lr->lr_number), in dump_dwarf_loc()
6726 dump_dwarf_block(re, (uint8_t *)(uintptr_t) lr->lr_number2, in dump_dwarf_loc()
6741 dwarf_regname(re, (unsigned int) lr->lr_number), in dump_dwarf_loc()
6758 dump_dwarf_block(struct readelf *re, uint8_t *b, Dwarf_Unsigned len) in dump_dwarf_block() argument
6765 if (dwarf_loclist_from_expr_b(re->dbg, b, len, re->cu_psize, in dump_dwarf_block()
6766 re->cu_osize, re->cu_ver, &llbuf, &lcnt, &de) != DW_DLV_OK) { in dump_dwarf_block()
6772 dump_dwarf_loc(re, &llbuf->ld_s[i]); in dump_dwarf_block()
6777 dwarf_dealloc(re->dbg, llbuf->ld_s, DW_DLA_LOC_BLOCK); in dump_dwarf_block()
6778 dwarf_dealloc(re->dbg, llbuf, DW_DLA_LOCDESC); in dump_dwarf_block()
6782 dump_dwarf_loclist(struct readelf *re) in dump_dwarf_loclist() argument
6800 while ((ret = dwarf_next_cu_header_b(re->dbg, NULL, &version, NULL, in dump_dwarf_loclist()
6802 set_cu_context(re, pointer_size, off_size, version); in dump_dwarf_loclist()
6804 if (dwarf_siblingof(re->dbg, die, &die, &de) != DW_DLV_OK) in dump_dwarf_loclist()
6819 search_loclist_at(re, die, lowpc, &la_list, in dump_dwarf_loclist()
6827 while ((ret = dwarf_next_cu_header_c(re->dbg, 0, NULL, in dump_dwarf_loclist()
6830 set_cu_context(re, pointer_size, off_size, version); in dump_dwarf_loclist()
6832 if (dwarf_siblingof(re->dbg, die, &die, &de) != in dump_dwarf_loclist()
6852 search_loclist_at(re, die, lowpc, &la_list, in dump_dwarf_loclist()
6857 } while (dwarf_next_types_section(re->dbg, &de) == DW_DLV_OK); in dump_dwarf_loclist()
6895 set_cu_context(re, la->la_cu_psize, la->la_cu_osize, in dump_dwarf_loclist()
6912 dump_dwarf_loc(re, &llbuf[i]->ld_s[j]); in dump_dwarf_loclist()
6923 dwarf_dealloc(re->dbg, llbuf[i]->ld_s, in dump_dwarf_loclist()
6925 dwarf_dealloc(re->dbg, llbuf[i], DW_DLA_LOCDESC); in dump_dwarf_loclist()
6927 dwarf_dealloc(re->dbg, llbuf, DW_DLA_LIST); in dump_dwarf_loclist()
6940 get_string(struct readelf *re, int strtab, size_t off) in get_string() argument
6944 if ((name = elf_strptr(re->elf, strtab, off)) == NULL) in get_string()
6955 get_symbol_name(struct readelf *re, int symtab, int i) in get_symbol_name() argument
6963 s = &re->sl[symtab]; in get_symbol_name()
6977 if (sym.st_shndx < re->shnum && in get_symbol_name()
6978 re->sl[sym.st_shndx].name != NULL) in get_symbol_name()
6979 return (re->sl[sym.st_shndx].name); in get_symbol_name()
6982 if (s->link >= re->shnum || in get_symbol_name()
6983 (name = elf_strptr(re->elf, s->link, sym.st_name)) == NULL) in get_symbol_name()
6990 get_symbol_value(struct readelf *re, int symtab, int i) in get_symbol_value() argument
6997 s = &re->sl[symtab]; in get_symbol_value()
7092 hex_dump(struct readelf *re) in hex_dump() argument
7101 for (i = 1; (size_t) i < re->shnum; i++) { in hex_dump()
7103 s = &re->sl[i]; in hex_dump()
7104 if (find_dumpop(re, (size_t) i, s->name, HEX_DUMP, -1) == NULL) in hex_dump()
7124 if (re->options & RE_Z) { in hex_dump()
7157 str_dump(struct readelf *re) in str_dump() argument
7166 for (i = 1; (size_t) i < re->shnum; i++) { in str_dump()
7168 s = &re->sl[i]; in str_dump()
7169 if (find_dumpop(re, (size_t) i, s->name, STR_DUMP, -1) == NULL) in str_dump()
7189 if (re->options & RE_Z) { in str_dump()
7223 load_sections(struct readelf *re) in load_sections() argument
7233 if (!elf_getshnum(re->elf, &re->shnum)) { in load_sections()
7237 if (re->sl != NULL) in load_sections()
7238 free(re->sl); in load_sections()
7239 if ((re->sl = calloc(re->shnum, sizeof(*re->sl))) == NULL) in load_sections()
7243 if (!elf_getshstrndx(re->elf, &shstrndx)) { in load_sections()
7248 if ((scn = elf_getscn(re->elf, 0)) == NULL) in load_sections()
7258 if ((name = elf_strptr(re->elf, shstrndx, sh.sh_name)) == NULL) { in load_sections()
7269 if (ndx >= re->shnum) { in load_sections()
7273 if (sh.sh_link >= re->shnum) in load_sections()
7276 s = &re->sl[ndx]; in load_sections()
7288 } while ((scn = elf_nextscn(re->elf, scn)) != NULL); in load_sections()
7295 unload_sections(struct readelf *re) in unload_sections() argument
7298 if (re->sl != NULL) { in unload_sections()
7299 free(re->sl); in unload_sections()
7300 re->sl = NULL; in unload_sections()
7302 re->shnum = 0; in unload_sections()
7303 re->vd_s = NULL; in unload_sections()
7304 re->vn_s = NULL; in unload_sections()
7305 re->vs_s = NULL; in unload_sections()
7306 re->vs = NULL; in unload_sections()
7307 re->vs_sz = 0; in unload_sections()
7308 if (re->ver != NULL) { in unload_sections()
7309 free(re->ver); in unload_sections()
7310 re->ver = NULL; in unload_sections()
7311 re->ver_sz = 0; in unload_sections()
7316 dump_elf(struct readelf *re) in dump_elf() argument
7320 if (gelf_getehdr(re->elf, &re->ehdr) == NULL) { in dump_elf()
7324 if ((re->ec = gelf_getclass(re->elf)) == ELFCLASSNONE) { in dump_elf()
7328 if (re->ehdr.e_ident[EI_DATA] == ELFDATA2MSB) { in dump_elf()
7329 re->dw_read = _read_msb; in dump_elf()
7330 re->dw_decode = _decode_msb; in dump_elf()
7332 re->dw_read = _read_lsb; in dump_elf()
7333 re->dw_decode = _decode_lsb; in dump_elf()
7336 if (re->options & ~RE_H) in dump_elf()
7337 load_sections(re); in dump_elf()
7338 if ((re->options & RE_VV) || (re->options & RE_S)) in dump_elf()
7339 search_ver(re); in dump_elf()
7340 if (re->options & RE_H) in dump_elf()
7341 dump_ehdr(re); in dump_elf()
7342 if (re->options & RE_L) in dump_elf()
7343 dump_phdr(re); in dump_elf()
7344 if (re->options & RE_SS) in dump_elf()
7345 dump_shdr(re); in dump_elf()
7346 if (re->options & RE_G) in dump_elf()
7347 dump_section_groups(re); in dump_elf()
7348 if (re->options & RE_D) in dump_elf()
7349 dump_dynamic(re); in dump_elf()
7350 if (re->options & RE_R) in dump_elf()
7351 dump_reloc(re); in dump_elf()
7352 if (re->options & RE_S) in dump_elf()
7353 dump_symtabs(re); in dump_elf()
7354 if (re->options & RE_N) in dump_elf()
7355 dump_notes(re); in dump_elf()
7356 if (re->options & RE_II) in dump_elf()
7357 dump_hash(re); in dump_elf()
7358 if (re->options & RE_X) in dump_elf()
7359 hex_dump(re); in dump_elf()
7360 if (re->options & RE_P) in dump_elf()
7361 str_dump(re); in dump_elf()
7362 if (re->options & RE_VV) in dump_elf()
7363 dump_ver(re); in dump_elf()
7364 if (re->options & RE_AA) in dump_elf()
7365 dump_arch_specific_info(re); in dump_elf()
7366 if (re->options & RE_W) in dump_elf()
7367 dump_dwarf(re); in dump_elf()
7368 if (re->options & ~RE_H) in dump_elf()
7369 unload_sections(re); in dump_elf()
7374 dump_dwarf(struct readelf *re) in dump_dwarf() argument
7379 if (dwarf_elf_init(re->elf, DW_DLC_READ, NULL, NULL, &re->dbg, &de)) { in dump_dwarf()
7386 if (re->dop & DW_A) in dump_dwarf()
7387 dump_dwarf_abbrev(re); in dump_dwarf()
7388 if (re->dop & DW_L) in dump_dwarf()
7389 dump_dwarf_line(re); in dump_dwarf()
7390 if (re->dop & DW_LL) in dump_dwarf()
7391 dump_dwarf_line_decoded(re); in dump_dwarf()
7392 if (re->dop & DW_I) { in dump_dwarf()
7393 dump_dwarf_info(re, 0); in dump_dwarf()
7394 dump_dwarf_info(re, 1); in dump_dwarf()
7396 if (re->dop & DW_P) in dump_dwarf()
7397 dump_dwarf_pubnames(re); in dump_dwarf()
7398 if (re->dop & DW_R) in dump_dwarf()
7399 dump_dwarf_aranges(re); in dump_dwarf()
7400 if (re->dop & DW_RR) in dump_dwarf()
7401 dump_dwarf_ranges(re); in dump_dwarf()
7402 if (re->dop & DW_M) in dump_dwarf()
7403 dump_dwarf_macinfo(re); in dump_dwarf()
7404 if (re->dop & DW_F) in dump_dwarf()
7405 dump_dwarf_frame(re, 0); in dump_dwarf()
7406 else if (re->dop & DW_FF) in dump_dwarf()
7407 dump_dwarf_frame(re, 1); in dump_dwarf()
7408 if (re->dop & DW_S) in dump_dwarf()
7409 dump_dwarf_str(re); in dump_dwarf()
7410 if (re->dop & DW_O) in dump_dwarf()
7411 dump_dwarf_loclist(re); in dump_dwarf()
7413 dwarf_finish(re->dbg, &de); in dump_dwarf()
7417 dump_ar(struct readelf *re, int fd) in dump_ar() argument
7427 re->ar = re->elf; in dump_ar()
7429 if (re->options & RE_C) { in dump_ar()
7430 if ((arsym = elf_getarsym(re->ar, &sz)) == NULL) { in dump_ar()
7434 printf("Index of archive %s: (%ju entries)\n", re->filename, in dump_ar()
7442 if (elf_rand(re->ar, off) != off) { in dump_ar()
7447 if ((e = elf_begin(fd, ELF_C_READ, re->ar)) == in dump_ar()
7460 re->filename, arhdr->ar_name); in dump_ar()
7465 if (elf_rand(re->ar, SARMAG) != SARMAG) { in dump_ar()
7473 if ((re->options & ~RE_C) == 0) in dump_ar()
7477 while ((re->elf = elf_begin(fd, cmd, re->ar)) != NULL) { in dump_ar()
7478 if ((arhdr = elf_getarhdr(re->elf)) == NULL) { in dump_ar()
7486 printf("\nFile: %s(%s)\n", re->filename, arhdr->ar_name); in dump_ar()
7487 dump_elf(re); in dump_ar()
7490 cmd = elf_next(re->elf); in dump_ar()
7491 elf_end(re->elf); in dump_ar()
7493 re->elf = re->ar; in dump_ar()
7498 dump_object(struct readelf *re, int fd) in dump_object() argument
7502 if ((re->flags & DISPLAY_FILENAME) != 0) in dump_object()
7503 printf("\nFile: %s\n", re->filename); in dump_object()
7505 if ((re->elf = elf_begin(fd, ELF_C_READ, NULL)) == NULL) { in dump_object()
7510 switch (elf_kind(re->elf)) { in dump_object()
7515 rv = dump_elf(re); in dump_object()
7518 rv = dump_ar(re, fd); in dump_object()
7525 elf_end(re->elf); in dump_object()
7530 add_dumpop(struct readelf *re, size_t si, const char *sn, int op, int t) in add_dumpop() argument
7534 if ((d = find_dumpop(re, si, sn, -1, t)) == NULL) { in add_dumpop()
7543 STAILQ_INSERT_TAIL(&re->v_dumpop, d, dumpop_list); in add_dumpop()
7549 find_dumpop(struct readelf *re, size_t si, const char *sn, int op, int t) in find_dumpop() argument
7553 STAILQ_FOREACH(d, &re->v_dumpop, dumpop_list) { in find_dumpop()
7587 parse_dwarf_op_short(struct readelf *re, const char *op) in parse_dwarf_op_short() argument
7592 re->dop |= DW_DEFAULT_OPTIONS; in parse_dwarf_op_short()
7599 re->dop |= dwarf_op[i].value; in parse_dwarf_op_short()
7607 parse_dwarf_op_long(struct readelf *re, const char *op) in parse_dwarf_op_long() argument
7613 re->dop |= DW_DEFAULT_OPTIONS; in parse_dwarf_op_long()
7624 re->dop |= dwarf_op[i].value; in parse_dwarf_op_long()
7872 struct readelf *re, re_storage; in main() local
7877 re = &re_storage; in main()
7878 memset(re, 0, sizeof(*re)); in main()
7879 STAILQ_INIT(&re->v_dumpop); in main()
7888 re->options |= RE_AA; in main()
7891 re->options |= RE_AA | RE_D | RE_G | RE_H | RE_II | in main()
7895 re->options |= RE_C; in main()
7898 re->options |= RE_DD; in main()
7901 re->options |= RE_D; in main()
7904 re->options |= RE_H | RE_L | RE_SS; in main()
7907 re->options |= RE_G; in main()
7913 re->options |= RE_H; in main()
7916 re->options |= RE_II; in main()
7922 re->options |= RE_L; in main()
7925 re->options |= RE_NN; in main()
7928 re->options |= RE_N; in main()
7931 re->options |= RE_P; in main()
7934 add_dumpop(re, (size_t) si, NULL, STR_DUMP, in main()
7937 add_dumpop(re, 0, optarg, STR_DUMP, in main()
7941 re->options |= RE_R; in main()
7944 re->options |= RE_SS; in main()
7947 re->options |= RE_S; in main()
7950 re->options |= RE_SS | RE_T; in main()
7953 re->options |= RE_U; in main()
7956 re->options |= RE_VV; in main()
7962 re->options |= RE_WW; in main()
7965 re->options |= RE_W; in main()
7966 parse_dwarf_op_short(re, optarg); in main()
7969 re->options |= RE_X; in main()
7972 add_dumpop(re, (size_t) si, NULL, HEX_DUMP, in main()
7975 add_dumpop(re, 0, optarg, HEX_DUMP, in main()
7979 re->options |= RE_Z; in main()
7982 re->options |= RE_W; in main()
7983 parse_dwarf_op_long(re, optarg); in main()
7990 if (argc == 0 || re->options == 0) in main()
7994 re->flags |= DISPLAY_FILENAME; in main()
8017 re->filename = argv[i]; in main()
8018 fd = fileargs_open(fa, re->filename); in main()
8020 warn("open %s failed", re->filename); in main()
8023 if (!dump_object(re, fd)) in main()