]> gitweb.factorcode.org Git - factor.git/commitdiff
FFI structs for manipulating ELF objects.
authorErik Charlebois <erikcharlebois@gmail.com>
Sat, 27 Mar 2010 21:21:28 +0000 (14:21 -0700)
committerErik Charlebois <erikcharlebois@gmail.com>
Sat, 27 Mar 2010 21:21:28 +0000 (14:21 -0700)
extra/elf/authors.txt [new file with mode: 0644]
extra/elf/elf.factor [new file with mode: 0644]
extra/elf/summary.txt [new file with mode: 0644]

diff --git a/extra/elf/authors.txt b/extra/elf/authors.txt
new file mode 100644 (file)
index 0000000..6f03a12
--- /dev/null
@@ -0,0 +1 @@
+Erik Charlebois
diff --git a/extra/elf/elf.factor b/extra/elf/elf.factor
new file mode 100644 (file)
index 0000000..2ad82bc
--- /dev/null
@@ -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 (file)
index 0000000..5cb6b84
--- /dev/null
@@ -0,0 +1 @@
+Constants and structs related to the ELF object format.