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>