Annotation of embedaddon/php/ext/fileinfo/libmagic/readelf.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (c) Christos Zoulas 2003.
! 3: * All Rights Reserved.
! 4: *
! 5: * Redistribution and use in source and binary forms, with or without
! 6: * modification, are permitted provided that the following conditions
! 7: * are met:
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice immediately at the beginning of the file, without modification,
! 10: * this list of conditions, and the following disclaimer.
! 11: * 2. Redistributions in binary form must reproduce the above copyright
! 12: * notice, this list of conditions and the following disclaimer in the
! 13: * documentation and/or other materials provided with the distribution.
! 14: *
! 15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
! 16: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 17: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 18: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
! 19: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 20: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 21: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 22: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 23: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 24: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 25: * SUCH DAMAGE.
! 26: */
! 27: /*
! 28: * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
! 29: *
! 30: * Provide elf data structures for non-elf machines, allowing file
! 31: * non-elf hosts to determine if an elf binary is stripped.
! 32: * Note: cobbled from the linux header file, with modifications
! 33: */
! 34: #ifndef __fake_elf_h__
! 35: #define __fake_elf_h__
! 36:
! 37: #if HAVE_STDINT_H
! 38: #include <stdint.h>
! 39: #endif
! 40:
! 41: typedef uint32_t Elf32_Addr;
! 42: typedef uint32_t Elf32_Off;
! 43: typedef uint16_t Elf32_Half;
! 44: typedef uint32_t Elf32_Word;
! 45: typedef uint8_t Elf32_Char;
! 46:
! 47: #if SIZEOF_LONG_LONG != 8
! 48: #define USE_ARRAY_FOR_64BIT_TYPES
! 49: typedef uint32_t Elf64_Addr[2];
! 50: typedef uint32_t Elf64_Off[2];
! 51: typedef uint32_t Elf64_Xword[2];
! 52: #else
! 53: #undef USE_ARRAY_FOR_64BIT_TYPES
! 54: typedef uint64_t Elf64_Addr;
! 55: typedef uint64_t Elf64_Off;
! 56: typedef uint64_t Elf64_Xword;
! 57: #endif
! 58: typedef uint16_t Elf64_Half;
! 59: typedef uint32_t Elf64_Word;
! 60: typedef uint8_t Elf64_Char;
! 61:
! 62: #define EI_NIDENT 16
! 63:
! 64: typedef struct {
! 65: Elf32_Char e_ident[EI_NIDENT];
! 66: Elf32_Half e_type;
! 67: Elf32_Half e_machine;
! 68: Elf32_Word e_version;
! 69: Elf32_Addr e_entry; /* Entry point */
! 70: Elf32_Off e_phoff;
! 71: Elf32_Off e_shoff;
! 72: Elf32_Word e_flags;
! 73: Elf32_Half e_ehsize;
! 74: Elf32_Half e_phentsize;
! 75: Elf32_Half e_phnum;
! 76: Elf32_Half e_shentsize;
! 77: Elf32_Half e_shnum;
! 78: Elf32_Half e_shstrndx;
! 79: } Elf32_Ehdr;
! 80:
! 81: typedef struct {
! 82: Elf64_Char e_ident[EI_NIDENT];
! 83: Elf64_Half e_type;
! 84: Elf64_Half e_machine;
! 85: Elf64_Word e_version;
! 86: Elf64_Addr e_entry; /* Entry point */
! 87: Elf64_Off e_phoff;
! 88: Elf64_Off e_shoff;
! 89: Elf64_Word e_flags;
! 90: Elf64_Half e_ehsize;
! 91: Elf64_Half e_phentsize;
! 92: Elf64_Half e_phnum;
! 93: Elf64_Half e_shentsize;
! 94: Elf64_Half e_shnum;
! 95: Elf64_Half e_shstrndx;
! 96: } Elf64_Ehdr;
! 97:
! 98: /* e_type */
! 99: #define ET_REL 1
! 100: #define ET_EXEC 2
! 101: #define ET_DYN 3
! 102: #define ET_CORE 4
! 103:
! 104: /* e_machine (used only for SunOS 5.x hardware capabilities) */
! 105: #define EM_SPARC 2
! 106: #define EM_386 3
! 107: #define EM_SPARC32PLUS 18
! 108: #define EM_SPARCV9 43
! 109: #define EM_IA_64 50
! 110: #define EM_AMD64 62
! 111:
! 112: /* sh_type */
! 113: #define SHT_SYMTAB 2
! 114: #define SHT_NOTE 7
! 115: #define SHT_DYNSYM 11
! 116: #define SHT_SUNW_cap 0x6ffffff5 /* SunOS 5.x hw/sw capabilites */
! 117:
! 118: /* elf type */
! 119: #define ELFDATANONE 0 /* e_ident[EI_DATA] */
! 120: #define ELFDATA2LSB 1
! 121: #define ELFDATA2MSB 2
! 122:
! 123: /* elf class */
! 124: #define ELFCLASSNONE 0
! 125: #define ELFCLASS32 1
! 126: #define ELFCLASS64 2
! 127:
! 128: /* magic number */
! 129: #define EI_MAG0 0 /* e_ident[] indexes */
! 130: #define EI_MAG1 1
! 131: #define EI_MAG2 2
! 132: #define EI_MAG3 3
! 133: #define EI_CLASS 4
! 134: #define EI_DATA 5
! 135: #define EI_VERSION 6
! 136: #define EI_PAD 7
! 137:
! 138: #define ELFMAG0 0x7f /* EI_MAG */
! 139: #define ELFMAG1 'E'
! 140: #define ELFMAG2 'L'
! 141: #define ELFMAG3 'F'
! 142: #define ELFMAG "\177ELF"
! 143:
! 144: #define OLFMAG1 'O'
! 145: #define OLFMAG "\177OLF"
! 146:
! 147: typedef struct {
! 148: Elf32_Word p_type;
! 149: Elf32_Off p_offset;
! 150: Elf32_Addr p_vaddr;
! 151: Elf32_Addr p_paddr;
! 152: Elf32_Word p_filesz;
! 153: Elf32_Word p_memsz;
! 154: Elf32_Word p_flags;
! 155: Elf32_Word p_align;
! 156: } Elf32_Phdr;
! 157:
! 158: typedef struct {
! 159: Elf64_Word p_type;
! 160: Elf64_Word p_flags;
! 161: Elf64_Off p_offset;
! 162: Elf64_Addr p_vaddr;
! 163: Elf64_Addr p_paddr;
! 164: Elf64_Xword p_filesz;
! 165: Elf64_Xword p_memsz;
! 166: Elf64_Xword p_align;
! 167: } Elf64_Phdr;
! 168:
! 169: #define PT_NULL 0 /* p_type */
! 170: #define PT_LOAD 1
! 171: #define PT_DYNAMIC 2
! 172: #define PT_INTERP 3
! 173: #define PT_NOTE 4
! 174: #define PT_SHLIB 5
! 175: #define PT_PHDR 6
! 176: #define PT_NUM 7
! 177:
! 178: typedef struct {
! 179: Elf32_Word sh_name;
! 180: Elf32_Word sh_type;
! 181: Elf32_Word sh_flags;
! 182: Elf32_Addr sh_addr;
! 183: Elf32_Off sh_offset;
! 184: Elf32_Word sh_size;
! 185: Elf32_Word sh_link;
! 186: Elf32_Word sh_info;
! 187: Elf32_Word sh_addralign;
! 188: Elf32_Word sh_entsize;
! 189: } Elf32_Shdr;
! 190:
! 191: typedef struct {
! 192: Elf64_Word sh_name;
! 193: Elf64_Word sh_type;
! 194: Elf64_Off sh_flags;
! 195: Elf64_Addr sh_addr;
! 196: Elf64_Off sh_offset;
! 197: Elf64_Off sh_size;
! 198: Elf64_Word sh_link;
! 199: Elf64_Word sh_info;
! 200: Elf64_Off sh_addralign;
! 201: Elf64_Off sh_entsize;
! 202: } Elf64_Shdr;
! 203:
! 204: #define NT_NETBSD_CORE_PROCINFO 1
! 205:
! 206: /* Note header in a PT_NOTE section */
! 207: typedef struct elf_note {
! 208: Elf32_Word n_namesz; /* Name size */
! 209: Elf32_Word n_descsz; /* Content size */
! 210: Elf32_Word n_type; /* Content type */
! 211: } Elf32_Nhdr;
! 212:
! 213: typedef struct {
! 214: Elf64_Word n_namesz;
! 215: Elf64_Word n_descsz;
! 216: Elf64_Word n_type;
! 217: } Elf64_Nhdr;
! 218:
! 219: /* Notes used in ET_CORE */
! 220: #define NT_PRSTATUS 1
! 221: #define NT_PRFPREG 2
! 222: #define NT_PRPSINFO 3
! 223: #define NT_PRXREG 4
! 224: #define NT_TASKSTRUCT 4
! 225: #define NT_PLATFORM 5
! 226: #define NT_AUXV 6
! 227:
! 228: /* Note types used in executables */
! 229: /* NetBSD executables (name = "NetBSD") */
! 230: #define NT_NETBSD_VERSION 1
! 231: #define NT_NETBSD_EMULATION 2
! 232: #define NT_FREEBSD_VERSION 1
! 233: #define NT_OPENBSD_VERSION 1
! 234: #define NT_DRAGONFLY_VERSION 1
! 235: /* GNU executables (name = "GNU") */
! 236: #define NT_GNU_VERSION 1
! 237:
! 238: /* GNU OS tags */
! 239: #define GNU_OS_LINUX 0
! 240: #define GNU_OS_HURD 1
! 241: #define GNU_OS_SOLARIS 2
! 242: #define GNU_OS_KFREEBSD 3
! 243: #define GNU_OS_KNETBSD 4
! 244:
! 245: /* SunOS 5.x hardware/software capabilities */
! 246: typedef struct {
! 247: Elf32_Word c_tag;
! 248: union {
! 249: Elf32_Word c_val;
! 250: Elf32_Addr c_ptr;
! 251: } c_un;
! 252: } Elf32_Cap;
! 253:
! 254: typedef struct {
! 255: Elf64_Xword c_tag;
! 256: union {
! 257: Elf64_Xword c_val;
! 258: Elf64_Addr c_ptr;
! 259: } c_un;
! 260: } Elf64_Cap;
! 261:
! 262: /* SunOS 5.x hardware/software capability tags */
! 263: #define CA_SUNW_NULL 0
! 264: #define CA_SUNW_HW_1 1
! 265: #define CA_SUNW_SF_1 2
! 266:
! 267: /* SunOS 5.x software capabilities */
! 268: #define SF1_SUNW_FPKNWN 0x01
! 269: #define SF1_SUNW_FPUSED 0x02
! 270: #define SF1_SUNW_MASK 0x03
! 271:
! 272: /* SunOS 5.x hardware capabilities: sparc */
! 273: #define AV_SPARC_MUL32 0x0001
! 274: #define AV_SPARC_DIV32 0x0002
! 275: #define AV_SPARC_FSMULD 0x0004
! 276: #define AV_SPARC_V8PLUS 0x0008
! 277: #define AV_SPARC_POPC 0x0010
! 278: #define AV_SPARC_VIS 0x0020
! 279: #define AV_SPARC_VIS2 0x0040
! 280: #define AV_SPARC_ASI_BLK_INIT 0x0080
! 281: #define AV_SPARC_FMAF 0x0100
! 282: #define AV_SPARC_FJFMAU 0x4000
! 283: #define AV_SPARC_IMA 0x8000
! 284:
! 285: /* SunOS 5.x hardware capabilities: 386 */
! 286: #define AV_386_FPU 0x00000001
! 287: #define AV_386_TSC 0x00000002
! 288: #define AV_386_CX8 0x00000004
! 289: #define AV_386_SEP 0x00000008
! 290: #define AV_386_AMD_SYSC 0x00000010
! 291: #define AV_386_CMOV 0x00000020
! 292: #define AV_386_MMX 0x00000040
! 293: #define AV_386_AMD_MMX 0x00000080
! 294: #define AV_386_AMD_3DNow 0x00000100
! 295: #define AV_386_AMD_3DNowx 0x00000200
! 296: #define AV_386_FXSR 0x00000400
! 297: #define AV_386_SSE 0x00000800
! 298: #define AV_386_SSE2 0x00001000
! 299: #define AV_386_PAUSE 0x00002000
! 300: #define AV_386_SSE3 0x00004000
! 301: #define AV_386_MON 0x00008000
! 302: #define AV_386_CX16 0x00010000
! 303: #define AV_386_AHF 0x00020000
! 304: #define AV_386_TSCP 0x00040000
! 305: #define AV_386_AMD_SSE4A 0x00080000
! 306: #define AV_386_POPCNT 0x00100000
! 307: #define AV_386_AMD_LZCNT 0x00200000
! 308: #define AV_386_SSSE3 0x00400000
! 309: #define AV_386_SSE4_1 0x00800000
! 310: #define AV_386_SSE4_2 0x01000000
! 311:
! 312: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>