[BACK]Return to readelf.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / file

Annotation of src/usr.bin/file/readelf.h, Revision 1.1.24.1

1.1.24.1! margarid    1: /*     $NetBSD: readelf.h,v 1.9 2002/05/18 07:00:47 pooka Exp $        */
1.1       millert     2:
                      3: /*
                      4:  * readelf.h
1.1.24.1! margarid    5:  * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp
1.1       millert     6:  *
                      7:  * Provide elf data structures for non-elf machines, allowing file
                      8:  * non-elf hosts to determine if an elf binary is stripped.
                      9:  * Note: cobbled from the linux header file, with modifications
                     10:  */
                     11: #ifndef __fake_elf_h__
                     12: #define __fake_elf_h__
                     13:
1.1.24.1! margarid   14: #if HAVE_STDINT_H
        !            15: #include <stdint.h>
        !            16: #endif
        !            17:
        !            18: typedef uint32_t       Elf32_Addr;
        !            19: typedef uint32_t       Elf32_Off;
        !            20: typedef uint16_t       Elf32_Half;
        !            21: typedef uint32_t       Elf32_Word;
        !            22: typedef uint8_t                Elf32_Char;
        !            23:
        !            24: #if SIZEOF_UINT64_T != 8
        !            25: #define USE_ARRAY_FOR_64BIT_TYPES
        !            26: typedef        uint32_t        Elf64_Addr[2];
        !            27: typedef        uint32_t        Elf64_Off[2];
        !            28: typedef uint32_t       Elf64_Xword[2];
        !            29: #else
        !            30: typedef        uint64_t        Elf64_Addr;
        !            31: typedef        uint64_t        Elf64_Off;
        !            32: typedef uint64_t       Elf64_Xword;
        !            33: #endif
        !            34: typedef uint16_t       Elf64_Half;
        !            35: typedef uint32_t       Elf64_Word;
        !            36: typedef uint8_t                Elf64_Char;
1.1       millert    37:
                     38: #define EI_NIDENT      16
                     39:
                     40: typedef struct {
                     41:     Elf32_Char e_ident[EI_NIDENT];
                     42:     Elf32_Half e_type;
                     43:     Elf32_Half e_machine;
                     44:     Elf32_Word e_version;
                     45:     Elf32_Addr e_entry;  /* Entry point */
                     46:     Elf32_Off  e_phoff;
                     47:     Elf32_Off  e_shoff;
                     48:     Elf32_Word e_flags;
                     49:     Elf32_Half e_ehsize;
                     50:     Elf32_Half e_phentsize;
                     51:     Elf32_Half e_phnum;
                     52:     Elf32_Half e_shentsize;
                     53:     Elf32_Half e_shnum;
                     54:     Elf32_Half e_shstrndx;
                     55: } Elf32_Ehdr;
                     56:
                     57: typedef struct {
                     58:     Elf64_Char e_ident[EI_NIDENT];
                     59:     Elf64_Half e_type;
                     60:     Elf64_Half e_machine;
                     61:     Elf64_Word e_version;
                     62:     Elf64_Addr e_entry;  /* Entry point */
                     63:     Elf64_Off  e_phoff;
                     64:     Elf64_Off  e_shoff;
                     65:     Elf64_Word e_flags;
                     66:     Elf64_Half e_ehsize;
                     67:     Elf64_Half e_phentsize;
                     68:     Elf64_Half e_phnum;
                     69:     Elf64_Half e_shentsize;
                     70:     Elf64_Half e_shnum;
                     71:     Elf64_Half e_shstrndx;
                     72: } Elf64_Ehdr;
                     73:
                     74: /* e_type */
                     75: #define ET_EXEC                2
                     76: #define ET_CORE                4
                     77:
                     78: /* sh_type */
                     79: #define SHT_SYMTAB     2
                     80: #define SHT_NOTE       7
1.1.24.1! margarid   81: #define SHT_DYNSYM     11
1.1       millert    82:
                     83: /* elf type */
                     84: #define ELFDATANONE    0               /* e_ident[EI_DATA] */
                     85: #define ELFDATA2LSB    1
                     86: #define ELFDATA2MSB    2
                     87:
                     88: /* elf class */
                     89: #define ELFCLASSNONE   0
                     90: #define ELFCLASS32     1
                     91: #define ELFCLASS64     2
                     92:
                     93: /* magic number */
                     94: #define        EI_MAG0         0               /* e_ident[] indexes */
                     95: #define        EI_MAG1         1
                     96: #define        EI_MAG2         2
                     97: #define        EI_MAG3         3
                     98: #define        EI_CLASS        4
                     99: #define        EI_DATA         5
                    100: #define        EI_VERSION      6
                    101: #define        EI_PAD          7
                    102:
                    103: #define        ELFMAG0         0x7f            /* EI_MAG */
                    104: #define        ELFMAG1         'E'
                    105: #define        ELFMAG2         'L'
                    106: #define        ELFMAG3         'F'
                    107: #define        ELFMAG          "\177ELF"
                    108:
