diff --git a/extra/elf/authors.txt b/extra/elf/authors.txt new file mode 100644 index 0000000000..6f03a12101 --- /dev/null +++ b/extra/elf/authors.txt @@ -0,0 +1 @@ +Erik Charlebois diff --git a/extra/elf/elf.factor b/extra/elf/elf.factor new file mode 100644 index 0000000000..2ad82bc23c --- /dev/null +++ b/extra/elf/elf.factor @@ -0,0 +1,458 @@ +! Copyright (C) 2010 Erik Charlebois. +! See http://factorcode.org/license.txt for BSD license. +USING: alien.c-types alien.syntax classes.struct ; +IN: elf + +CONSTANT: EI_NIDENT 16 +CONSTANT: EI_MAG0 0 +CONSTANT: EI_MAG1 1 +CONSTANT: EI_MAG2 2 +CONSTANT: EI_MAG3 3 +CONSTANT: EI_CLASS 4 +CONSTANT: EI_DATA 5 +CONSTANT: EI_VERSION 6 +CONSTANT: EI_OSABI 7 +CONSTANT: EI_ABIVERSION 8 +CONSTANT: EI_PAD 9 + +CONSTANT: ELFMAG0 HEX: 7f +CONSTANT: ELFMAG1 HEX: 45 +CONSTANT: ELFMAG2 HEX: 4c +CONSTANT: ELFMAG3 HEX: 46 + +CONSTANT: ELFCLASS32 1 +CONSTANT: ELFCLASS64 2 + +CONSTANT: ELFDATA2LSB 1 +CONSTANT: ELFDATA2MSB 2 + +CONSTANT: ELFOSABI_SYSV 0 +CONSTANT: ELFOSABI_HPUX 1 +CONSTANT: ELFOSABI_NETBSD 2 +CONSTANT: ELFOSABI_LINUX 3 +CONSTANT: ELFOSABI_SOLARIS 6 +CONSTANT: ELFOSABI_AIX 7 +CONSTANT: ELFOSABI_IRIX 8 +CONSTANT: ELFOSABI_FREEBSD 9 +CONSTANT: ELFOSABI_TRU64 10 +CONSTANT: ELFOSABI_MODESTO 11 +CONSTANT: ELFOSABI_OPENBSD 12 +CONSTANT: ELFOSABI_OPENVMS 13 +CONSTANT: ELFOSABI_NSK 14 +CONSTANT: ELFOSABI_AROS 15 +CONSTANT: ELFOSABI_ARM_AEABI 64 +CONSTANT: ELFOSABI_ARM 97 +CONSTANT: ELFOSABI_STANDALONE 255 + +CONSTANT: ET_NONE 0 +CONSTANT: ET_REL 1 +CONSTANT: ET_EXEC 2 +CONSTANT: ET_DYN 3 +CONSTANT: ET_CORE 4 +CONSTANT: ET_LOOS HEX: FE00 +CONSTANT: ET_HIOS HEX: FEFF +CONSTANT: ET_LOPROC HEX: FF00 +CONSTANT: ET_HIPROC HEX: FFFF + +CONSTANT: EM_NONE 0 +CONSTANT: EM_M32 1 +CONSTANT: EM_SPARC 2 +CONSTANT: EM_386 3 +CONSTANT: EM_68K 4 +CONSTANT: EM_88K 5 +CONSTANT: EM_486 6 +CONSTANT: EM_860 7 +CONSTANT: EM_MIPS 8 +CONSTANT: EM_S370 9 +CONSTANT: EM_MIPS_RS3_LE 10 +CONSTANT: EM_SPARC64 11 +CONSTANT: EM_PARISC 15 +CONSTANT: EM_VPP500 17 +CONSTANT: EM_SPARC32PLUS 18 +CONSTANT: EM_960 19 +CONSTANT: EM_PPC 20 +CONSTANT: EM_PPC64 21 +CONSTANT: EM_S390 22 +CONSTANT: EM_SPU 23 +CONSTANT: EM_V800 36 +CONSTANT: EM_FR20 37 +CONSTANT: EM_RH32 38 +CONSTANT: EM_RCE 39 +CONSTANT: EM_ARM 40 +CONSTANT: EM_ALPHA 41 +CONSTANT: EM_SH 42 +CONSTANT: EM_SPARCV9 43 +CONSTANT: EM_TRICORE 44 +CONSTANT: EM_ARC 45 +CONSTANT: EM_H8_300 46 +CONSTANT: EM_H8_300H 47 +CONSTANT: EM_H8S 48 +CONSTANT: EM_H8_500 49 +CONSTANT: EM_IA_64 50 +CONSTANT: EM_MIPS_X 51 +CONSTANT: EM_COLDFIRE 52 +CONSTANT: EM_68HC12 53 +CONSTANT: EM_MMA 54 +CONSTANT: EM_PCP 55 +CONSTANT: EM_NCPU 56 +CONSTANT: EM_NDR1 57 +CONSTANT: EM_STARCORE 58 +CONSTANT: EM_ME16 59 +CONSTANT: EM_ST100 60 +CONSTANT: EM_TINYJ 61 +CONSTANT: EM_X86_64 62 +CONSTANT: EM_PDSP 63 +CONSTANT: EM_FX66 66 +CONSTANT: EM_ST9PLUS 67 +CONSTANT: EM_ST7 68 +CONSTANT: EM_68HC16 69 +CONSTANT: EM_68HC11 70 +CONSTANT: EM_68HC08 71 +CONSTANT: EM_68HC05 72 +CONSTANT: EM_SVX 73 +CONSTANT: EM_ST19 74 +CONSTANT: EM_VAX 75 +CONSTANT: EM_CRIS 76 +CONSTANT: EM_JAVELIN 77 +CONSTANT: EM_FIREPATH 78 +CONSTANT: EM_ZSP 79 +CONSTANT: EM_MMIX 80 +CONSTANT: EM_HUANY 81 +CONSTANT: EM_PRISM 82 +CONSTANT: EM_AVR 83 +CONSTANT: EM_FR30 84 +CONSTANT: EM_D10V 85 +CONSTANT: EM_D30V 86 +CONSTANT: EM_V850 87 +CONSTANT: EM_M32R 88 +CONSTANT: EM_MN10300 89 +CONSTANT: EM_MN10200 90 +CONSTANT: EM_PJ 91 +CONSTANT: EM_OPENRISC 92 +CONSTANT: EM_ARC_A5 93 +CONSTANT: EM_XTENSA 94 +CONSTANT: EM_VIDEOCORE 95 +CONSTANT: EM_TMM_GPP 96 +CONSTANT: EM_NS32K 97 +CONSTANT: EM_TPC 98 +CONSTANT: EM_SNP1K 99 +CONSTANT: EM_ST200 100 +CONSTANT: EM_IP2K 101 +CONSTANT: EM_MAX 102 +CONSTANT: EM_CR 103 +CONSTANT: EM_F2MC16 104 +CONSTANT: EM_MSP430 105 +CONSTANT: EM_BLACKFIN 106 +CONSTANT: EM_SE_C33 107 +CONSTANT: EM_SEP 108 +CONSTANT: EM_ARCA 109 +CONSTANT: EM_UNICORE 110 + +CONSTANT: EV_NONE 0 +CONSTANT: EV_CURRENT 1 + +CONSTANT: EF_ARM_EABIMASK HEX: ff000000 +CONSTANT: EF_ARM_BE8 HEX: 00800000 + +CONSTANT: SHN_UNDEF HEX: 0000 +CONSTANT: SHN_LOPROC HEX: FF00 +CONSTANT: SHN_HIPROC HEX: FF1F +CONSTANT: SHN_LOOS HEX: FF20 +CONSTANT: SHN_HIOS HEX: FF3F +CONSTANT: SHN_ABS HEX: FFF1 +CONSTANT: SHN_COMMON HEX: FFF2 + +CONSTANT: SHT_NULL 0 +CONSTANT: SHT_PROGBITS 1 +CONSTANT: SHT_SYMTAB 2 +CONSTANT: SHT_STRTAB 3 +CONSTANT: SHT_RELA 4 +CONSTANT: SHT_HASH 5 +CONSTANT: SHT_DYNAMIC 6 +CONSTANT: SHT_NOTE 7 +CONSTANT: SHT_NOBITS 8 +CONSTANT: SHT_REL 9 +CONSTANT: SHT_SHLIB 10 +CONSTANT: SHT_DYNSYM 11 +CONSTANT: SHT_LOOS HEX: 60000000 +CONSTANT: SHT_GNU_LIBLIST HEX: 6ffffff7 +CONSTANT: SHT_CHECKSUM HEX: 6ffffff8 +CONSTANT: SHT_LOSUNW HEX: 6ffffffa +CONSTANT: SHT_SUNW_move HEX: 6ffffffa +CONSTANT: SHT_SUNW_COMDAT HEX: 6ffffffb +CONSTANT: SHT_SUNW_syminfo HEX: 6ffffffc +CONSTANT: SHT_GNU_verdef HEX: 6ffffffd +CONSTANT: SHT_GNU_verneed HEX: 6ffffffe +CONSTANT: SHT_GNU_versym HEX: 6fffffff +CONSTANT: SHT_HISUNW HEX: 6fffffff +CONSTANT: SHT_HIOS HEX: 6fffffff +CONSTANT: SHT_LOPROC HEX: 70000000 +CONSTANT: SHT_ARM_EXIDX HEX: 70000001 +CONSTANT: SHT_ARM_PREEMPTMAP HEX: 70000002 +CONSTANT: SHT_ARM_ATTRIBUTES HEX: 70000003 +CONSTANT: SHT_ARM_DEBUGOVERLAY HEX: 70000004 +CONSTANT: SHT_ARM_OVERLAYSECTION HEX: 70000005 +CONSTANT: SHT_HIPROC HEX: 7fffffff +CONSTANT: SHT_LOUSER HEX: 80000000 +CONSTANT: SHT_HIUSER HEX: 8fffffff + +CONSTANT: SHF_WRITE 1 +CONSTANT: SHF_ALLOC 2 +CONSTANT: SHF_EXECINSTR 4 +CONSTANT: SHF_MERGE 16 +CONSTANT: SHF_STRINGS 32 +CONSTANT: SHF_INFO_LINK 64 +CONSTANT: SHF_LINK_ORDER 128 +CONSTANT: SHF_OS_NONCONFORMING 256 +CONSTANT: SHF_GROUP 512 +CONSTANT: SHF_TLS 1024 +CONSTANT: SHF_MASKOS HEX: 0f000000 +CONSTANT: SHF_MASKPROC HEX: f0000000 + +CONSTANT: STB_LOCAL 0 +CONSTANT: STB_GLOBAL 1 +CONSTANT: STB_WEAK 2 +CONSTANT: STB_LOOS 10 +CONSTANT: STB_HIOS 12 +CONSTANT: STB_LOPROC 13 +CONSTANT: STB_HIPROC 15 + +CONSTANT: STT_NOTYPE 0 +CONSTANT: STT_OBJECT 1 +CONSTANT: STT_FUNC 2 +CONSTANT: STT_SECTION 3 +CONSTANT: STT_FILE 4 +CONSTANT: STT_COMMON 5 +CONSTANT: STT_TLS 6 +CONSTANT: STT_LOOS 10 +CONSTANT: STT_HIOS 12 +CONSTANT: STT_LOPROC 13 +CONSTANT: STT_HIPROC 15 + +CONSTANT: STN_UNDEF 0 + +CONSTANT: STV_DEFAULT 0 +CONSTANT: STV_INTERNAL 1 +CONSTANT: STV_HIDDEN 2 +CONSTANT: STV_PROTECTED 3 + +CONSTANT: PT_NULL 0 +CONSTANT: PT_LOAD 1 +CONSTANT: PT_DYNAMIC 2 +CONSTANT: PT_INTERP 3 +CONSTANT: PT_NOTE 4 +CONSTANT: PT_SHLIB 5 +CONSTANT: PT_PHDR 6 +CONSTANT: PT_TLS 7 +CONSTANT: PT_LOOS HEX: 60000000 +CONSTANT: PT_HIOS HEX: 6fffffff +CONSTANT: PT_LOPROC HEX: 70000000 +CONSTANT: PT_ARM_ARCHEXT HEX: 70000000 +CONSTANT: PT_ARM_EXIDX HEX: 70000001 +CONSTANT: PT_ARM_UNWIND HEX: 70000001 +CONSTANT: PT_HIPROC HEX: 7fffffff + +CONSTANT: PT_ARM_ARCHEXT_FMTMSK HEX: ff000000 +CONSTANT: PT_ARM_ARCHEXT_PROFMSK HEX: 00ff0000 +CONSTANT: PT_ARM_ARCHEXT_ARCHMSK HEX: 000000ff +CONSTANT: PT_ARM_ARCHEXT_FMT_OS HEX: 00000000 +CONSTANT: PT_ARM_ARCHEXT_FMT_ABI HEX: 01000000 +CONSTANT: PT_ARM_ARCHEXT_PROF_NONE HEX: 00000000 +CONSTANT: PT_ARM_ARCHEXT_PROF_ARM HEX: 00410000 +CONSTANT: PT_ARM_ARCHEXT_PROF_RT HEX: 00520000 +CONSTANT: PT_ARM_ARCHEXT_PROF_MC HEX: 004d0000 +CONSTANT: PT_ARM_ARCHEXT_PROF_CLASSIC HEX: 00530000 + +CONSTANT: PT_ARM_ARCHEXT_ARCH_UNKN HEX: 00 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv4 HEX: 01 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv4T HEX: 02 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv5T HEX: 03 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv5TE HEX: 04 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv5TEJ HEX: 05 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6 HEX: 06 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6KZ HEX: 07 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6T2 HEX: 08 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6K HEX: 09 +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv7 HEX: 0A +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6M HEX: 0B +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv6SM HEX: 0C +CONSTANT: PT_ARM_ARCHEXT_ARCH_ARCHv7EM HEX: 0D + +CONSTANT: PF_X 1 +CONSTANT: PF_W 2 +CONSTANT: PF_R 4 +CONSTANT: PF_MASKOS HEX: 00ff0000 +CONSTANT: PF_MASKPROC HEX: ff000000 + +CONSTANT: DT_NULL 0 +CONSTANT: DT_NEEDED 1 +CONSTANT: DT_PLTRELSZ 2 +CONSTANT: DT_PLTGOT 3 +CONSTANT: DT_HASH 4 +CONSTANT: DT_STRTAB 5 +CONSTANT: DT_SYMTAB 6 +CONSTANT: DT_RELA 7 +CONSTANT: DT_RELASZ 8 +CONSTANT: DT_RELAENT 9 +CONSTANT: DT_STRSZ 10 +CONSTANT: DT_SYMENT 11 +CONSTANT: DT_INIT 12 +CONSTANT: DT_FINI 13 +CONSTANT: DT_SONAME 14 +CONSTANT: DT_RPATH 15 +CONSTANT: DT_SYMBOLIC 16 +CONSTANT: DT_REL 17 +CONSTANT: DT_RELSZ 18 +CONSTANT: DT_RELENT 19 +CONSTANT: DT_PLTREL 20 +CONSTANT: DT_DEBUG 21 +CONSTANT: DT_TEXTREL 22 +CONSTANT: DT_JMPREL 23 +CONSTANT: DT_BIND_NOW 24 +CONSTANT: DT_INIT_ARRAY 25 +CONSTANT: DT_FINI_ARRAY 26 +CONSTANT: DT_INIT_ARRAYSZ 27 +CONSTANT: DT_FINI_ARRAYSZ 28 +CONSTANT: DT_RUNPATH 29 +CONSTANT: DT_FLAGS 30 +CONSTANT: DT_ENCODING 32 +CONSTANT: DT_PREINIT_ARRAY 32 +CONSTANT: DT_PREINIT_ARRAYSZ 33 +CONSTANT: DT_LOOS HEX: 60000000 +CONSTANT: DT_HIOS HEX: 6fffffff +CONSTANT: DT_LOPROC HEX: 70000000 +CONSTANT: DT_ARM_RESERVED1 HEX: 70000000 +CONSTANT: DT_ARM_SYMTABSZ HEX: 70000001 +CONSTANT: DT_ARM_PREEMPTYMAP HEX: 70000002 +CONSTANT: DT_ARM_RESERVED2 HEX: 70000003 +CONSTANT: DT_HIPROC HEX: 7fffffff + +TYPEDEF: ushort Elf32_Half +TYPEDEF: uint Elf32_Word +TYPEDEF: int Elf32_Sword +TYPEDEF: uint Elf32_Off +TYPEDEF: uint Elf32_Addr +TYPEDEF: ushort Elf64_Half +TYPEDEF: uint Elf64_Word +TYPEDEF: ulonglong Elf64_Xword +TYPEDEF: longlong Elf64_Sxword +TYPEDEF: ulonglong Elf64_Off +TYPEDEF: ulonglong Elf64_Addr + +STRUCT: Elf32_Ehdr + { e_ident uchar[16] } + { e_type Elf32_Half } + { e_machine Elf32_Half } + { e_version Elf32_Word } + { e_entry Elf32_Addr } + { e_phoff Elf32_Off } + { e_shoff Elf32_Off } + { e_flags Elf32_Word } + { e_ehsize Elf32_Half } + { e_phentsize Elf32_Half } + { e_phnum Elf32_Half } + { e_shentsize Elf32_Half } + { e_shnum Elf32_Half } + { e_shstrndx Elf32_Half } ; + +STRUCT: Elf64_Ehdr + { e_ident uchar[16] } + { e_type Elf64_Half } + { e_machine Elf64_Half } + { e_version Elf64_Word } + { e_entry Elf64_Addr } + { e_phoff Elf64_Off } + { e_shoff Elf64_Off } + { e_flags Elf64_Word } + { e_ehsize Elf64_Half } + { e_phentsize Elf64_Half } + { e_phnum Elf64_Half } + { e_shentsize Elf64_Half } + { e_shnum Elf64_Half } + { e_shstrndx Elf64_Half } ; + +STRUCT: Elf32_Shdr + { sh_name Elf32_Word } + { sh_type Elf32_Word } + { sh_flags Elf32_Word } + { sh_addr Elf32_Addr } + { sh_offset Elf32_Off } + { sh_size Elf32_Word } + { sh_link Elf32_Word } + { sh_info Elf32_Word } + { sh_addralign Elf32_Word } + { sh_entsize Elf32_Word } ; + +STRUCT: Elf64_Shdr + { sh_name Elf64_Word } + { sh_type Elf64_Word } + { sh_flags Elf64_Xword } + { sh_addr Elf64_Addr } + { sh_offset Elf64_Off } + { sh_size Elf64_Xword } + { sh_link Elf64_Word } + { sh_info Elf64_Word } + { sh_addralign Elf64_Xword } + { sh_entsize Elf64_Xword } ; + +STRUCT: Elf32_Sym + { st_name Elf32_Word } + { st_value Elf32_Addr } + { st_size Elf32_Word } + { st_info uchar } + { st_other uchar } + { st_shndx Elf32_Half } ; + +STRUCT: Elf64_Sym + { st_name Elf64_Word } + { st_info uchar } + { st_other uchar } + { st_shndx Elf64_Half } + { st_value Elf64_Addr } + { st_size Elf64_Xword } ; + +STRUCT: Elf32_Rel + { r_offset Elf32_Addr } + { r_info Elf32_Word } ; + +STRUCT: Elf32_Rela + { r_offset Elf32_Addr } + { r_info Elf32_Word } + { r_addend Elf32_Sword } ; + +STRUCT: Elf64_Rel + { r_offset Elf64_Addr } + { r_info Elf64_Xword } ; + +STRUCT: Elf64_Rela + { r_offset Elf64_Addr } + { r_info Elf64_Xword } + { r_addend Elf64_Sxword } ; + +STRUCT: Elf32_Phdr + { p_type Elf32_Word } + { p_offset Elf32_Off } + { p_vaddr Elf32_Addr } + { p_paddr Elf32_Addr } + { p_filesz Elf32_Word } + { p_memsz Elf32_Word } + { p_flags Elf32_Word } + { p_align Elf32_Word } ; + +STRUCT: Elf64_Phdr + { p_type Elf64_Word } + { p_flags Elf64_Word } + { p_offset Elf64_Off } + { p_vaddr Elf64_Addr } + { p_paddr Elf64_Addr } + { p_filesz Elf64_Xword } + { p_memsz Elf64_Xword } + { p_align Elf64_Xword } ; + +STRUCT: Elf32_Dyn + { d_tag Elf32_Sword } + { d_val Elf32_Word } ; + +STRUCT: Elf64_Dyn + { d_tag Elf64_Sxword } + { d_val Elf64_Xword } ; diff --git a/extra/elf/summary.txt b/extra/elf/summary.txt new file mode 100644 index 0000000000..5cb6b843c3 --- /dev/null +++ b/extra/elf/summary.txt @@ -0,0 +1 @@ +Constants and structs related to the ELF object format.