Statistics
| Branch: | Revision:

root / elf.h @ b03c60f3

History | View | Annotate | Download (10.7 kB)

1 31e31b8a bellard
/*
2 31e31b8a bellard
 * ELF register definitions..
3 31e31b8a bellard
 */
4 31e31b8a bellard
5 31e31b8a bellard
#include <inttypes.h>
6 31e31b8a bellard
7 31e31b8a bellard
typedef uint32_t  elf_greg_t;
8 31e31b8a bellard
9 01ffc75b bellard
#define ELF_NGREG (sizeof (struct target_pt_regs) / sizeof(elf_greg_t))
10 31e31b8a bellard
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
11 31e31b8a bellard
12 31e31b8a bellard
typedef struct user_i387_struct elf_fpregset_t;
13 31e31b8a bellard
14 31e31b8a bellard
/*
15 31e31b8a bellard
 * This is used to ensure we don't load something for the wrong architecture.
16 31e31b8a bellard
 */
17 31e31b8a bellard
#define elf_check_arch(x) ( ((x) == EM_386) || ((x) == EM_486) )
18 31e31b8a bellard
19 31e31b8a bellard
/*
20 31e31b8a bellard
 * These are used to set parameters in the core dumps.
21 31e31b8a bellard
 */
22 31e31b8a bellard
#define ELF_CLASS        ELFCLASS32
23 31e31b8a bellard
#define ELF_DATA        ELFDATA2LSB;
24 31e31b8a bellard
#define ELF_ARCH        EM_386
25 31e31b8a bellard
26 31e31b8a bellard
        /* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program
27 31e31b8a bellard
           starts %edx contains a pointer to a function which might be
28 31e31b8a bellard
           registered using `atexit'.  This provides a mean for the
29 31e31b8a bellard
           dynamic linker to call DT_FINI functions for shared libraries
30 31e31b8a bellard
           that have been loaded before the code runs.
31 31e31b8a bellard

32 31e31b8a bellard
           A value of 0 tells we have no such handler.  */
33 31e31b8a bellard
#define ELF_PLAT_INIT(_r)        _r->edx = 0
34 31e31b8a bellard
35 31e31b8a bellard
#define USE_ELF_CORE_DUMP
36 31e31b8a bellard
#define ELF_EXEC_PAGESIZE        4096
37 31e31b8a bellard
38 31e31b8a bellard
39 31e31b8a bellard
typedef uint32_t         Elf32_Addr;
40 31e31b8a bellard
typedef uint16_t Elf32_Half;
41 31e31b8a bellard
typedef uint32_t Elf32_Off;
42 31e31b8a bellard
typedef int32_t  Elf32_Sword;
43 31e31b8a bellard
typedef uint32_t Elf32_Word;
44 31e31b8a bellard
45 31e31b8a bellard
/* These constants are for the segment types stored in the image headers */
46 31e31b8a bellard
#define PT_NULL    0
47 31e31b8a bellard
#define PT_LOAD    1
48 31e31b8a bellard
#define PT_DYNAMIC 2
49 31e31b8a bellard
#define PT_INTERP  3
50 31e31b8a bellard
#define PT_NOTE    4
51 31e31b8a bellard
#define PT_SHLIB   5
52 31e31b8a bellard
#define PT_PHDR    6
53 31e31b8a bellard
#define PT_LOPROC  0x70000000
54 31e31b8a bellard
#define PT_HIPROC  0x7fffffff
55 31e31b8a bellard
56 31e31b8a bellard
/* These constants define the different elf file types */
57 31e31b8a bellard
#define ET_NONE   0
58 31e31b8a bellard
#define ET_REL    1
59 31e31b8a bellard
#define ET_EXEC   2
60 31e31b8a bellard
#define ET_DYN    3
61 31e31b8a bellard
#define ET_CORE   4
62 31e31b8a bellard
#define ET_LOPROC 5
63 31e31b8a bellard
#define ET_HIPROC 6
64 31e31b8a bellard
65 31e31b8a bellard
/* These constants define the various ELF target machines */
66 31e31b8a bellard
#define EM_NONE  0
67 31e31b8a bellard
#define EM_M32   1
68 31e31b8a bellard
#define EM_SPARC 2
69 31e31b8a bellard
#define EM_386   3
70 31e31b8a bellard
#define EM_68K   4
71 31e31b8a bellard
#define EM_88K   5
72 31e31b8a bellard
#define EM_486   6   /* Perhaps disused */
73 31e31b8a bellard
#define EM_860   7
74 31e31b8a bellard
75 31e31b8a bellard
#define EM_MIPS                8        /* MIPS R3000 (officially, big-endian only) */
76 31e31b8a bellard
77 31e31b8a bellard
#define EM_MIPS_RS4_BE 10        /* MIPS R4000 big-endian */
78 31e31b8a bellard
79 31e31b8a bellard
#define EM_SPARC64     11        /* SPARC v9 (not official) 64-bit */
80 31e31b8a bellard
81 31e31b8a bellard
#define EM_PARISC      15        /* HPPA */
82 31e31b8a bellard
83 31e31b8a bellard
#define EM_SPARC32PLUS 18        /* Sun's "v8plus" */
84 31e31b8a bellard
85 31e31b8a bellard
#define EM_PPC               20        /* PowerPC */
86 31e31b8a bellard
87 31e31b8a bellard
/*
88 31e31b8a bellard
 * This is an interim value that we will use until the committee comes
89 31e31b8a bellard
 * up with a final number.
90 31e31b8a bellard
 */
