Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / include / libelf.h
diff --git a/qemu/roms/SLOF/include/libelf.h b/qemu/roms/SLOF/include/libelf.h
new file mode 100644 (file)
index 0000000..5fbf279
--- /dev/null
@@ -0,0 +1,99 @@
+/******************************************************************************
+ * Copyright (c) 2004, 2011 IBM Corporation
+ * All rights reserved.
+ * This program and the accompanying materials
+ * are made available under the terms of the BSD License
+ * which accompanies this distribution, and is available at
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * Contributors:
+ *     IBM Corporation - initial implementation
+ *****************************************************************************/
+
+/*
+ * ELF loader library
+ */
+
+#ifndef __LIBELF_H
+#define __LIBELF_H
+
+#include <stdint.h>
+
+/* ELF object file types */
+#define ET_NONE                0       /* No file type */
+#define ET_REL         1       /* Relocatable file */
+#define ET_EXEC                2       /* Executable file */
+#define ET_DYN         3       /* Shared object file */
+#define ET_CORE                4       /* Core file */
+
+/* ELF object endian */
+#define ELFDATA2LSB    1       /* 2's complement, little endian */
+#define ELFDATA2MSB    2       /* 2's complement, big endian */
+
+/* Generic ELF header */
+struct ehdr {
+       uint32_t ei_ident;
+       uint8_t ei_class;
+       uint8_t ei_data;
+       uint8_t ei_version;
+       uint8_t ei_pad[9];
+       uint16_t e_type;
+       uint16_t e_machine;
+       uint32_t e_version;
+};
+
+/* Section types (sh_type) */
+#define SHT_NULL       0       /* Unused section header */
+#define SHT_PROGBITS   1       /* Information defined by the program */
+#define SHT_SYMTAB     2       /* Linker symbol table */
+#define SHT_STRTAB     3       /* String table */
+#define SHT_RELA       4       /* "Rela" type relocation entries */
+#define SHT_HASH       5       /* Symbol hash table */
+#define SHT_DYNAMIC    6       /* Dynamic linking tables */
+#define SHT_NOTE       7       /* Note information */
+#define SHT_NOBITS     8       /* Uninitialized space */
+#define SHT_REL        9       /* "Rel" type relocation entries */
+#define SHT_SHLIB      10      /* Reserved */
+#define SHT_DYNSYM     11      /* Dynamic loader symbol table */
+
+/* Section attributs (sh_flags) */
+#define SHF_WRITE      0x1
+#define SHF_ALLOC      0x2
+#define SHF_EXECINSTR  0x4
+
+/* Segment types (p_type) */
+#define PT_NULL        0       /* Unused entry */
+#define PT_LOAD        1       /* Loadable segment */
+#define PT_DYNAMIC     2       /* Dynamic linking tables */
+#define PT_INTERP      3       /* Program interpreter path name */
+#define PT_NOTE        4       /* Note sections */
+
+
+int elf_load_file(void *file_addr, unsigned long *entry,
+                  int (*pre_load)(void*, long),
+                  void (*post_load)(void*, long));
+int elf_load_file_to_addr(void *file_addr, void *addr, unsigned long *entry,
+                          int (*pre_load)(void*, long),
+                          void (*post_load)(void*, long));
+
+void elf_byteswap_header32(void *file_addr);
+void elf_byteswap_header64(void *file_addr);
+
+unsigned int elf_load_segments32(void *file_addr, signed long offset,
+                                 int (*pre_load)(void*, long),
+                                 void (*post_load)(void*, long));
+unsigned long elf_load_segments64(void *file_addr, signed long offset,
+                                  int (*pre_load)(void*, long),
+                                  void (*post_load)(void*, long));
+
+long elf_get_base_addr(void *file_addr);
+long elf_get_base_addr32(void *file_addr);
+long elf_get_base_addr64(void *file_addr);
+uint32_t elf_get_eflags_32(void *file_addr);
+uint32_t elf_get_eflags_64(void *file_addr);
+
+void elf_relocate64(void *file_addr, signed long offset);
+
+int elf_forth_claim(void *addr, long size);
+
+#endif                         /* __LIBELF_H */