Kernel/armv7 - Fixed lack of in*/out* functions
[tpg/acess2.git] / Usermode / Libraries / ld-acess.so_src / elf64.h
1 /*
2  * Acess2 Dynamic Linker
3  *
4  * elf64.h
5  */
6
7 #ifndef _ELF64_H_
8 #define _ELF64_H_
9
10 #define ELFCLASS64      2
11
12 typedef uint16_t        Elf64_Half;
13 typedef uint32_t        Elf64_Word;
14 typedef uint64_t        Elf64_Addr;
15 typedef uint64_t        Elf64_Off;
16 typedef uint64_t        Elf64_Xword;
17 typedef  int64_t        Elf64_Sxword;
18
19 typedef struct
20 {
21         unsigned char   e_ident[16];
22         Elf64_Half      e_type;
23         Elf64_Half      e_machine;
24         Elf64_Word      e_version;
25         Elf64_Addr      e_entry;
26         Elf64_Off       e_phoff;
27         Elf64_Off       e_shoff;
28         Elf64_Word      e_flags;
29         Elf64_Half      e_ehsize;
30         Elf64_Half      e_phentsize;
31         Elf64_Half      e_phnum;
32         Elf64_Half      e_shentsize;
33         Elf64_Half      e_shnum;
34         Elf64_Half      e_shstrndx;
35 } Elf64_Ehdr;
36
37 typedef struct
38 {
39         Elf64_Word      sh_name;
40         Elf64_Word      sh_type;
41         Elf64_Xword     sh_flags;
42         Elf64_Addr      sh_addr;
43         Elf64_Off       sh_offset;
44         Elf64_Xword     sh_size;
45         Elf64_Word      sh_link;
46         Elf64_Word      sh_info;
47         Elf64_Xword     sh_addralign;
48         Elf64_Xword     sh_entsize;
49 } Elf64_Shdr;
50
51 typedef struct
52 {
53         Elf64_Word      p_type;
54         Elf64_Word      p_flags;
55         Elf64_Off       p_offset;
56         Elf64_Addr      p_vaddr;
57         Elf64_Addr      p_paddr;
58         Elf64_Xword     p_filesz;
59         Elf64_Xword     p_memsz;
60         Elf64_Xword     p_align;
61 } Elf64_Phdr;
62
63 typedef struct
64 {
65         Elf64_Sxword    d_tag;
66         union {
67                 Elf64_Xword     d_val;
68                 Elf64_Addr      d_ptr;
69         } d_un;
70 } Elf64_Dyn;
71
72 typedef struct
73 {
74         Elf64_Word      st_name;
75         uint8_t         st_info;
76         uint8_t         st_other;
77         Elf64_Half      st_shndx;
78         Elf64_Addr      st_value;
79         Elf64_Xword     st_size;
80 } Elf64_Sym;
81
82 typedef struct
83 {
84         Elf64_Addr      r_offset;
85         Elf64_Xword     r_info;
86 } Elf64_Rel;
87
88 typedef struct
89 {
90         Elf64_Addr      r_offset;
91         Elf64_Xword     r_info;
92         Elf64_Sxword    r_addend;
93 } Elf64_Rela;
94
95 #define ELF64_R_SYM(info)       ((info) >> 32)
96 #define ELF64_R_TYPE(info)      ((info) & 0xFFFFFFFF)
97
98 enum eElf64_RelocTypes_x86_64
99 {
100         R_X86_64_NONE,
101         R_X86_64_64,    // 64, S + A
102         R_X86_64_PC32,  // 32, S + A - P
103         R_X86_64_GOT32, // 32, G + A
104         R_X86_64_PLT32, // 32, L + A - P
105         R_X86_64_COPY,
106         R_X86_64_GLOB_DAT,      // 64, S
107         R_X86_64_JUMP_SLOT,     // 64, S
108         R_X86_64_RELATIVE,      // 64, B + A
109         // TODO: Rest
110 };
111
112 #endif
113

UCC git Repository :: git.ucc.asn.au