4e3c12c0af
Removed dependencies on arch/x86/types.h - this file is not really used anymore, now. Might prevent compiling on Windows, though. Replaced "int" with "int32" for the id types. Removed some stuff from ktypes.h because it didn't belong there. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1120 a95241bf-73f2-0310-859d-f6bbb57e9c96
218 lines
4.2 KiB
C
Executable File
218 lines
4.2 KiB
C
Executable File
/*
|
|
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
|
|
** Distributed under the terms of the NewOS License.
|
|
*/
|
|
#ifndef _ELF32_H
|
|
#define _ELF32_H
|
|
|
|
#include <ktypes.h>
|
|
|
|
typedef uint32 Elf32_Addr;
|
|
typedef uint16 Elf32_Half;
|
|
typedef uint32 Elf32_Off;
|
|
typedef int32 Elf32_Sword;
|
|
typedef uint32 Elf32_Word;
|
|
|
|
#define ELF_MAGIC "\x7f""ELF"
|
|
#define EI_MAG0 0
|
|
#define EI_MAG1 1
|
|
#define EI_MAG2 2
|
|
#define EI_MAG3 3
|
|
#define EI_CLASS 4
|
|
#define EI_DATA 5
|
|
#define EI_VERSION 6
|
|
#define EI_PAD 7
|
|
#define EI_NIDENT 16
|
|
|
|
#define ELFCLASS32 1
|
|
#define ELFCLASS64 2
|
|
#define ELFDATA2LSB 1
|
|
#define ELFDATA2MSB 2
|
|
|
|
struct Elf32_Ehdr {
|
|
unsigned char e_ident[EI_NIDENT];
|
|
Elf32_Half e_type;
|
|
Elf32_Half e_machine;
|
|
Elf32_Word e_version;
|
|
Elf32_Addr e_entry;
|
|
Elf32_Off e_phoff;
|
|
Elf32_Off e_shoff;
|
|
Elf32_Word e_flags;
|
|
Elf32_Half e_ehsize;
|
|
Elf32_Half e_phentsize;
|
|
Elf32_Half e_phnum;
|
|
Elf32_Half e_shentsize;
|
|
Elf32_Half e_shnum;
|
|
Elf32_Half e_shstrndx;
|
|
} ;
|
|
|
|
struct Elf32_Shdr {
|
|
Elf32_Word sh_name;
|
|
Elf32_Word sh_type;
|
|
Elf32_Word sh_flags;
|
|
Elf32_Addr sh_addr;
|
|
Elf32_Off sh_offset;
|
|
Elf32_Word sh_size;
|
|
Elf32_Word sh_link;
|
|
Elf32_Word sh_info;
|
|
Elf32_Word sh_addralign;
|
|
Elf32_Word sh_entsize;
|
|
} ;
|
|
|
|
#define SHT_NULL 0
|
|
#define SHT_PROGBITS 1
|
|
#define SHT_SYMTAB 2
|
|
#define SHT_STRTAB 3
|
|
#define SHT_RELA 4
|
|
#define SHT_HASH 5
|
|
#define SHT_DYNAMIC 6
|
|
#define SHT_NOTE 7
|
|
#define SHT_NOBITS 8
|
|
#define SHT_REL 9
|
|
#define SHT_SHLIB 10
|
|
#define SHT_DYNSYM 11
|
|
#define SHT_LOPROC 0x70000000
|
|
#define SHT_HIPROC 0x7fffffff
|
|
#define SHT_LOUSER 0x80000000
|
|
#define SHT_HIUSER 0xffffffff
|
|
|
|
#define SHF_WRITE 1
|
|
|
|
struct Elf32_Phdr {
|
|
Elf32_Word p_type;
|
|
Elf32_Off p_offset; /* offset from the beginning of the file of the segment */
|
|
Elf32_Addr p_vaddr; /* virtual address for the segment in memory */
|
|
Elf32_Addr p_paddr;
|
|
Elf32_Word p_filesz; /* the size of the segment in the file */
|
|
Elf32_Word p_memsz; /* the size of the segment in memory */
|
|
Elf32_Word p_flags;
|
|
Elf32_Word p_align;
|
|
} ;
|
|
|
|
#define PF_X 0x1
|
|
#define PF_W 0x2
|
|
#define PF_R 0x4
|
|
#define PF_MASKPROC 0xf0000000
|
|
|
|
|
|
#define PT_NULL 0
|
|
#define PT_LOAD 1
|
|
#define PT_DYNAMIC 2
|
|
#define PT_INTERP 3
|
|
#define PT_NOTE 4
|
|
#define PT_SHLIB 5
|
|
#define PT_PHDR 6
|
|
#define PT_LOPROC 0x70000000
|
|
#define PT_HIPROC 0x7fffffff
|
|
|
|
#define SHN_UNDEF 0
|
|
#define SHN_LORESERVE 0xff00
|
|
#define SHN_LOPROC 0xff00
|
|
#define SHN_HIPROC 0xff1f
|
|
#define SHN_ABS 0xfff1
|
|
#define SHN_COMMON 0xfff2
|
|
#define SHN_HIRESERVE 0xffff
|
|
|
|
struct Elf32_Sym {
|
|
Elf32_Word st_name;
|
|
Elf32_Addr st_value;
|
|
Elf32_Word st_size;
|
|
unsigned char st_info;
|
|
unsigned char st_other;
|
|
Elf32_Half st_shndx;
|
|
};
|
|
|
|
#define ELF32_ST_BIND(i) ((i) >> 4)
|
|
#define ELF32_ST_TYPE(i) ((i) & 0xf)
|
|
#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
|
|
|
|
#define STT_NOTYPE 0
|
|
#define STT_OBJECT 1
|
|
#define STT_FUNC 2
|
|
#define STT_SECTION 3
|
|
#define STT_FILE 4
|
|
#define STT_LOPROC 13
|
|
#define STT_HIPROC 15
|
|
|
|
#define STB_LOCAL 0
|
|
#define STB_GLOBAL 1
|
|
#define STB_WEAK 2
|
|
#define STB_LOPROC 13
|
|
#define STB_HIPROC 15
|
|
|
|
#define STN_UNDEF 0
|
|
|
|
struct Elf32_Rel {
|
|
Elf32_Addr r_offset;
|
|
Elf32_Word r_info;
|
|
};
|
|
|
|
struct Elf32_Rela {
|
|
Elf32_Addr r_offset;
|
|
Elf32_Word r_info;
|
|
Elf32_Sword r_addend;
|
|
};
|
|
|
|
#define ELF32_R_SYM(i) ((i) >> 8)
|
|
#define ELF32_R_TYPE(i) ((unsigned char)(i))
|
|
#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t))
|
|
|
|
/*
|
|
* i386 relocation types
|
|
*/
|
|
#define R_386_NONE 0
|
|
#define R_386_32 1
|
|
#define R_386_PC32 2
|
|
#define R_386_GOT32 3
|
|
#define R_386_PLT32 4
|
|
#define R_386_COPY 5
|
|
#define R_386_GLOB_DAT 6
|
|
#define R_386_JMP_SLOT 7
|
|
#define R_386_RELATIVE 8
|
|
#define R_386_GOTOFF 9
|
|
#define R_386_GOTPC 10
|
|
|
|
/*
|
|
* sh4 relocation types
|
|
*/
|
|
#define R_SH_NONE 0
|
|
#define R_SH_DIR32 1
|
|
#define R_SH_RELATIVE 0xa5
|
|
|
|
struct Elf32_Dyn {
|
|
Elf32_Sword d_tag;
|
|
union {
|
|
Elf32_Word d_val;
|
|
Elf32_Addr d_ptr;
|
|
} d_un;
|
|
};
|
|
|
|
#define DT_NULL 0
|
|
#define DT_NEEDED 1
|
|
#define DT_PLTRELSZ 2
|
|
#define DT_PLTGOT 3
|
|
#define DT_HASH 4
|
|
#define DT_STRTAB 5
|
|
#define DT_SYMTAB 6
|
|
#define DT_RELA 7
|
|
#define DT_RELASZ 8
|
|
#define DT_RELAENT 9
|
|
#define DT_STRSZ 10
|
|
#define DT_SYMENT 11
|
|
#define DT_INIT 12
|
|
#define DT_FINI 13
|
|
#define DT_SONAME 14
|
|
#define DT_RPATH 15
|
|
#define DT_SYMBOLIC 16
|
|
#define DT_REL 17
|
|
#define DT_RELSZ 18
|
|
#define DT_RELENT 19
|
|
#define DT_PLTREL 20
|
|
#define DT_DEBUG 21
|
|
#define DT_TEXTREL 22
|
|
#define DT_JMPREL 23
|
|
#define DT_LOPROC 0x70000000
|
|
#define DT_HIPROC 0x7fffffff
|
|
|
|
#endif
|