1.1.24.1! margarid  109: #define        OLFMAG1         'O'
        !           110: #define        OLFMAG          "\177OLF"
        !           111:
1.1       millert   112: typedef struct {
                    113:     Elf32_Word p_type;
                    114:     Elf32_Off  p_offset;
                    115:     Elf32_Addr p_vaddr;
                    116:     Elf32_Addr p_paddr;
                    117:     Elf32_Word p_filesz;
                    118:     Elf32_Word p_memsz;
                    119:     Elf32_Word p_flags;
                    120:     Elf32_Word p_align;
                    121: } Elf32_Phdr;
                    122:
1.1.24.1! margarid  123: typedef struct {
        !           124:     Elf64_Word p_type;
        !           125:     Elf64_Word p_flags;
        !           126:     Elf64_Off  p_offset;
        !           127:     Elf64_Addr p_vaddr;
        !           128:     Elf64_Addr p_paddr;
        !           129:     Elf64_Xword        p_filesz;
        !           130:     Elf64_Xword        p_memsz;
        !           131:     Elf64_Xword        p_align;
        !           132: } Elf64_Phdr;
        !           133:
1.1       millert   134: #define        PT_NULL         0               /* p_type */
                    135: #define        PT_LOAD         1
                    136: #define        PT_DYNAMIC      2
                    137: #define        PT_INTERP       3
                    138: #define        PT_NOTE         4
                    139: #define        PT_SHLIB        5
                    140: #define        PT_PHDR         6
                    141: #define        PT_NUM          7
                    142:
                    143: typedef struct {
                    144:     Elf32_Word sh_name;
                    145:     Elf32_Word sh_type;
                    146:     Elf32_Word sh_flags;
                    147:     Elf32_Addr sh_addr;
                    148:     Elf32_Off  sh_offset;
                    149:     Elf32_Word sh_size;
                    150:     Elf32_Word sh_link;
                    151:     Elf32_Word sh_info;
                    152:     Elf32_Word sh_addralign;
                    153:     Elf32_Word sh_entsize;
                    154: } Elf32_Shdr;
                    155:
                    156: typedef struct {
                    157:     Elf64_Word sh_name;
                    158:     Elf64_Word sh_type;
                    159:     Elf64_Off  sh_flags;
                    160:     Elf64_Addr sh_addr;
                    161:     Elf64_Off  sh_offset;
                    162:     Elf64_Off  sh_size;
                    163:     Elf64_Word sh_link;
                    164:     Elf64_Word sh_info;
                    165:     Elf64_Off  sh_addralign;
                    166:     Elf64_Off  sh_entsize;
                    167: } Elf64_Shdr;
                    168:
                    169: /* Notes used in ET_CORE */
                    170: #define NT_PRSTATUS    1
                    171: #define NT_PRFPREG     2
                    172: #define NT_PRPSINFO    3
                    173: #define NT_TASKSTRUCT  4
                    174:
1.1.24.1! margarid  175: #define        NT_NETBSD_CORE_PROCINFO         1
        !           176:
1.1       millert   177: /* Note header in a PT_NOTE section */
                    178: typedef struct elf_note {
1.1.24.1! margarid  179:     Elf32_Word n_namesz;       /* Name size */
        !           180:     Elf32_Word n_descsz;       /* Content size */
        !           181:     Elf32_Word n_type;         /* Content type */
1.1       millert   182: } Elf32_Nhdr;
                    183:
                    184: typedef struct {
                    185:     Elf64_Word n_namesz;
                    186:     Elf64_Word n_descsz;
                    187:     Elf64_Word n_type;
                    188: } Elf64_Nhdr;
                    189:
                    190: #define        NT_PRSTATUS     1
                    191: #define        NT_PRFPREG      2
                    192: #define        NT_PRPSINFO     3
                    193: #define        NT_PRXREG       4
                    194: #define        NT_PLATFORM     5
                    195: #define        NT_AUXV         6
1.1.24.1! margarid  196:
        !           197: /* Note types used in executables */
        !           198: /* NetBSD executables (name = "NetBSD") */
        !           199: #define NT_NETBSD_VERSION      1
        !           200: #define NT_NETBSD_EMULATION    2
        !           201: #define NT_FREEBSD_VERSION     1
        !           202: #define NT_OPENBSD_VERSION     1
        !           203: /* GNU executables (name = "GNU") */
        !           204: #define NT_GNU_VERSION         1
        !           205:
        !           206: /* GNU OS tags */
        !           207: #define GNU_OS_LINUX   0
        !           208: #define GNU_OS_HURD    1
        !           209: #define GNU_OS_SOLARIS 2
1.1       millert   210:
                    211: #endif