Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / include / libelf.h
1 /******************************************************************************
2  * Copyright (c) 2004, 2011 IBM Corporation
3  * All rights reserved.
4  * This program and the accompanying materials
5  * are made available under the terms of the BSD License
6  * which accompanies this distribution, and is available at
7  * http://www.opensource.org/licenses/bsd-license.php
8  *
9  * Contributors:
10  *     IBM Corporation - initial implementation
11  *****************************************************************************/
12
13 /*
14  * ELF loader library
15  */
16
17 #ifndef __LIBELF_H
18 #define __LIBELF_H
19
20 #include <stdint.h>
21
22 /* ELF object file types */
23 #define ET_NONE         0       /* No file type */
24 #define ET_REL          1       /* Relocatable file */
25 #define ET_EXEC         2       /* Executable file */
26 #define ET_DYN          3       /* Shared object file */
27 #define ET_CORE         4       /* Core file */
28
29 /* ELF object endian */
30 #define ELFDATA2LSB     1       /* 2's complement, little endian */
31 #define ELFDATA2MSB     2       /* 2's complement, big endian */
32
33 /* Generic ELF header */
34 struct ehdr {
35         uint32_t ei_ident;
36         uint8_t ei_class;
37         uint8_t ei_data;
38         uint8_t ei_version;
39         uint8_t ei_pad[9];
40         uint16_t e_type;
41         uint16_t e_machine;
42         uint32_t e_version;
43 };
44
45 /* Section types (sh_type) */
46 #define SHT_NULL        0       /* Unused section header */
47 #define SHT_PROGBITS    1       /* Information defined by the program */
48 #define SHT_SYMTAB      2       /* Linker symbol table */
49 #define SHT_STRTAB      3       /* String table */
50 #define SHT_RELA        4       /* "Rela" type relocation entries */
51 #define SHT_HASH        5       /* Symbol hash table */
52 #define SHT_DYNAMIC     6       /* Dynamic linking tables */
53 #define SHT_NOTE        7       /* Note information */
54 #define SHT_NOBITS      8       /* Uninitialized space */
55 #define SHT_REL         9       /* "Rel" type relocation entries */
56 #define SHT_SHLIB       10      /* Reserved */
57 #define SHT_DYNSYM      11      /* Dynamic loader symbol table */
58
59 /* Section attributs (sh_flags) */
60 #define SHF_WRITE       0x1
61 #define SHF_ALLOC       0x2
62 #define SHF_EXECINSTR   0x4
63
64 /* Segment types (p_type) */
65 #define PT_NULL         0       /* Unused entry */
66 #define PT_LOAD         1       /* Loadable segment */
67 #define PT_DYNAMIC      2       /* Dynamic linking tables */
68 #define PT_INTERP       3       /* Program interpreter path name */
69 #define PT_NOTE         4       /* Note sections */
70
71
72 int elf_load_file(void *file_addr, unsigned long *entry,
73                   int (*pre_load)(void*, long),
74                   void (*post_load)(void*, long));
75 int elf_load_file_to_addr(void *file_addr, void *addr, unsigned long *entry,
76                           int (*pre_load)(void*, long),
77                           void (*post_load)(void*, long));
78
79 void elf_byteswap_header32(void *file_addr);
80 void elf_byteswap_header64(void *file_addr);
81
82 unsigned int elf_load_segments32(void *file_addr, signed long offset,
83                                  int (*pre_load)(void*, long),
84                                  void (*post_load)(void*, long));
85 unsigned long elf_load_segments64(void *file_addr, signed long offset,
86                                   int (*pre_load)(void*, long),
87                                   void (*post_load)(void*, long));
88
89 long elf_get_base_addr(void *file_addr);
90 long elf_get_base_addr32(void *file_addr);
91 long elf_get_base_addr64(void *file_addr);
92 uint32_t elf_get_eflags_32(void *file_addr);
93 uint32_t elf_get_eflags_64(void *file_addr);
94
95 void elf_relocate64(void *file_addr, signed long offset);
96
97 int elf_forth_claim(void *addr, long size);
98
99 #endif                          /* __LIBELF_H */