add a missing section header table index conversion
[tangerine.git] / arch / x86_64-pc / bootstrap / elfloader.h
blob20fc6697e58aa53bf762cd802f996809c62a9203
1 #ifndef ELFLOADER_H_
2 #define ELFLOADER_H_
4 /*
5 Copyright (C) 2006 The AROS Development Team. All rights reserved.
6 $Id$
7 */
9 #define SHT_PROGBITS 1
10 #define SHT_SYMTAB 2
11 #define SHT_STRTAB 3
12 #define SHT_RELA 4
13 #define SHT_NOBITS 8
14 #define SHT_REL 9
16 #define ET_REL 1
17 #define EM_X86_64 62
19 #define STT_OBJECT 1
20 #define STT_FUNC 2
22 #define SHN_ABS 0xfff1
23 #define SHN_COMMON 0xfff2
24 #define SHN_UNDEF 0
26 #define SHF_WRITE (1 << 0)
27 #define SHF_ALLOC (1 << 1)
28 #define SHF_EXECINSTR (1 << 2)
30 #define R_X86_64_NONE 0
31 #define R_X86_64_64 1
32 #define R_X86_64_PC32 2
33 #define R_X86_64_32 10
34 #define R_X86_64_32S 11
36 #define ELF64_ST_TYPE(i) ((i) & 0x0F)
38 #define ELF64_R_SYM(i) (unsigned long)((i) >> 32)
39 #define ELF64_R_TYPE(i) (unsigned long)((i) & 0xffffffffULL)
40 #define ELF64_R_INFO(sym, type) (((unsigned long long)(sym) << 32) + (type))
42 struct elfheader {
43 unsigned char ident[16];
44 unsigned short type;
45 unsigned short machine;
46 unsigned int version;
47 unsigned long long entry;
48 unsigned long long phoff;
49 unsigned long long shoff;
50 unsigned int flags;
51 unsigned short ehsize;
52 unsigned short phentsize;
53 unsigned short phnum;
54 unsigned short shentsize;
55 unsigned short shnum;
56 unsigned short shstrndx;
59 struct sheader {
60 unsigned int name;
61 unsigned int type;
62 unsigned long long flags;
63 unsigned long long addr;
64 unsigned long long offset;
65 unsigned long long size;
66 unsigned int link;
67 unsigned int info;
68 unsigned long long addralign;
69 unsigned long long entsize;
72 struct symbol {
73 unsigned int name;
74 unsigned char info;
75 unsigned char other;
76 unsigned short shindex;
77 unsigned long long value;
78 unsigned long long size;
81 struct relo {
82 unsigned long long offset;
83 unsigned long long info;
84 signed long long addend;
87 void load_elf_file(void *, unsigned long long);
88 void *kernel_lowest();
89 void *kernel_highest();
90 void set_base_address(void *, void *);
92 #endif /*ELFLOADER_H_*/