elf.h - scc - simple c99 compiler
HTML git clone git://git.simple-cc.org/scc
DIR Log
DIR Files
DIR Refs
DIR Submodules
DIR README
DIR LICENSE
---
elf.h (1809B)
---
1 #define EI_NIDENT 16
2
3 typedef struct elf Elf;
4 typedef struct elfhdr Elfhdr;
5 typedef struct elfphdr Elfphdr;
6 typedef struct elfsec Elfsec;
7 typedef struct elfsym Elfsym;
8 typedef struct elfpack Elfpack;
9 typedef struct elfunpack Elfunpack;
10 typedef struct elfrel Elfrel;
11
12 struct elfhdr {
13 unsigned char ident[EI_NIDENT];
14 unsigned short type;
15 unsigned short machine;
16 unsigned long version;
17 unsigned long long entry;
18 unsigned long long phoff;
19 unsigned long long shoff;
20 unsigned long flags;
21 unsigned short ehsize;
22
23 unsigned short phentsize;
24 unsigned short phnum;
25
26 unsigned short shentsize;
27 unsigned short shnum;
28 unsigned short shstrndx;
29 };
30
31 struct elfphdr {
32 unsigned long type;
33 unsigned long flags;
34 unsigned long long offset;
35
36 unsigned long long vaddr;
37 unsigned long long paddr;
38
39 unsigned long long filesz;
40 unsigned long long memsz;
41 unsigned long long align;
42 };
43
44 struct elfsec {
45 char *name;
46 char *strtbl;
47
48 unsigned long sh_name;
49 unsigned long type;
50 unsigned long long flags;
51 unsigned long long addr;
52 unsigned long long offset;
53 unsigned long long size;
54 unsigned long link;
55 unsigned long info;
56 unsigned long long addralign;
57 unsigned long long entsize;
58 };
59
60 struct elfrel {
61 Elfsym *sym;
62 Elfsec *sec;
63
64 unsigned long long off;
65 unsigned long info;
66 long addend;
67 };
68
69 struct elfsym {
70 char *name;
71 Elfsec *symsec;
72
73 unsigned long st_name;
74 unsigned char info;
75 unsigned char other;
76 unsigned short shndx;
77 unsigned long long value;
78 unsigned long long size;
79 };
80
81 struct elf {
82 Elfhdr hdr;
83 Elfphdr *phdr;
84 int is32;
85
86 Elfsec *secs;
87 int nsec;
88 int secstrtbl;
89
90 Elfsym *syms;
91 int nsym;
92
93 Elfrel *rels;
94 int nrel;
95
96 Elfpack *pack;
97 Elfunpack *unpack;
98 };
99
100 struct arch {
101 char *name;
102 int mach;
103 int endian;
104 int type;
105 int is32;
106 };
107
108 /* globals */
109 extern struct arch elfarchs[];