summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/include/libelf.h
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/SLOF/include/libelf.h')
-rw-r--r--qemu/roms/SLOF/include/libelf.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/qemu/roms/SLOF/include/libelf.h b/qemu/roms/SLOF/include/libelf.h
new file mode 100644
index 000000000..5fbf27927
--- /dev/null
+++ b/qemu/roms/SLOF/include/libelf.h
@@ -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 */