Deleted Added
full compact
elfdump.c (231815) elfdump.c (241737)
1/*-
2 * Copyright (c) 2003 David O'Brien. All rights reserved.
3 * Copyright (c) 2001 Jake Burkholder
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2003 David O'Brien. All rights reserved.
3 * Copyright (c) 2001 Jake Burkholder
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 12 unchanged lines hidden (view full) ---

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD: head/usr.bin/elfdump/elfdump.c 231815 2012-02-16 05:16:55Z eadler $");
29__FBSDID("$FreeBSD: head/usr.bin/elfdump/elfdump.c 241737 2012-10-19 14:49:42Z ed $");
30
31#include <sys/types.h>
32#include <sys/elf32.h>
33#include <sys/elf64.h>
34#include <sys/endian.h>
35#include <sys/mman.h>
36#include <sys/stat.h>
37#include <err.h>

--- 40 unchanged lines hidden (view full) ---

78
79 R_OFFSET, R_INFO,
80
81 RA_OFFSET, RA_INFO, RA_ADDEND
82};
83
84typedef enum elf_member elf_member_t;
85
30
31#include <sys/types.h>
32#include <sys/elf32.h>
33#include <sys/elf64.h>
34#include <sys/endian.h>
35#include <sys/mman.h>
36#include <sys/stat.h>
37#include <err.h>

--- 40 unchanged lines hidden (view full) ---

78
79 R_OFFSET, R_INFO,
80
81 RA_OFFSET, RA_INFO, RA_ADDEND
82};
83
84typedef enum elf_member elf_member_t;
85
86int elf32_offsets[] = {
86static int elf32_offsets[] = {
87 0,
88
89 offsetof(Elf32_Dyn, d_tag), offsetof(Elf32_Dyn, d_un.d_ptr),
90 offsetof(Elf32_Dyn, d_un.d_val),
91
92 offsetof(Elf32_Ehdr, e_ident[EI_CLASS]),
93 offsetof(Elf32_Ehdr, e_ident[EI_DATA]),
94 offsetof(Elf32_Ehdr, e_ident[EI_OSABI]),

--- 24 unchanged lines hidden (view full) ---

119 offsetof(Elf32_Sym, st_shndx),
120
121 offsetof(Elf32_Rel, r_offset), offsetof(Elf32_Rel, r_info),
122
123 offsetof(Elf32_Rela, r_offset), offsetof(Elf32_Rela, r_info),
124 offsetof(Elf32_Rela, r_addend)
125};
126
87 0,
88
89 offsetof(Elf32_Dyn, d_tag), offsetof(Elf32_Dyn, d_un.d_ptr),
90 offsetof(Elf32_Dyn, d_un.d_val),
91
92 offsetof(Elf32_Ehdr, e_ident[EI_CLASS]),
93 offsetof(Elf32_Ehdr, e_ident[EI_DATA]),
94 offsetof(Elf32_Ehdr, e_ident[EI_OSABI]),

--- 24 unchanged lines hidden (view full) ---

119 offsetof(Elf32_Sym, st_shndx),
120
121 offsetof(Elf32_Rel, r_offset), offsetof(Elf32_Rel, r_info),
122
123 offsetof(Elf32_Rela, r_offset), offsetof(Elf32_Rela, r_info),
124 offsetof(Elf32_Rela, r_addend)
125};
126
127int elf64_offsets[] = {
127static int elf64_offsets[] = {
128 0,
129
130 offsetof(Elf64_Dyn, d_tag), offsetof(Elf64_Dyn, d_un.d_ptr),
131 offsetof(Elf64_Dyn, d_un.d_val),
132
133 offsetof(Elf32_Ehdr, e_ident[EI_CLASS]),
134 offsetof(Elf32_Ehdr, e_ident[EI_DATA]),
135 offsetof(Elf32_Ehdr, e_ident[EI_OSABI]),

--- 125 unchanged lines hidden (view full) ---

261 case EM_IA_64: return "EM_IA_64";
262 case EM_X86_64: return "EM_X86_64";
263 }
264 snprintf(machdesc, sizeof(machdesc),
265 "(unknown machine) -- type 0x%x", mach);
266 return (machdesc);
267}
268
128 0,
129
130 offsetof(Elf64_Dyn, d_tag), offsetof(Elf64_Dyn, d_un.d_ptr),
131 offsetof(Elf64_Dyn, d_un.d_val),
132
133 offsetof(Elf32_Ehdr, e_ident[EI_CLASS]),
134 offsetof(Elf32_Ehdr, e_ident[EI_DATA]),
135 offsetof(Elf32_Ehdr, e_ident[EI_OSABI]),

--- 125 unchanged lines hidden (view full) ---

261 case EM_IA_64: return "EM_IA_64";
262 case EM_X86_64: return "EM_X86_64";
263 }
264 snprintf(machdesc, sizeof(machdesc),
265 "(unknown machine) -- type 0x%x", mach);
266 return (machdesc);
267}
268
269const char *e_types[] = {
269static const char *e_types[] = {
270 "ET_NONE", "ET_REL", "ET_EXEC", "ET_DYN", "ET_CORE"
271};
272
270 "ET_NONE", "ET_REL", "ET_EXEC", "ET_DYN", "ET_CORE"
271};
272
273const char *ei_versions[] = {
273static const char *ei_versions[] = {
274 "EV_NONE", "EV_CURRENT"
275};
276
274 "EV_NONE", "EV_CURRENT"
275};
276
277const char *ei_classes[] = {
277static const char *ei_classes[] = {
278 "ELFCLASSNONE", "ELFCLASS32", "ELFCLASS64"
279};
280
278 "ELFCLASSNONE", "ELFCLASS32", "ELFCLASS64"
279};
280
281const char *ei_data[] = {
281static const char *ei_data[] = {
282 "ELFDATANONE", "ELFDATA2LSB", "ELFDATA2MSB"
283};
284
282 "ELFDATANONE", "ELFDATA2LSB", "ELFDATA2MSB"
283};
284
285const char *ei_abis[256] = {
285static const char *ei_abis[256] = {
286 "ELFOSABI_SYSV", "ELFOSABI_HPUX", "ELFOSABI_NETBSD", "ELFOSABI_LINUX",
287 "ELFOSABI_HURD", "ELFOSABI_86OPEN", "ELFOSABI_SOLARIS", "ELFOSABI_AIX",
288 "ELFOSABI_IRIX", "ELFOSABI_FREEBSD", "ELFOSABI_TRU64",
289 "ELFOSABI_MODESTO", "ELFOSABI_OPENBSD",
290 [255] = "ELFOSABI_STANDALONE"
291};
292
286 "ELFOSABI_SYSV", "ELFOSABI_HPUX", "ELFOSABI_NETBSD", "ELFOSABI_LINUX",
287 "ELFOSABI_HURD", "ELFOSABI_86OPEN", "ELFOSABI_SOLARIS", "ELFOSABI_AIX",
288 "ELFOSABI_IRIX", "ELFOSABI_FREEBSD", "ELFOSABI_TRU64",
289 "ELFOSABI_MODESTO", "ELFOSABI_OPENBSD",
290 [255] = "ELFOSABI_STANDALONE"
291};
292
293const char *p_types[] = {
293static const char *p_types[] = {
294 "PT_NULL", "PT_LOAD", "PT_DYNAMIC", "PT_INTERP", "PT_NOTE",
295 "PT_SHLIB", "PT_PHDR", "PT_TLS"
296};
297
294 "PT_NULL", "PT_LOAD", "PT_DYNAMIC", "PT_INTERP", "PT_NOTE",
295 "PT_SHLIB", "PT_PHDR", "PT_TLS"
296};
297
298const char *p_flags[] = {
298static const char *p_flags[] = {
299 "", "PF_X", "PF_W", "PF_X|PF_W", "PF_R", "PF_X|PF_R", "PF_W|PF_R",
300 "PF_X|PF_W|PF_R"
301};
302
303/* http://www.sco.com/developers/gabi/latest/ch4.sheader.html#sh_type */
304static const char *
305sh_types(u_int64_t sht) {
306 switch (sht) {

--- 27 unchanged lines hidden (view full) ---

334 case 0x70000001: return "SHT_IA_64_UNWIND";
335 case 0x7ffffffd: return "XXX:AUXILIARY";
336 case 0x7fffffff: return "XXX:FILTER";
337 /* 0x80000000 - 0xffffffff application programs */
338 default: return "ERROR: SHT NOT DEFINED";
339 }
340}
341
299 "", "PF_X", "PF_W", "PF_X|PF_W", "PF_R", "PF_X|PF_R", "PF_W|PF_R",
300 "PF_X|PF_W|PF_R"
301};
302
303/* http://www.sco.com/developers/gabi/latest/ch4.sheader.html#sh_type */
304static const char *
305sh_types(u_int64_t sht) {
306 switch (sht) {

--- 27 unchanged lines hidden (view full) ---

334 case 0x70000001: return "SHT_IA_64_UNWIND";
335 case 0x7ffffffd: return "XXX:AUXILIARY";
336 case 0x7fffffff: return "XXX:FILTER";
337 /* 0x80000000 - 0xffffffff application programs */
338 default: return "ERROR: SHT NOT DEFINED";
339 }
340}
341
342const char *sh_flags[] = {
342static const char *sh_flags[] = {
343 "", "SHF_WRITE", "SHF_ALLOC", "SHF_WRITE|SHF_ALLOC", "SHF_EXECINSTR",
344 "SHF_WRITE|SHF_EXECINSTR", "SHF_ALLOC|SHF_EXECINSTR",
345 "SHF_WRITE|SHF_ALLOC|SHF_EXECINSTR"
346};
347
343 "", "SHF_WRITE", "SHF_ALLOC", "SHF_WRITE|SHF_ALLOC", "SHF_EXECINSTR",
344 "SHF_WRITE|SHF_EXECINSTR", "SHF_ALLOC|SHF_EXECINSTR",
345 "SHF_WRITE|SHF_ALLOC|SHF_EXECINSTR"
346};
347
348const char *st_types[] = {
348static const char *st_types[] = {
349 "STT_NOTYPE", "STT_OBJECT", "STT_FUNC", "STT_SECTION", "STT_FILE"
350};
351
349 "STT_NOTYPE", "STT_OBJECT", "STT_FUNC", "STT_SECTION", "STT_FILE"
350};
351
352const char *st_bindings[] = {
352static const char *st_bindings[] = {
353 "STB_LOCAL", "STB_GLOBAL", "STB_WEAK"
354};
355
353 "STB_LOCAL", "STB_GLOBAL", "STB_WEAK"
354};
355
356char *dynstr;
357char *shstrtab;
358char *strtab;
359FILE *out;
356static char *dynstr;
357static char *shstrtab;
358static char *strtab;
359static FILE *out;
360
360
361u_int64_t elf_get_byte(Elf32_Ehdr *e, void *base, elf_member_t member);
362u_int64_t elf_get_quarter(Elf32_Ehdr *e, void *base, elf_member_t member);
363u_int64_t elf_get_half(Elf32_Ehdr *e, void *base, elf_member_t member);
364u_int64_t elf_get_word(Elf32_Ehdr *e, void *base, elf_member_t member);
365u_int64_t elf_get_quad(Elf32_Ehdr *e, void *base, elf_member_t member);
361static u_int64_t elf_get_byte(Elf32_Ehdr *e, void *base, elf_member_t member);
362static u_int64_t elf_get_quarter(Elf32_Ehdr *e, void *base,
363 elf_member_t member);
364#if 0
365static u_int64_t elf_get_half(Elf32_Ehdr *e, void *base, elf_member_t member);
366#endif
367static u_int64_t elf_get_word(Elf32_Ehdr *e, void *base, elf_member_t member);
368static u_int64_t elf_get_quad(Elf32_Ehdr *e, void *base, elf_member_t member);
366
369
367void elf_print_ehdr(Elf32_Ehdr *e);
368void elf_print_phdr(Elf32_Ehdr *e, void *p);
369void elf_print_shdr(Elf32_Ehdr *e, void *sh);
370void elf_print_symtab(Elf32_Ehdr *e, void *sh, char *str);
371void elf_print_dynamic(Elf32_Ehdr *e, void *sh);
372void elf_print_rel(Elf32_Ehdr *e, void *r);
373void elf_print_rela(Elf32_Ehdr *e, void *ra);
374void elf_print_interp(Elf32_Ehdr *e, void *p);
375void elf_print_got(Elf32_Ehdr *e, void *sh);
376void elf_print_hash(Elf32_Ehdr *e, void *sh);
377void elf_print_note(Elf32_Ehdr *e, void *sh);
370static void elf_print_ehdr(Elf32_Ehdr *e);
371static void elf_print_phdr(Elf32_Ehdr *e, void *p);
372static void elf_print_shdr(Elf32_Ehdr *e, void *sh);
373static void elf_print_symtab(Elf32_Ehdr *e, void *sh, char *str);
374static void elf_print_dynamic(Elf32_Ehdr *e, void *sh);
375static void elf_print_rel(Elf32_Ehdr *e, void *r);
376static void elf_print_rela(Elf32_Ehdr *e, void *ra);
377static void elf_print_interp(Elf32_Ehdr *e, void *p);
378static void elf_print_got(Elf32_Ehdr *e, void *sh);
379static void elf_print_hash(Elf32_Ehdr *e, void *sh);
380static void elf_print_note(Elf32_Ehdr *e, void *sh);
378
381
379void usage(void);
382static void usage(void);
380
381int
382main(int ac, char **av)
383{
384 u_int64_t phoff;
385 u_int64_t shoff;
386 u_int64_t phentsize;
387 u_int64_t phnum;

--- 158 unchanged lines hidden (view full) ---

546 case SHT_SHLIB:
547 break;
548 }
549 }
550
551 return 0;
552}
553
383
384int
385main(int ac, char **av)
386{
387 u_int64_t phoff;
388 u_int64_t shoff;
389 u_int64_t phentsize;
390 u_int64_t phnum;

--- 158 unchanged lines hidden (view full) ---

549 case SHT_SHLIB:
550 break;
551 }
552 }
553
554 return 0;
555}
556
554void
557static void
555elf_print_ehdr(Elf32_Ehdr *e)
556{
557 u_int64_t class;
558 u_int64_t data;
559 u_int64_t osabi;
560 u_int64_t type;
561 u_int64_t machine;
562 u_int64_t version;

--- 38 unchanged lines hidden (view full) ---

601 fprintf(out, "\te_ehsize: %jd\n", (intmax_t)ehsize);
602 fprintf(out, "\te_phentsize: %jd\n", (intmax_t)phentsize);
603 fprintf(out, "\te_phnum: %jd\n", (intmax_t)phnum);
604 fprintf(out, "\te_shentsize: %jd\n", (intmax_t)shentsize);
605 fprintf(out, "\te_shnum: %jd\n", (intmax_t)shnum);
606 fprintf(out, "\te_shstrndx: %jd\n", (intmax_t)shstrndx);
607}
608
558elf_print_ehdr(Elf32_Ehdr *e)
559{
560 u_int64_t class;
561 u_int64_t data;
562 u_int64_t osabi;
563 u_int64_t type;
564 u_int64_t machine;
565 u_int64_t version;

--- 38 unchanged lines hidden (view full) ---

604 fprintf(out, "\te_ehsize: %jd\n", (intmax_t)ehsize);
605 fprintf(out, "\te_phentsize: %jd\n", (intmax_t)phentsize);
606 fprintf(out, "\te_phnum: %jd\n", (intmax_t)phnum);
607 fprintf(out, "\te_shentsize: %jd\n", (intmax_t)shentsize);
608 fprintf(out, "\te_shnum: %jd\n", (intmax_t)shnum);
609 fprintf(out, "\te_shstrndx: %jd\n", (intmax_t)shstrndx);
610}
611
609void
612static void
610elf_print_phdr(Elf32_Ehdr *e, void *p)
611{
612 u_int64_t phentsize;
613 u_int64_t phnum;
614 u_int64_t type;
615 u_int64_t offset;
616 u_int64_t vaddr;
617 u_int64_t paddr;

--- 25 unchanged lines hidden (view full) ---

643 fprintf(out, "\tp_paddr: %#jx\n", (intmax_t)paddr);
644 fprintf(out, "\tp_filesz: %jd\n", (intmax_t)filesz);
645 fprintf(out, "\tp_memsz: %jd\n", (intmax_t)memsz);
646 fprintf(out, "\tp_flags: %s\n", p_flags[flags]);
647 fprintf(out, "\tp_align: %jd\n", (intmax_t)align);
648 }
649}
650
613elf_print_phdr(Elf32_Ehdr *e, void *p)
614{
615 u_int64_t phentsize;
616 u_int64_t phnum;
617 u_int64_t type;
618 u_int64_t offset;
619 u_int64_t vaddr;
620 u_int64_t paddr;

--- 25 unchanged lines hidden (view full) ---

646 fprintf(out, "\tp_paddr: %#jx\n", (intmax_t)paddr);
647 fprintf(out, "\tp_filesz: %jd\n", (intmax_t)filesz);
648 fprintf(out, "\tp_memsz: %jd\n", (intmax_t)memsz);
649 fprintf(out, "\tp_flags: %s\n", p_flags[flags]);
650 fprintf(out, "\tp_align: %jd\n", (intmax_t)align);
651 }
652}
653
651void
654static void
652elf_print_shdr(Elf32_Ehdr *e, void *sh)
653{
654 u_int64_t shentsize;
655 u_int64_t shnum;
656 u_int64_t name;
657 u_int64_t type;
658 u_int64_t flags;
659 u_int64_t addr;

--- 31 unchanged lines hidden (view full) ---

691 fprintf(out, "\tsh_size: %jd\n", (intmax_t)size);
692 fprintf(out, "\tsh_link: %jd\n", (intmax_t)shlink);
693 fprintf(out, "\tsh_info: %jd\n", (intmax_t)info);
694 fprintf(out, "\tsh_addralign: %jd\n", (intmax_t)addralign);
695 fprintf(out, "\tsh_entsize: %jd\n", (intmax_t)entsize);
696 }
697}
698
655elf_print_shdr(Elf32_Ehdr *e, void *sh)
656{
657 u_int64_t shentsize;
658 u_int64_t shnum;
659 u_int64_t name;
660 u_int64_t type;
661 u_int64_t flags;
662 u_int64_t addr;

--- 31 unchanged lines hidden (view full) ---

694 fprintf(out, "\tsh_size: %jd\n", (intmax_t)size);
695 fprintf(out, "\tsh_link: %jd\n", (intmax_t)shlink);
696 fprintf(out, "\tsh_info: %jd\n", (intmax_t)info);
697 fprintf(out, "\tsh_addralign: %jd\n", (intmax_t)addralign);
698 fprintf(out, "\tsh_entsize: %jd\n", (intmax_t)entsize);
699 }
700}
701
699void
702static void
700elf_print_symtab(Elf32_Ehdr *e, void *sh, char *str)
701{
702 u_int64_t offset;
703 u_int64_t entsize;
704 u_int64_t size;
705 u_int64_t name;
706 u_int64_t value;
707 u_int64_t info;

--- 22 unchanged lines hidden (view full) ---

730 fprintf(out, "\tst_size: %jd\n", (intmax_t)size);
731 fprintf(out, "\tst_info: %s %s\n",
732 st_types[ELF32_ST_TYPE(info)],
733 st_bindings[ELF32_ST_BIND(info)]);
734 fprintf(out, "\tst_shndx: %jd\n", (intmax_t)shndx);
735 }
736}
737
703elf_print_symtab(Elf32_Ehdr *e, void *sh, char *str)
704{
705 u_int64_t offset;
706 u_int64_t entsize;
707 u_int64_t size;
708 u_int64_t name;
709 u_int64_t value;
710 u_int64_t info;

--- 22 unchanged lines hidden (view full) ---

733 fprintf(out, "\tst_size: %jd\n", (intmax_t)size);
734 fprintf(out, "\tst_info: %s %s\n",
735 st_types[ELF32_ST_TYPE(info)],
736 st_bindings[ELF32_ST_BIND(info)]);
737 fprintf(out, "\tst_shndx: %jd\n", (intmax_t)shndx);
738 }
739}
740
738void
741static void
739elf_print_dynamic(Elf32_Ehdr *e, void *sh)
740{
741 u_int64_t offset;
742 u_int64_t entsize;
743 u_int64_t size;
744 int64_t tag;
745 u_int64_t ptr;
746 u_int64_t val;

--- 43 unchanged lines hidden (view full) ---

790 case DT_SYMBOLIC:
791 case DT_DEBUG:
792 case DT_TEXTREL:
793 break;
794 }
795 }
796}
797
742elf_print_dynamic(Elf32_Ehdr *e, void *sh)
743{
744 u_int64_t offset;
745 u_int64_t entsize;
746 u_int64_t size;
747 int64_t tag;
748 u_int64_t ptr;
749 u_int64_t val;

--- 43 unchanged lines hidden (view full) ---

793 case DT_SYMBOLIC:
794 case DT_DEBUG:
795 case DT_TEXTREL:
796 break;
797 }
798 }
799}
800
798void
801static void
799elf_print_rela(Elf32_Ehdr *e, void *sh)
800{
801 u_int64_t offset;
802 u_int64_t entsize;
803 u_int64_t size;
804 u_int64_t name;
805 u_int64_t info;
806 int64_t addend;

--- 15 unchanged lines hidden (view full) ---

822 fprintf(out, "\n");
823 fprintf(out, "entry: %d\n", i);
824 fprintf(out, "\tr_offset: %#jx\n", offset);
825 fprintf(out, "\tr_info: %jd\n", (intmax_t)info);
826 fprintf(out, "\tr_addend: %jd\n", (intmax_t)addend);
827 }
828}
829
802elf_print_rela(Elf32_Ehdr *e, void *sh)
803{
804 u_int64_t offset;
805 u_int64_t entsize;
806 u_int64_t size;
807 u_int64_t name;
808 u_int64_t info;
809 int64_t addend;

--- 15 unchanged lines hidden (view full) ---

825 fprintf(out, "\n");
826 fprintf(out, "entry: %d\n", i);
827 fprintf(out, "\tr_offset: %#jx\n", offset);
828 fprintf(out, "\tr_info: %jd\n", (intmax_t)info);
829 fprintf(out, "\tr_addend: %jd\n", (intmax_t)addend);
830 }
831}
832
830void
833static void
831elf_print_rel(Elf32_Ehdr *e, void *sh)
832{
833 u_int64_t offset;
834 u_int64_t entsize;
835 u_int64_t size;
836 u_int64_t name;
837 u_int64_t info;
838 void *r;

--- 12 unchanged lines hidden (view full) ---

851 info = elf_get_word(e, r, R_INFO);
852 fprintf(out, "\n");
853 fprintf(out, "entry: %d\n", i);
854 fprintf(out, "\tr_offset: %#jx\n", offset);
855 fprintf(out, "\tr_info: %jd\n", (intmax_t)info);
856 }
857}
858
834elf_print_rel(Elf32_Ehdr *e, void *sh)
835{
836 u_int64_t offset;
837 u_int64_t entsize;
838 u_int64_t size;
839 u_int64_t name;
840 u_int64_t info;
841 void *r;

--- 12 unchanged lines hidden (view full) ---

854 info = elf_get_word(e, r, R_INFO);
855 fprintf(out, "\n");
856 fprintf(out, "entry: %d\n", i);
857 fprintf(out, "\tr_offset: %#jx\n", offset);
858 fprintf(out, "\tr_info: %jd\n", (intmax_t)info);
859 }
860}
861
859void
862static void
860elf_print_interp(Elf32_Ehdr *e, void *p)
861{
862 u_int64_t offset;
863 char *s;
864
865 offset = elf_get_off(e, p, P_OFFSET);
866 s = (char *)e + offset;
867 fprintf(out, "\ninterp:\n");
868 fprintf(out, "\t%s\n", s);
869}
870
863elf_print_interp(Elf32_Ehdr *e, void *p)
864{
865 u_int64_t offset;
866 char *s;
867
868 offset = elf_get_off(e, p, P_OFFSET);
869 s = (char *)e + offset;
870 fprintf(out, "\ninterp:\n");
871 fprintf(out, "\t%s\n", s);
872}
873
871void
874static void
872elf_print_got(Elf32_Ehdr *e, void *sh)
873{
874 u_int64_t offset;
875 u_int64_t addralign;
876 u_int64_t size;
877 u_int64_t addr;
878 void *v;
879 int i;

--- 6 unchanged lines hidden (view full) ---

886 for (i = 0; (u_int64_t)i < size / addralign; i++) {
887 addr = elf_get_addr(e, (char *)v + i * addralign, 0);
888 fprintf(out, "\n");
889 fprintf(out, "entry: %d\n", i);
890 fprintf(out, "\t%#jx\n", addr);
891 }
892}
893
875elf_print_got(Elf32_Ehdr *e, void *sh)
876{
877 u_int64_t offset;
878 u_int64_t addralign;
879 u_int64_t size;
880 u_int64_t addr;
881 void *v;
882 int i;

--- 6 unchanged lines hidden (view full) ---

889 for (i = 0; (u_int64_t)i < size / addralign; i++) {
890 addr = elf_get_addr(e, (char *)v + i * addralign, 0);
891 fprintf(out, "\n");
892 fprintf(out, "entry: %d\n", i);
893 fprintf(out, "\t%#jx\n", addr);
894 }
895}
896
894void
897static void
895elf_print_hash(Elf32_Ehdr *e __unused, void *sh __unused)
896{
897}
898
898elf_print_hash(Elf32_Ehdr *e __unused, void *sh __unused)
899{
900}
901
899void
902static void
900elf_print_note(Elf32_Ehdr *e, void *sh)
901{
902 u_int64_t offset;
903 u_int64_t size;
904 u_int64_t name;
905 u_int32_t namesz;
906 u_int32_t descsz;
907 u_int32_t desc;

--- 9 unchanged lines hidden (view full) ---

917 descsz = elf_get_word(e, n, N_DESCSZ);
918 s = n + sizeof(Elf_Note);
919 desc = elf_get_word(e, n + sizeof(Elf_Note) + namesz, 0);
920 fprintf(out, "\t%s %d\n", s, desc);
921 n += sizeof(Elf_Note) + namesz + descsz;
922 }
923}
924
903elf_print_note(Elf32_Ehdr *e, void *sh)
904{
905 u_int64_t offset;
906 u_int64_t size;
907 u_int64_t name;
908 u_int32_t namesz;
909 u_int32_t descsz;
910 u_int32_t desc;

--- 9 unchanged lines hidden (view full) ---

920 descsz = elf_get_word(e, n, N_DESCSZ);
921 s = n + sizeof(Elf_Note);
922 desc = elf_get_word(e, n + sizeof(Elf_Note) + namesz, 0);
923 fprintf(out, "\t%s %d\n", s, desc);
924 n += sizeof(Elf_Note) + namesz + descsz;
925 }
926}
927
925u_int64_t
928static u_int64_t
926elf_get_byte(Elf32_Ehdr *e, void *base, elf_member_t member)
927{
928 u_int64_t val;
929
930 val = 0;
931 switch (e->e_ident[EI_CLASS]) {
932 case ELFCLASS32:
933 val = ((uint8_t *)base)[elf32_offsets[member]];
934 break;
935 case ELFCLASS64:
936 val = ((uint8_t *)base)[elf64_offsets[member]];
937 break;
938 case ELFCLASSNONE:
939 errx(1, "invalid class");
940 }
941
942 return val;
943}
944
929elf_get_byte(Elf32_Ehdr *e, void *base, elf_member_t member)
930{
931 u_int64_t val;
932
933 val = 0;
934 switch (e->e_ident[EI_CLASS]) {
935 case ELFCLASS32:
936 val = ((uint8_t *)base)[elf32_offsets[member]];
937 break;
938 case ELFCLASS64:
939 val = ((uint8_t *)base)[elf64_offsets[member]];
940 break;
941 case ELFCLASSNONE:
942 errx(1, "invalid class");
943 }
944
945 return val;
946}
947
945u_int64_t
948static u_int64_t
946elf_get_quarter(Elf32_Ehdr *e, void *base, elf_member_t member)
947{
948 u_int64_t val;
949
950 val = 0;
951 switch (e->e_ident[EI_CLASS]) {
952 case ELFCLASS32:
953 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

977 break;
978 case ELFCLASSNONE:
979 errx(1, "invalid class");
980 }
981
982 return val;
983}
984
949elf_get_quarter(Elf32_Ehdr *e, void *base, elf_member_t member)
950{
951 u_int64_t val;
952
953 val = 0;
954 switch (e->e_ident[EI_CLASS]) {
955 case ELFCLASS32:
956 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

980 break;
981 case ELFCLASSNONE:
982 errx(1, "invalid class");
983 }
984
985 return val;
986}
987
985u_int64_t
988#if 0
989static u_int64_t
986elf_get_half(Elf32_Ehdr *e, void *base, elf_member_t member)
987{
988 u_int64_t val;
989
990 val = 0;
991 switch (e->e_ident[EI_CLASS]) {
992 case ELFCLASS32:
993 base = (char *)base + elf32_offsets[member];

--- 22 unchanged lines hidden (view full) ---

1016 }
1017 break;
1018 case ELFCLASSNONE:
1019 errx(1, "invalid class");
1020 }
1021
1022 return val;
1023}
990elf_get_half(Elf32_Ehdr *e, void *base, elf_member_t member)
991{
992 u_int64_t val;
993
994 val = 0;
995 switch (e->e_ident[EI_CLASS]) {
996 case ELFCLASS32:
997 base = (char *)base + elf32_offsets[member];

--- 22 unchanged lines hidden (view full) ---

1020 }
1021 break;
1022 case ELFCLASSNONE:
1023 errx(1, "invalid class");
1024 }
1025
1026 return val;
1027}
1028#endif
1024
1029
1025u_int64_t
1030static u_int64_t
1026elf_get_word(Elf32_Ehdr *e, void *base, elf_member_t member)
1027{
1028 u_int64_t val;
1029
1030 val = 0;
1031 switch (e->e_ident[EI_CLASS]) {
1032 case ELFCLASS32:
1033 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

1057 break;
1058 case ELFCLASSNONE:
1059 errx(1, "invalid class");
1060 }
1061
1062 return val;
1063}
1064
1031elf_get_word(Elf32_Ehdr *e, void *base, elf_member_t member)
1032{
1033 u_int64_t val;
1034
1035 val = 0;
1036 switch (e->e_ident[EI_CLASS]) {
1037 case ELFCLASS32:
1038 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

1062 break;
1063 case ELFCLASSNONE:
1064 errx(1, "invalid class");
1065 }
1066
1067 return val;
1068}
1069
1065u_int64_t
1070static u_int64_t
1066elf_get_quad(Elf32_Ehdr *e, void *base, elf_member_t member)
1067{
1068 u_int64_t val;
1069
1070 val = 0;
1071 switch (e->e_ident[EI_CLASS]) {
1072 case ELFCLASS32:
1073 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

1097 break;
1098 case ELFCLASSNONE:
1099 errx(1, "invalid class");
1100 }
1101
1102 return val;
1103}
1104
1071elf_get_quad(Elf32_Ehdr *e, void *base, elf_member_t member)
1072{
1073 u_int64_t val;
1074
1075 val = 0;
1076 switch (e->e_ident[EI_CLASS]) {
1077 case ELFCLASS32:
1078 base = (char *)base + elf32_offsets[member];

--- 23 unchanged lines hidden (view full) ---

1102 break;
1103 case ELFCLASSNONE:
1104 errx(1, "invalid class");
1105 }
1106
1107 return val;
1108}
1109
1105void
1110static void
1106usage(void)
1107{
1108 fprintf(stderr, "usage: elfdump -a | -cdeGhinprs [-w file] file\n");
1109 exit(1);
1110}
1111usage(void)
1112{
1113 fprintf(stderr, "usage: elfdump -a | -cdeGhinprs [-w file] file\n");
1114 exit(1);
1115}