91 31e31b8a bellard
#define EM_ALPHA        0x9026
92 31e31b8a bellard
93 31e31b8a bellard
94 31e31b8a bellard
/* This is the info that is needed to parse the dynamic section of the file */
95 31e31b8a bellard
#define DT_NULL                0
96 31e31b8a bellard
#define DT_NEEDED        1
97 31e31b8a bellard
#define DT_PLTRELSZ        2
98 31e31b8a bellard
#define DT_PLTGOT        3
99 31e31b8a bellard
#define DT_HASH                4
100 31e31b8a bellard
#define DT_STRTAB        5
101 31e31b8a bellard
#define DT_SYMTAB        6
102 31e31b8a bellard
#define DT_RELA                7
103 31e31b8a bellard
#define DT_RELASZ        8
104 31e31b8a bellard
#define DT_RELAENT        9
105 31e31b8a bellard
#define DT_STRSZ        10
106 31e31b8a bellard
#define DT_SYMENT        11
107 31e31b8a bellard
#define DT_INIT                12
108 31e31b8a bellard
#define DT_FINI                13
109 31e31b8a bellard
#define DT_SONAME        14
110 31e31b8a bellard
#define DT_RPATH         15
111 31e31b8a bellard
#define DT_SYMBOLIC        16
112 31e31b8a bellard
#define DT_REL                17
113 31e31b8a bellard
#define DT_RELSZ        18
114 31e31b8a bellard
#define DT_RELENT        19
115 31e31b8a bellard
#define DT_PLTREL        20
116 31e31b8a bellard
#define DT_DEBUG        21
117 31e31b8a bellard
#define DT_TEXTREL        22
118 31e31b8a bellard
#define DT_JMPREL        23
119 31e31b8a bellard
#define DT_LOPROC        0x70000000
120 31e31b8a bellard
#define DT_HIPROC        0x7fffffff
121 31e31b8a bellard
122 31e31b8a bellard
/* This info is needed when parsing the symbol table */
123 31e31b8a bellard
#define STB_LOCAL  0
124 31e31b8a bellard
#define STB_GLOBAL 1
125 31e31b8a bellard
#define STB_WEAK   2
126 31e31b8a bellard
127 31e31b8a bellard
#define STT_NOTYPE  0
128 31e31b8a bellard
#define STT_OBJECT  1
129 31e31b8a bellard
#define STT_FUNC    2
130 31e31b8a bellard
#define STT_SECTION 3
131 31e31b8a bellard
#define STT_FILE    4
132 31e31b8a bellard
133 31e31b8a bellard
#define ELF32_ST_BIND(x) ((x) >> 4)
134 31e31b8a bellard
#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
135 31e31b8a bellard
136 31e31b8a bellard
/* Symbolic values for the entries in the auxiliary table
137 31e31b8a bellard
   put on the initial stack */
