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

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