Home | History | Annotate | Download | only in linux
      1 /****************************************************************************
      2  ****************************************************************************
      3  ***
      4  ***   This header was automatically generated from a Linux kernel header
      5  ***   of the same name, to make information necessary for userspace to
      6  ***   call into the kernel available to libc.  It contains only constants,
      7  ***   structures, and macros generated from the original header, and thus,
      8  ***   contains no copyrightable information.
      9  ***
     10  ****************************************************************************
     11  ****************************************************************************/
     12 #ifndef _LINUX_ELF_H
     13 #define _LINUX_ELF_H
     14 
     15 #include <linux/types.h>
     16 #include <linux/auxvec.h>
     17 #include <linux/elf-em.h>
     18 #include <asm/elf.h>
     19 
     20 #ifndef elf_read_implies_exec
     21 
     22 #define elf_read_implies_exec(ex, have_pt_gnu_stack) 0
     23 #endif
     24 
     25 typedef __u32 Elf32_Addr;
     26 typedef __u16 Elf32_Half;
     27 typedef __u32 Elf32_Off;
     28 typedef __s32 Elf32_Sword;
     29 typedef __u32 Elf32_Word;
     30 
     31 typedef __u64 Elf64_Addr;
     32 typedef __u16 Elf64_Half;
     33 typedef __s16 Elf64_SHalf;
     34 typedef __u64 Elf64_Off;
     35 typedef __s32 Elf64_Sword;
     36 typedef __u32 Elf64_Word;
     37 typedef __u64 Elf64_Xword;
     38 typedef __s64 Elf64_Sxword;
     39 
     40 #define PT_NULL 0
     41 #define PT_LOAD 1
     42 #define PT_DYNAMIC 2
     43 #define PT_INTERP 3
     44 #define PT_NOTE 4
     45 #define PT_SHLIB 5
     46 #define PT_PHDR 6
     47 #define PT_TLS 7
     48 #define PT_LOOS 0x60000000
     49 #define PT_HIOS 0x6fffffff
     50 #define PT_LOPROC 0x70000000
     51 #define PT_HIPROC 0x7fffffff
     52 #define PT_GNU_EH_FRAME 0x6474e550
     53 
     54 #define PT_GNU_STACK (PT_LOOS + 0x474e551)
     55 
     56 #define ET_NONE 0
     57 #define ET_REL 1
     58 #define ET_EXEC 2
     59 #define ET_DYN 3
     60 #define ET_CORE 4
     61 #define ET_LOPROC 0xff00
     62 #define ET_HIPROC 0xffff
     63 
     64 #define DT_NULL 0
     65 #define DT_NEEDED 1
     66 #define DT_PLTRELSZ 2
     67 #define DT_PLTGOT 3
     68 #define DT_HASH 4
     69 #define DT_STRTAB 5
     70 #define DT_SYMTAB 6
     71 #define DT_RELA 7
     72 #define DT_RELASZ 8
     73 #define DT_RELAENT 9
     74 #define DT_STRSZ 10
     75 #define DT_SYMENT 11
     76 #define DT_INIT 12
     77 #define DT_FINI 13
     78 #define DT_SONAME 14
     79 #define DT_RPATH 15
     80 #define DT_SYMBOLIC 16
     81 #define DT_REL 17
     82 #define DT_RELSZ 18
     83 #define DT_RELENT 19
     84 #define DT_PLTREL 20
     85 #define DT_DEBUG 21
     86 #define DT_TEXTREL 22
     87 #define DT_JMPREL 23
     88 #define DT_LOPROC 0x70000000
     89 #define DT_HIPROC 0x7fffffff
     90 
     91 #define STB_LOCAL 0
     92 #define STB_GLOBAL 1
     93 #define STB_WEAK 2
     94 
     95 #define STT_NOTYPE 0
     96 #define STT_OBJECT 1
     97 #define STT_FUNC 2
     98 #define STT_SECTION 3
     99 #define STT_FILE 4
    100 #define STT_COMMON 5
    101 #define STT_TLS 6
    102 
    103 #define ELF_ST_BIND(x) ((x) >> 4)
    104 #define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf)
    105 #define ELF32_ST_BIND(x) ELF_ST_BIND(x)
    106 #define ELF32_ST_TYPE(x) ELF_ST_TYPE(x)
    107 #define ELF64_ST_BIND(x) ELF_ST_BIND(x)
    108 #define ELF64_ST_TYPE(x) ELF_ST_TYPE(x)
    109 
    110 typedef struct dynamic{
    111  Elf32_Sword d_tag;
    112  union{
    113  Elf32_Sword d_val;
    114  Elf32_Addr d_ptr;
    115  } d_un;
    116 } Elf32_Dyn;
    117 
    118 typedef struct {
    119  Elf64_Sxword d_tag;
    120  union {
    121  Elf64_Xword d_val;
    122  Elf64_Addr d_ptr;
    123  } d_un;
    124 } Elf64_Dyn;
    125 
    126 #define ELF32_R_SYM(x) ((x) >> 8)
    127 #define ELF32_R_TYPE(x) ((x) & 0xff)
    128 
    129 #define ELF64_R_SYM(i) ((i) >> 32)
    130 #define ELF64_R_TYPE(i) ((i) & 0xffffffff)
    131 
    132 typedef struct elf32_rel {
    133  Elf32_Addr r_offset;
    134  Elf32_Word r_info;
    135 } Elf32_Rel;
    136 
    137 typedef struct elf64_rel {
    138  Elf64_Addr r_offset;
    139  Elf64_Xword r_info;
    140 } Elf64_Rel;
    141 
    142 typedef struct elf32_rela{
    143  Elf32_Addr r_offset;
    144  Elf32_Word r_info;
    145  Elf32_Sword r_addend;
    146 } Elf32_Rela;
    147 
    148 typedef struct elf64_rela {
    149  Elf64_Addr r_offset;
    150  Elf64_Xword r_info;
    151  Elf64_Sxword r_addend;
    152 } Elf64_Rela;
    153 
    154 typedef struct elf32_sym{
    155  Elf32_Word st_name;
    156  Elf32_Addr st_value;
    157  Elf32_Word st_size;
    158  unsigned char st_info;
    159  unsigned char st_other;
    160  Elf32_Half st_shndx;
    161 } Elf32_Sym;
    162 
    163 typedef struct elf64_sym {
    164  Elf64_Word st_name;
    165  unsigned char st_info;
    166  unsigned char st_other;
    167  Elf64_Half st_shndx;
    168  Elf64_Addr st_value;
    169  Elf64_Xword st_size;
    170 } Elf64_Sym;
    171 
    172 #define EI_NIDENT 16
    173 
    174 typedef struct elf32_hdr{
    175  unsigned char e_ident[EI_NIDENT];
    176  Elf32_Half e_type;
    177  Elf32_Half e_machine;
    178  Elf32_Word e_version;
    179  Elf32_Addr e_entry;
    180  Elf32_Off e_phoff;
    181  Elf32_Off e_shoff;
    182  Elf32_Word e_flags;
    183  Elf32_Half e_ehsize;
    184  Elf32_Half e_phentsize;
    185  Elf32_Half e_phnum;
    186  Elf32_Half e_shentsize;
    187  Elf32_Half e_shnum;
    188  Elf32_Half e_shstrndx;
    189 } Elf32_Ehdr;
    190 
    191 typedef struct elf64_hdr {
    192  unsigned char e_ident[16];
    193  Elf64_Half e_type;
    194  Elf64_Half e_machine;
    195  Elf64_Word e_version;
    196  Elf64_Addr e_entry;
    197  Elf64_Off e_phoff;
    198  Elf64_Off e_shoff;
    199  Elf64_Word e_flags;
    200  Elf64_Half e_ehsize;
    201  Elf64_Half e_phentsize;
    202  Elf64_Half e_phnum;
    203  Elf64_Half e_shentsize;
    204  Elf64_Half e_shnum;
    205  Elf64_Half e_shstrndx;
    206 } Elf64_Ehdr;
    207 
    208 #define PF_R 0x4
    209 #define PF_W 0x2
    210 #define PF_X 0x1
    211 
    212 typedef struct elf32_phdr{
    213  Elf32_Word p_type;
    214  Elf32_Off p_offset;
    215  Elf32_Addr p_vaddr;
    216  Elf32_Addr p_paddr;
    217  Elf32_Word p_filesz;
    218  Elf32_Word p_memsz;
    219  Elf32_Word p_flags;
    220  Elf32_Word p_align;
    221 } Elf32_Phdr;
    222 
    223 typedef struct elf64_phdr {
    224  Elf64_Word p_type;
    225  Elf64_Word p_flags;
    226  Elf64_Off p_offset;
    227  Elf64_Addr p_vaddr;
    228  Elf64_Addr p_paddr;
    229  Elf64_Xword p_filesz;
    230  Elf64_Xword p_memsz;
    231  Elf64_Xword p_align;
    232 } Elf64_Phdr;
    233 
    234 #define SHT_NULL 0
    235 #define SHT_PROGBITS 1
    236 #define SHT_SYMTAB 2
    237 #define SHT_STRTAB 3
    238 #define SHT_RELA 4
    239 #define SHT_HASH 5
    240 #define SHT_DYNAMIC 6
    241 #define SHT_NOTE 7
    242 #define SHT_NOBITS 8
    243 #define SHT_REL 9
    244 #define SHT_SHLIB 10
    245 #define SHT_DYNSYM 11
    246 #define SHT_NUM 12
    247 #define SHT_LOPROC 0x70000000
    248 #define SHT_HIPROC 0x7fffffff
    249 #define SHT_LOUSER 0x80000000
    250 #define SHT_HIUSER 0xffffffff
    251 
    252 #define SHF_WRITE 0x1
    253 #define SHF_ALLOC 0x2
    254 #define SHF_EXECINSTR 0x4
    255 #define SHF_MASKPROC 0xf0000000
    256 
    257 #define SHN_UNDEF 0
    258 #define SHN_LORESERVE 0xff00
    259 #define SHN_LOPROC 0xff00
    260 #define SHN_HIPROC 0xff1f
    261 #define SHN_ABS 0xfff1
    262 #define SHN_COMMON 0xfff2
    263 #define SHN_HIRESERVE 0xffff
    264 
    265 typedef struct {
    266  Elf32_Word sh_name;
    267  Elf32_Word sh_type;
    268  Elf32_Word sh_flags;
    269  Elf32_Addr sh_addr;
    270  Elf32_Off sh_offset;
    271  Elf32_Word sh_size;
    272  Elf32_Word sh_link;
    273  Elf32_Word sh_info;
    274  Elf32_Word sh_addralign;
    275  Elf32_Word sh_entsize;
    276 } Elf32_Shdr;
    277 
    278 typedef struct elf64_shdr {
    279  Elf64_Word sh_name;
    280  Elf64_Word sh_type;
    281  Elf64_Xword sh_flags;
    282  Elf64_Addr sh_addr;
    283  Elf64_Off sh_offset;
    284  Elf64_Xword sh_size;
    285  Elf64_Word sh_link;
    286  Elf64_Word sh_info;
    287  Elf64_Xword sh_addralign;
    288  Elf64_Xword sh_entsize;
    289 } Elf64_Shdr;
    290 
    291 #define EI_MAG0 0
    292 #define EI_MAG1 1
    293 #define EI_MAG2 2
    294 #define EI_MAG3 3
    295 #define EI_CLASS 4
    296 #define EI_DATA 5
    297 #define EI_VERSION 6
    298 #define EI_OSABI 7
    299 #define EI_PAD 8
    300 
    301 #define ELFMAG0 0x7f
    302 #define ELFMAG1 'E'
    303 #define ELFMAG2 'L'
    304 #define ELFMAG3 'F'
    305 #define ELFMAG "\177ELF"
    306 #define SELFMAG 4
    307 
    308 #define ELFCLASSNONE 0
    309 #define ELFCLASS32 1
    310 #define ELFCLASS64 2
    311 #define ELFCLASSNUM 3
    312 
    313 #define ELFDATANONE 0
    314 #define ELFDATA2LSB 1
    315 #define ELFDATA2MSB 2
    316 
    317 #define EV_NONE 0
    318 #define EV_CURRENT 1
    319 #define EV_NUM 2
    320 
    321 #define ELFOSABI_NONE 0
    322 #define ELFOSABI_LINUX 3
    323 
    324 #ifndef ELF_OSABI
    325 #define ELF_OSABI ELFOSABI_NONE
    326 #endif
    327 
    328 #define NT_PRSTATUS 1
    329 #define NT_PRFPREG 2
    330 #define NT_PRPSINFO 3
    331 #define NT_TASKSTRUCT 4
    332 #define NT_AUXV 6
    333 #define NT_PRXFPREG 0x46e62b7f
    334 
    335 typedef struct elf32_note {
    336  Elf32_Word n_namesz;
    337  Elf32_Word n_descsz;
    338  Elf32_Word n_type;
    339 } Elf32_Nhdr;
    340 
    341 typedef struct elf64_note {
    342  Elf64_Word n_namesz;
    343  Elf64_Word n_descsz;
    344  Elf64_Word n_type;
    345 } Elf64_Nhdr;
    346 
    347 #if ELF_CLASS == ELFCLASS32
    348 
    349 #define elfhdr elf32_hdr
    350 #define elf_phdr elf32_phdr
    351 #define elf_note elf32_note
    352 
    353 #else
    354 
    355 #define elfhdr elf64_hdr
    356 #define elf_phdr elf64_phdr
    357 #define elf_note elf64_note
    358 
    359 #endif
    360 
    361 #endif
    362