138 31e31b8a bellard
#define AT_NULL   0        /* end of vector */
139 31e31b8a bellard
#define AT_IGNORE 1        /* entry should be ignored */
140 31e31b8a bellard
#define AT_EXECFD 2        /* file descriptor of program */
141 31e31b8a bellard
#define AT_PHDR   3        /* program headers for program */
142 31e31b8a bellard
#define AT_PHENT  4        /* size of program header entry */
143 31e31b8a bellard
#define AT_PHNUM  5        /* number of program headers */
144 31e31b8a bellard
#define AT_PAGESZ 6        /* system page size */
145 31e31b8a bellard
#define AT_BASE   7        /* base address of interpreter */
146 31e31b8a bellard
#define AT_FLAGS  8        /* flags */
147 31e31b8a bellard
#define AT_ENTRY  9        /* entry point of program */
148 31e31b8a bellard
#define AT_NOTELF 10        /* program is not ELF */
149 31e31b8a bellard
#define AT_UID    11        /* real uid */
150 31e31b8a bellard
#define AT_EUID   12        /* effective uid */
151 31e31b8a bellard
#define AT_GID    13        /* real gid */
152 31e31b8a bellard
#define AT_EGID   14        /* effective gid */
153 31e31b8a bellard
154 31e31b8a bellard
155 31e31b8a bellard
typedef struct dynamic{
156 31e31b8a bellard
  Elf32_Sword d_tag;
157 31e31b8a bellard
  union{
158 31e31b8a bellard
    Elf32_Sword        d_val;
159 31e31b8a bellard
    Elf32_Addr        d_ptr;
160 31e31b8a bellard
  } d_un;
161 31e31b8a bellard
} Elf32_Dyn;
162 31e31b8a bellard
163 31e31b8a bellard
typedef struct {
164 31e31b8a bellard
  unsigned long long d_tag;                /* entry tag value */
165 31e31b8a bellard
  union {
166 31e31b8a bellard
    unsigned long long d_val;
167 31e31b8a bellard
    unsigned long long d_ptr;
168 31e31b8a bellard
  } d_un;
169 31e31b8a bellard
} Elf64_Dyn;
170 31e31b8a bellard
171 31e31b8a bellard
/* The following are used with relocations */
172 31e31b8a bellard
#define ELF32_R_SYM(x) ((x) >> 8)
173 31e31b8a bellard
#define ELF32_R_TYPE(x) ((x) & 0xff)
174 31e31b8a bellard
175 31e31b8a bellard
#define R_386_NONE        0
176 31e31b8a bellard
#define R_386_32        1
177 31e31b8a bellard
#define R_386_PC32        2
178 31e31b8a bellard
#define R_386_GOT32        3
179 31e31b8a bellard
#define R_386_PLT32        4
180 31e31b8a bellard
#define R_386_COPY        5
181 31e31b8a bellard
#define R_386_GLOB_DAT        6
182 31e31b8a bellard
#define R_386_JMP_SLOT        7
183 31e31b8a bellard
#define R_386_RELATIVE        8
184 31e31b8a bellard
#define R_386_GOTOFF        9
185 31e31b8a bellard
#define R_386_GOTPC        10
186 31e31b8a bellard
#define R_386_NUM        11
187 31e31b8a bellard
188 31e31b8a bellard
typedef struct elf32_rel {
189 31e31b8a bellard
  Elf32_Addr        r_offset;
190 31e31b8a bellard
  Elf32_Word        r_info;
191 31e31b8a bellard
} Elf32_Rel;
192 31e31b8a bellard
193 31e31b8a bellard
typedef struct elf64_rel {
194 31e31b8a bellard
  unsigned long long r_offset;        /* Location at which to apply the action */
195 31e31b8a bellard
  unsigned long long r_info;        /* index and type of relocation */
196 31e31b8a bellard
} Elf64_Rel;
197 31e31b8a bellard
198 31e31b8a bellard
typedef struct elf32_rela{
199 31e31b8a bellard
  Elf32_Addr        r_offset;
200 31e31b8a bellard
  Elf32_Word        r_info;
201 31e31b8a bellard
  Elf32_Sword        r_addend;
202 31e31b8a bellard
} Elf32_Rela;
203 31e31b8a bellard
204 31e31b8a bellard
typedef struct elf64_rela {
205 31e31b8a bellard
  unsigned long long r_offset;        /* Location at which to apply the action */
206 31e31b8a bellard
  unsigned long long r_info;        /* index and type of relocation */
207 31e31b8a bellard
  unsigned long long r_addend;        /* Constant addend used to compute value */
208 31e31b8a bellard
} Elf64_Rela;
209 31e31b8a bellard
210 31e31b8a bellard
typedef struct elf32_sym{
211 31e31b8a bellard
  Elf32_Word        st_name;
212 31e31b8a bellard
  Elf32_Addr        st_value;
213 31e31b8a bellard
  Elf32_Word        st_size;
214 31e31b8a bellard
  unsigned char        st_info;
215 31e31b8a bellard
  unsigned char        st_other;
216 31e31b8a bellard
  Elf32_Half        st_shndx;
217 31e31b8a bellard
} Elf32_Sym;
218 31e31b8a bellard
219 31e31b8a bellard
typedef struct elf64_sym {
220 31e31b8a bellard
  unsigned int        st_name;                /* Symbol name, index in string tbl */
221 31e31b8a bellard
  unsigned char        st_info;                /* Type and binding attributes */
222 31e31b8a bellard
  unsigned char        st_other;                /* No defined meaning, 0 */
223 31e31b8a bellard
  unsigned short st_shndx;                /* Associated section index */
224 31e31b8a bellard
  unsigned long long st_value;                /* Value of the symbol */
225 31e31b8a bellard
  unsigned long long st_size;                /* Associated symbol size */
226 31e31b8a bellard
} Elf64_Sym;
227 31e31b8a bellard
228 31e31b8a bellard
229 31e31b8a bellard
#define EI_NIDENT        16
230 31e31b8a bellard
231 31e31b8a bellard
typedef struct elf32_hdr{
232 31e31b8a bellard
  unsigned char        e_ident[EI_NIDENT];
233 31e31b8a bellard
  Elf32_Half        e_type;
234 31e31b8a bellard
  Elf32_Half        e_machine;
235 31e31b8a bellard
  Elf32_Word        e_version;
236 31e31b8a bellard
  Elf32_Addr        e_entry;  /* Entry point */
237 31e31b8a bellard
  Elf32_Off        e_phoff;
238 31e31b8a bellard
  Elf32_Off        e_shoff;
239 31e31b8a bellard
  Elf32_Word        e_flags;
240 31e31b8a bellard
  Elf32_Half        e_ehsize;
241 31e31b8a bellard
  Elf32_Half        e_phentsize;
242 31e31b8a bellard
  Elf32_Half        e_phnum;
243 31e31b8a bellard
  Elf32_Half        e_shentsize;
244 31e31b8a bellard
  Elf32_Half        e_shnum;
245 31e31b8a bellard
  Elf32_Half        e_shstrndx;
246 31e31b8a bellard
} Elf32_Ehdr;
247 31e31b8a bellard
248 31e31b8a bellard
typedef struct elf64_hdr {
249 31e31b8a bellard
  unsigned char        e_ident[16];                /* ELF "magic number" */
250 31e31b8a bellard
  short int e_type;
251 31e31b8a bellard
  short unsigned int e_machine;
252 31e31b8a bellard
  int   e_version;
253 31e31b8a bellard
  unsigned long long e_entry;                /* Entry point virtual address */
254 31e31b8a bellard
  unsigned long long e_phoff;                /* Program header table file offset */
255 31e31b8a bellard
  unsigned long long e_shoff;                /* Section header table file offset */
256 31e31b8a bellard
  int   e_flags;
257 31e31b8a bellard
  short int e_ehsize;
258 31e31b8a bellard
  short int e_phentsize;
259 31e31b8a bellard
  short int e_phnum;
260 31e31b8a bellard
  short int e_shentsize;
261 31e31b8a bellard
  short int e_shnum;
262 31e31b8a bellard
  short int e_shstrndx;
263 31e31b8a bellard
} Elf64_Ehdr;
264 31e31b8a bellard
265 31e31b8a bellard
/* These constants define the permissions on sections in the program
266 31e31b8a bellard
   header, p_flags. */
267 31e31b8a bellard
#define PF_R                0x4
268 31e31b8a bellard
#define PF_W                0x2
269 31e31b8a bellard
#define PF_X                0x1
270 31e31b8a bellard
271 31e31b8a bellard
typedef struct elf32_phdr{
272 31e31b8a bellard
  Elf32_Word        p_type;
273 31e31b8a bellard
  Elf32_Off        p_offset;
274 31e31b8a bellard
  Elf32_Addr        p_vaddr;
275 31e31b8a bellard
  Elf32_Addr        p_paddr;
276 31e31b8a bellard
  Elf32_Word        p_filesz;
277 31e31b8a bellard
  Elf32_Word        p_memsz;
278 31e31b8a bellard
  Elf32_Word        p_flags;
279 31e31b8a bellard
  Elf32_Word        p_align;
280 31e31b8a bellard
} Elf32_Phdr;
281 31e31b8a bellard
282 31e31b8a bellard
typedef struct elf64_phdr {
283 31e31b8a bellard
  int p_type;
284 31e31b8a bellard
  int p_flags;
285 31e31b8a bellard
  unsigned long long p_offset;                /* Segment file offset */
286 31e31b8a bellard
  unsigned long long p_vaddr;                /* Segment virtual address */
287 31e31b8a bellard
  unsigned long long p_paddr;                /* Segment physical address */
288 31e31b8a bellard
  unsigned long long p_filesz;                /* Segment size in file */
289 31e31b8a bellard
  unsigned long long p_memsz;                /* Segment size in memory */
290 31e31b8a bellard
  unsigned long long p_align;                /* Segment alignment, file & memory */
291 31e31b8a bellard
} Elf64_Phdr;
292 31e31b8a bellard
293 31e31b8a bellard
/* sh_type */
294 31e31b8a bellard
#define SHT_NULL        0
295 31e31b8a bellard
#define SHT_PROGBITS        1
296 31e31b8a bellard
#define SHT_SYMTAB        2
297 31e31b8a bellard
#define SHT_STRTAB        3
298 31e31b8a bellard
#define SHT_RELA        4
299 31e31b8a bellard
#define SHT_HASH        5
300 31e31b8a bellard
#define SHT_DYNAMIC        6
301 31e31b8a bellard
#define SHT_NOTE        7
302 31e31b8a bellard
#define SHT_NOBITS        8
303 31e31b8a bellard
#define SHT_REL                9
304 31e31b8a bellard
#define SHT_SHLIB        10
305 31e31b8a bellard
#define SHT_DYNSYM        11
306 31e31b8a bellard
#define SHT_NUM                12
307 31e31b8a bellard
#define SHT_LOPROC        0x70000000
308 31e31b8a bellard
#define SHT_HIPROC        0x7fffffff
309 31e31b8a bellard
#define SHT_LOUSER        0x80000000
310 31e31b8a bellard
#define SHT_HIUSER        0xffffffff
311 31e31b8a bellard
312 31e31b8a bellard
/* sh_flags */
313 31e31b8a bellard
#define SHF_WRITE        0x1
314 31e31b8a bellard
#define SHF_ALLOC        0x2
315 31e31b8a bellard
#define SHF_EXECINSTR        0x4
316 31e31b8a bellard
#define SHF_MASKPROC        0xf0000000
317 31e31b8a bellard
318 31e31b8a bellard
/* special section indexes */
319 31e31b8a bellard
#define SHN_UNDEF        0
320 31e31b8a bellard
#define SHN_LORESERVE        0xff00
321 31e31b8a bellard
#define SHN_LOPROC        0xff00
322 31e31b8a bellard
#define SHN_HIPROC        0xff1f
323 31e31b8a bellard
#define SHN_ABS                0xfff1
324 31e31b8a bellard
#define SHN_COMMON        0xfff2
325 31e31b8a bellard
#define SHN_HIRESERVE        0xffff
326 31e31b8a bellard
 
327 31e31b8a bellard
typedef struct {
328 31e31b8a bellard
  Elf32_Word        sh_name;
329 31e31b8a bellard
  Elf32_Word        sh_type;
330 31e31b8a bellard
  Elf32_Word        sh_flags;
331 31e31b8a bellard
  Elf32_Addr        sh_addr;
332 31e31b8a bellard
  Elf32_Off        sh_offset;
333 31e31b8a bellard
  Elf32_Word        sh_size;
334 31e31b8a bellard
  Elf32_Word        sh_link;
335 31e31b8a bellard
  Elf32_Word        sh_info;
336 31e31b8a bellard
  Elf32_Word        sh_addralign;
337 31e31b8a bellard
  Elf32_Word        sh_entsize;
338 31e31b8a bellard
} Elf32_Shdr;
339 31e31b8a bellard
340 31e31b8a bellard
typedef struct elf64_shdr {
341 31e31b8a bellard
  unsigned int        sh_name;                /* Section name, index in string tbl */
342 31e31b8a bellard
  unsigned int        sh_type;                /* Type of section */
343 31e31b8a bellard
  unsigned long long sh_flags;                /* Miscellaneous section attributes */
344 31e31b8a bellard
  unsigned long long sh_addr;                /* Section virtual addr at execution */
345 31e31b8a bellard
  unsigned long long sh_offset;                /* Section file offset */
346 31e31b8a bellard
  unsigned long long sh_size;                /* Size of section in bytes */
347 31e31b8a bellard
  unsigned int        sh_link;                /* Index of another section */
348 31e31b8a bellard
  unsigned int        sh_info;                /* Additional section information */
349 31e31b8a bellard
  unsigned long long sh_addralign;        /* Section alignment */
350 31e31b8a bellard
  unsigned long long sh_entsize;        /* Entry size if section holds table */
351 31e31b8a bellard
} Elf64_Shdr;
352 31e31b8a bellard
353 31e31b8a bellard
#define        EI_MAG0                0                /* e_ident[] indexes */
354 31e31b8a bellard
#define        EI_MAG1                1
355 31e31b8a bellard
#define        EI_MAG2                2
356 31e31b8a bellard
#define        EI_MAG3                3
357 31e31b8a bellard
#define        EI_CLASS        4
358 31e31b8a bellard
#define        EI_DATA                5
359 31e31b8a bellard
#define        EI_VERSION        6
360 31e31b8a bellard
#define        EI_PAD                7
361 31e31b8a bellard
362 31e31b8a bellard
#define        ELFMAG0                0x7f                /* EI_MAG */
363 31e31b8a bellard
#define        ELFMAG1                'E'
364 31e31b8a bellard
#define        ELFMAG2                'L'
365 31e31b8a bellard
#define        ELFMAG3                'F'
366 31e31b8a bellard
#define        ELFMAG                "\177ELF"
367 31e31b8a bellard
#define        SELFMAG                4
368 31e31b8a bellard
369 31e31b8a bellard
#define        ELFCLASSNONE        0                /* EI_CLASS */
370 31e31b8a bellard
#define        ELFCLASS32        1
371 31e31b8a bellard
#define        ELFCLASS64        2
372 31e31b8a bellard
#define        ELFCLASSNUM        3
373 31e31b8a bellard
374 31e31b8a bellard
#define ELFDATANONE        0                /* e_ident[EI_DATA] */
375 31e31b8a bellard
#define ELFDATA2LSB        1
376 31e31b8a bellard
#define ELFDATA2MSB        2
377 31e31b8a bellard
378 31e31b8a bellard
#define EV_NONE                0                /* e_version, EI_VERSION */
379 31e31b8a bellard
#define EV_CURRENT        1
380 31e31b8a bellard
#define EV_NUM                2
381 31e31b8a bellard
382 31e31b8a bellard
/* Notes used in ET_CORE */
383 31e31b8a bellard
#define NT_PRSTATUS        1
384 31e31b8a bellard
#define NT_PRFPREG        2
385 31e31b8a bellard
#define NT_PRPSINFO        3
386 31e31b8a bellard
#define NT_TASKSTRUCT        4
387 31e31b8a bellard
388 31e31b8a bellard
/* Note header in a PT_NOTE section */
389 31e31b8a bellard
typedef struct elf32_note {
390 31e31b8a bellard
  Elf32_Word        n_namesz;        /* Name size */
391 31e31b8a bellard
  Elf32_Word        n_descsz;        /* Content size */
392 31e31b8a bellard
  Elf32_Word        n_type;                /* Content type */
393 31e31b8a bellard
} Elf32_Nhdr;
394 31e31b8a bellard
395 31e31b8a bellard
/* Note header in a PT_NOTE section */
396 31e31b8a bellard
/*
397 31e31b8a bellard
 * For now we use the 32 bit version of the structure until we figure
398 31e31b8a bellard
 * out whether we need anything better.  Note - on the Alpha, "unsigned int"
399 31e31b8a bellard
 * is only 32 bits.
400 31e31b8a bellard
 */
401 31e31b8a bellard
typedef struct elf64_note {
402 31e31b8a bellard
  unsigned int        n_namesz;        /* Name size */
403 31e31b8a bellard
  unsigned int        n_descsz;        /* Content size */
404 31e31b8a bellard
  unsigned int        n_type;                /* Content type */
405 31e31b8a bellard
} Elf64_Nhdr;
406 31e31b8a bellard
407 31e31b8a bellard
#define ELF_START_MMAP 0x80000000
408 31e31b8a bellard
409 31e31b8a bellard
#if ELF_CLASS == ELFCLASS32
410 31e31b8a bellard
411 31e31b8a bellard
extern Elf32_Dyn _DYNAMIC [];
412 31e31b8a bellard
#define elfhdr                elf32_hdr
413 31e31b8a bellard
#define elf_phdr        elf32_phdr
414 31e31b8a bellard
#define elf_note        elf32_note
415 31e31b8a bellard
416 31e31b8a bellard
#else
417 31e31b8a bellard
418 31e31b8a bellard
extern Elf64_Dyn _DYNAMIC [];
419 31e31b8a bellard
#define elfhdr                elf64_hdr
420 31e31b8a bellard
#define elf_phdr        elf64_phdr
421 31e31b8a bellard
#define elf_note        elf64_note
422 31e31b8a bellard
423 31e31b8a bellard
#endif
424 31e31b8a bellard