ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

common.h
Go to the documentation of this file.
00001 /*-
00002  * Copyright (c) 1998 John D. Polstra.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  *
00014  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00015  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00016  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00017  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00018  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00019  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00020  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00021  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00022  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00023  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00024  * SUCH DAMAGE.
00025  *
00026  * $FreeBSD: src/sys/sys/elf_common.h,v 1.15 2004/05/05 02:38:54 marcel Exp $
00027  */
00028 
00029 #ifndef _SYS_ELF_COMMON_H_
00030 #define _SYS_ELF_COMMON_H_ 1
00031 
00032 /*
00033  * ELF definitions that are independent of architecture or word size.
00034  */
00035 
00036 /*
00037  * Note header.  The ".note" section contains an array of notes.  Each
00038  * begins with this header, aligned to a word boundary.  Immediately
00039  * following the note header is n_namesz bytes of name, padded to the
00040  * next word boundary.  Then comes n_descsz bytes of descriptor, again
00041  * padded to a word boundary.  The values of n_namesz and n_descsz do
00042  * not include the padding.
00043  */
00044 
00045 typedef struct {
00046     UINT32  n_namesz;   /* Length of name. */
00047     UINT32  n_descsz;   /* Length of descriptor. */
00048     UINT32  n_type;     /* Type of this note. */
00049 } Elf_Note;
00050 
00051 /* Indexes into the e_ident array.  Keep synced with
00052    http://www.sco.com/developer/gabi/ch4.eheader.html */
00053 #define EI_MAG0     0   /* Magic number, byte 0. */
00054 #define EI_MAG1     1   /* Magic number, byte 1. */
00055 #define EI_MAG2     2   /* Magic number, byte 2. */
00056 #define EI_MAG3     3   /* Magic number, byte 3. */
00057 #define EI_CLASS    4   /* Class of machine. */
00058 #define EI_DATA     5   /* Data format. */
00059 #define EI_VERSION  6   /* ELF format version. */
00060 #define EI_OSABI    7   /* Operating system / ABI identification */
00061 #define EI_ABIVERSION   8   /* ABI version */
00062 #define OLD_EI_BRAND    8   /* Start of architecture identification. */
00063 #define EI_PAD      9   /* Start of padding (per SVR4 ABI). */
00064 #define EI_NIDENT   16  /* Size of e_ident array. */
00065 
00066 /* Values for the magic number bytes. */
00067 #define ELFMAG0     0x7f
00068 #define ELFMAG1     'E'
00069 #define ELFMAG2     'L'
00070 #define ELFMAG3     'F'
00071 #define ELFMAG      "\177ELF"   /* magic string */
00072 #define SELFMAG     4       /* magic string size */
00073 
00074 /* Values for e_ident[EI_VERSION] and e_version. */
00075 #define EV_NONE     0
00076 #define EV_CURRENT  1
00077 
00078 /* Values for e_ident[EI_CLASS]. */
00079 #define ELFCLASSNONE    0   /* Unknown class. */
00080 #define ELFCLASS32  1   /* 32-bit architecture. */
00081 #define ELFCLASS64  2   /* 64-bit architecture. */
00082 
00083 /* Values for e_ident[EI_DATA]. */
00084 #define ELFDATANONE 0   /* Unknown data format. */
00085 #define ELFDATA2LSB 1   /* 2's complement little-endian. */
00086 #define ELFDATA2MSB 2   /* 2's complement big-endian. */
00087 
00088 /* Values for e_ident[EI_OSABI]. */
00089 #define ELFOSABI_SYSV       0   /* UNIX System V ABI */
00090 #define ELFOSABI_NONE       ELFOSABI_SYSV   /* symbol used in old spec */
00091 #define ELFOSABI_HPUX       1   /* HP-UX operating system */
00092 #define ELFOSABI_NETBSD     2   /* NetBSD */
00093 #define ELFOSABI_LINUX      3   /* GNU/Linux */
00094 #define ELFOSABI_HURD       4   /* GNU/Hurd */
00095 #define ELFOSABI_86OPEN     5   /* 86Open common IA32 ABI */
00096 #define ELFOSABI_SOLARIS    6   /* Solaris */
00097 #define ELFOSABI_MONTEREY   7   /* Monterey */
00098 #define ELFOSABI_IRIX       8   /* IRIX */
00099 #define ELFOSABI_FREEBSD    9   /* FreeBSD */
00100 #define ELFOSABI_TRU64      10  /* TRU64 UNIX */
00101 #define ELFOSABI_MODESTO    11  /* Novell Modesto */
00102 #define ELFOSABI_OPENBSD    12  /* OpenBSD */
00103 #define ELFOSABI_ARM        97  /* ARM */
00104 #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
00105 
00106 /* e_ident */
00107 #define IS_ELF(ehdr)    ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
00108              (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \
00109              (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \
00110              (ehdr).e_ident[EI_MAG3] == ELFMAG3)
00111 
00112 /* Values for e_type. */
00113 #define ET_NONE     0   /* Unknown type. */
00114 #define ET_REL      1   /* Relocatable. */
00115 #define ET_EXEC     2   /* Executable. */
00116 #define ET_DYN      3   /* Shared object. */
00117 #define ET_CORE     4   /* Core file. */
00118 
00119 /* Values for e_machine. */
00120 /*
00121  * Source:
00122  *  System V Application Binary Interface (DRAFT) 2003-12-17, Chapter 4, Section
00123  *  "ELF Header"
00124  */
00125 #define EM_NONE     0   /* No machine */
00126 #define EM_M32      1   /* AT&T WE 32100 */
00127 #define EM_SPARC    2   /* SPARC */
00128 #define EM_386      3   /* Intel 80386 */
00129 #define EM_68K      4   /* Motorola 68000 */
00130 #define EM_88K      5   /* Motorola 88000 */
00131 /*      reserved    6      Reserved for future use (was EM_486) */
00132 #define EM_860      7   /* Intel 80860 */
00133 #define EM_MIPS     8   /* MIPS I Architecture */
00134 #define EM_S370     9   /* IBM System/370 Processor */
00135 #define EM_MIPS_RS3_LE  10  /* MIPS RS3000 Little-endian */
00136 /*      reserved    11-14      Reserved for future use */
00137 #define EM_PARISC   15  /* Hewlett-Packard PA-RISC */
00138 /*      reserved    16     Reserved for future use */
00139 #define EM_VPP500   17  /* Fujitsu VPP500 */
00140 #define EM_SPARC32PLUS  18  /* Enhanced instruction set SPARC */
00141 #define EM_960      19  /* Intel 80960 */
00142 #define EM_PPC      20  /* PowerPC */
00143 #define EM_PPC64    21  /* 64-bit PowerPC */
00144 #define EM_S390     22  /* IBM System/390 Processor */
00145 /*      reserved    23-35      Reserved for future use */
00146 #define EM_V800     36  /* NEC V800 */
00147 #define EM_FR20     37  /* Fujitsu FR20 */
00148 #define EM_RH32     38  /* TRW RH-32 */
00149 #define EM_RCE      39  /* Motorola RCE */
00150 #define EM_ARM      40  /* Advanced RISC Machines ARM */
00151 #define EM_ALPHA    41  /* Digital Alpha */
00152 #define EM_SH       42  /* Hitachi SH */
00153 #define EM_SPARCV9  43  /* SPARC Version 9 */
00154 #define EM_TRICORE  44  /* Siemens TriCore embedded processor */
00155 #define EM_ARC      45  /* Argonaut RISC Core, Argonaut Technologies
00156                    Inc. */
00157 #define EM_H8_300   46  /* Hitachi H8/300 */
00158 #define EM_H8_300H  47  /* Hitachi H8/300H */
00159 #define EM_H8S      48  /* Hitachi H8S */
00160 #define EM_H8_500   49  /* Hitachi H8/500 */
00161 #define EM_IA_64    50  /* Intel IA-64 processor architecture */
00162 #define EM_MIPS_X   51  /* Stanford MIPS-X */
00163 #define EM_COLDFIRE 52  /* Motorola ColdFire */
00164 #define EM_68HC12   53  /* Motorola M68HC12 */
00165 #define EM_MMA      54  /* Fujitsu MMA Multimedia Accelerator */
00166 #define EM_PCP      55  /* Siemens PCP */
00167 #define EM_NCPU     56  /* Sony nCPU embedded RISC processor */
00168 #define EM_NDR1     57  /* Denso NDR1 microprocessor */
00169 #define EM_STARCORE 58  /* Motorola Star*Core processor */
00170 #define EM_ME16     59  /* Toyota ME16 processor */
00171 #define EM_ST100    60  /* STMicroelectronics ST100 processor */
00172 #define EM_TINYJ    61  /* Advanced Logic Corp. TinyJ embedded processor
00173                    family */
00174 #define EM_X86_64   62  /* AMD x86-64 architecture */
00175 #define EM_PDSP     63  /* Sony DSP Processor */
00176 #define EM_PDP10    64  /* Digital Equipment Corp. PDP-10 */
00177 #define EM_PDP11    65  /* Digital Equipment Corp. PDP-11 */
00178 #define EM_FX66     66  /* Siemens FX66 microcontroller */
00179 #define EM_ST9PLUS  67  /* STMicroelectronics ST9+ 8/16 bit
00180                    microcontroller */
00181 #define EM_ST7      68  /* STMicroelectronics ST7 8-bit
00182                    microcontroller */
00183 #define EM_68HC16   69  /* Motorola MC68HC16 Microcontroller */
00184 #define EM_68HC11   70  /* Motorola MC68HC11 Microcontroller */
00185 #define EM_68HC08   71  /* Motorola MC68HC08 Microcontroller */
00186 #define EM_68HC05   72  /* Motorola MC68HC05 Microcontroller */
00187 #define EM_SVX      73  /* Silicon Graphics SVx */
00188 #define EM_ST19     74  /* STMicroelectronics ST19 8-bit
00189                    microcontroller */
00190 #define EM_VAX      75  /* Digital VAX */
00191 #define EM_CRIS     76  /* Axis Communications 32-bit embedded
00192                    processor */
00193 #define EM_JAVELIN  77  /* Infineon Technologies 32-bit embedded
00194                    processor */
00195 #define EM_FIREPATH 78  /* Element 14 64-bit DSP Processor */
00196 #define EM_ZSP      79  /* LSI Logic 16-bit DSP Processor */
00197 #define EM_MMIX     80  /* Donald Knuth's educational 64-bit
00198                    processor */
00199 #define EM_HUANY    81  /* Harvard University machine-independent object
00200                    files */
00201 #define EM_PRISM    82  /* SiTera Prism */
00202 #define EM_AVR      83  /* Atmel AVR 8-bit microcontroller */
00203 #define EM_FR30     84  /* Fujitsu FR30 */
00204 #define EM_D10V     85  /* Mitsubishi D10V */
00205 #define EM_D30V     86  /* Mitsubishi D30V */
00206 #define EM_V850     87  /* NEC v850 */
00207 #define EM_M32R     88  /* Mitsubishi M32R */
00208 #define EM_MN10300  89  /* Matsushita MN10300 */
00209 #define EM_MN10200  90  /* Matsushita MN10200 */
00210 #define EM_PJ       91  /* picoJava */
00211 #define EM_OPENRISC 92  /* OpenRISC 32-bit embedded processor */
00212 #define EM_ARC_A5   93  /* ARC Cores Tangent-A5 */
00213 #define EM_XTENSA   94  /* Tensilica Xtensa Architecture */
00214 #define EM_VIDEOCORE    95  /* Alphamosaic VideoCore processor */
00215 #define EM_TMM_GPP  96  /* Thompson Multimedia General Purpose
00216                    Processor */
00217 #define EM_NS32K    97  /* National Semiconductor 32000 series */
00218 #define EM_TPC      98  /* Tenor Network TPC processor */
00219 #define EM_SNP1K    99  /* Trebia SNP 1000 processor */
00220 #define EM_ST200    100 /* STMicroelectronics (www.st.com) ST200
00221                    microcontroller */
00222 #define EM_IP2K     101 /* Ubicom IP2xxx microcontroller family */
00223 #define EM_MAX      102 /* MAX Processor */
00224 #define EM_CR       103 /* National Semiconductor CompactRISC
00225                    microprocessor */
00226 #define EM_F2MC16   104 /* Fujitsu F2MC16 */
00227 #define EM_MSP430   105 /* Texas Instruments embedded microcontroller
00228                    msp430 */
00229 #define EM_BLACKFIN 106 /* Analog Devices Blackfin (DSP) processor */
00230 #define EM_SE_C33   107 /* S1C33 Family of Seiko Epson processors */
00231 #define EM_SEP      108 /* Sharp embedded microprocessor */
00232 #define EM_ARCA     109 /* Arca RISC Microprocessor */
00233 #define EM_UNICORE  110 /* Microprocessor series from PKU-Unity Ltd. and
00234                    MPRC of Peking University */
00235 
00236 /* Special section indexes. */
00237 #define SHN_UNDEF        0      /* Undefined, missing, irrelevant. */
00238 #define SHN_LORESERVE   0xff00      /* First of reserved range. */
00239 #define SHN_LOPROC  0xff00      /* First processor-specific. */
00240 #define SHN_HIPROC  0xff1f      /* Last processor-specific. */
00241 #define SHN_ABS     0xfff1      /* Absolute values. */
00242 #define SHN_COMMON  0xfff2      /* Common data. */
00243 #define SHN_HIRESERVE   0xffff      /* Last of reserved range. */
00244 
00245 /* sh_type */
00246 #define SHT_NULL    0       /* inactive */
00247 #define SHT_PROGBITS    1       /* program defined information */
00248 #define SHT_SYMTAB  2       /* symbol table section */
00249 #define SHT_STRTAB  3       /* string table section */
00250 #define SHT_RELA    4       /* relocation section with addends */
00251 #define SHT_HASH    5       /* symbol hash table section */
00252 #define SHT_DYNAMIC 6       /* dynamic section */
00253 #define SHT_NOTE    7       /* note section */
00254 #define SHT_NOBITS  8       /* no space section */
00255 #define SHT_REL     9       /* relocation section - no addends */
00256 #define SHT_SHLIB   10      /* reserved - purpose unknown */
00257 #define SHT_DYNSYM  11      /* dynamic symbol table section */
00258 #define SHT_NUM     12      /* number of section types */
00259 #define SHT_LOOS    0x60000000  /* First of OS specific semantics */
00260 #define SHT_HIOS    0x6fffffff  /* Last of OS specific semantics */
00261 #define SHT_LOPROC  0x70000000  /* reserved range for processor */
00262 #define SHT_HIPROC  0x7fffffff  /* specific section header types */
00263 #define SHT_LOUSER  0x80000000  /* reserved range for application */
00264 #define SHT_HIUSER  0xffffffff  /* specific indexes */
00265 
00266 /* Flags for sh_flags. */
00267 #define SHF_WRITE   0x1     /* Section contains writable data. */
00268 #define SHF_ALLOC   0x2     /* Section occupies memory. */
00269 #define SHF_EXECINSTR   0x4     /* Section contains instructions. */
00270 #define SHF_TLS     0x400       /* Section contains TLS data. */
00271 #define SHF_MASKPROC    0xf0000000  /* Reserved for processor-specific. */
00272 
00273 /* Values for p_type. */
00274 #define PT_NULL     0   /* Unused entry. */
00275 #define PT_LOAD     1   /* Loadable segment. */
00276 #define PT_DYNAMIC  2   /* Dynamic linking information segment. */
00277 #define PT_INTERP   3   /* Pathname of interpreter. */
00278 #define PT_NOTE     4   /* Auxiliary information. */
00279 #define PT_SHLIB    5   /* Reserved (not used). */
00280 #define PT_PHDR     6   /* Location of program header itself. */
00281 #define PT_TLS      7   /* Thread local storage segment */
00282 
00283 #define PT_COUNT    8   /* Number of defined p_type values. */
00284 
00285 #define PT_LOOS     0x60000000  /* OS-specific */
00286 #define PT_HIOS     0x6fffffff  /* OS-specific */
00287 #define PT_LOPROC   0x70000000  /* First processor-specific type. */
00288 #define PT_HIPROC   0x7fffffff  /* Last processor-specific type. */
00289 
00290 /* Values for p_flags. */
00291 #define PF_X        0x1 /* Executable. */
00292 #define PF_W        0x2 /* Writable. */
00293 #define PF_R        0x4 /* Readable. */
00294 
00295 /* Values for d_tag. */
00296 #define DT_NULL     0   /* Terminating entry. */
00297 #define DT_NEEDED   1   /* String table offset of a needed shared
00298                    library. */
00299 #define DT_PLTRELSZ 2   /* Total size in bytes of PLT relocations. */
00300 #define DT_PLTGOT   3   /* Processor-dependent address. */
00301 #define DT_HASH     4   /* Address of symbol hash table. */
00302 #define DT_STRTAB   5   /* Address of string table. */
00303 #define DT_SYMTAB   6   /* Address of symbol table. */
00304 #define DT_RELA     7   /* Address of ElfNN_Rela relocations. */
00305 #define DT_RELASZ   8   /* Total size of ElfNN_Rela relocations. */
00306 #define DT_RELAENT  9   /* Size of each ElfNN_Rela relocation entry. */
00307 #define DT_STRSZ    10  /* Size of string table. */
00308 #define DT_SYMENT   11  /* Size of each symbol table entry. */
00309 #define DT_INIT     12  /* Address of initialization function. */
00310 #define DT_FINI     13  /* Address of finalization function. */
00311 #define DT_SONAME   14  /* String table offset of shared object
00312                    name. */
00313 #define DT_RPATH    15  /* String table offset of library path. [sup] */
00314 #define DT_SYMBOLIC 16  /* Indicates "symbolic" linking. [sup] */
00315 #define DT_REL      17  /* Address of ElfNN_Rel relocations. */
00316 #define DT_RELSZ    18  /* Total size of ElfNN_Rel relocations. */
00317 #define DT_RELENT   19  /* Size of each ElfNN_Rel relocation. */
00318 #define DT_PLTREL   20  /* Type of relocation used for PLT. */
00319 #define DT_DEBUG    21  /* Reserved (not used). */
00320 #define DT_TEXTREL  22  /* Indicates there may be relocations in
00321                    non-writable segments. [sup] */
00322 #define DT_JMPREL   23  /* Address of PLT relocations. */
00323 #define DT_BIND_NOW 24  /* [sup] */
00324 #define DT_INIT_ARRAY   25  /* Address of the array of pointers to
00325                    initialization functions */
00326 #define DT_FINI_ARRAY   26  /* Address of the array of pointers to
00327                    termination functions */
00328 #define DT_INIT_ARRAYSZ 27  /* Size in bytes of the array of
00329                    initialization functions. */
00330 #define DT_FINI_ARRAYSZ 28  /* Size in bytes of the array of
00331                    terminationfunctions. */
00332 #define DT_RUNPATH  29  /* String table offset of a null-terminated
00333                    library search path string. */
00334 #define DT_FLAGS    30  /* Object specific flag values. */
00335 #define DT_ENCODING 32  /* Values greater than or equal to DT_ENCODING
00336                    and less than DT_LOOS follow the rules for
00337                    the interpretation of the d_un union
00338                    as follows: even == 'd_ptr', even == 'd_val'
00339                    or none */
00340 #define DT_PREINIT_ARRAY 32 /* Address of the array of pointers to
00341                    pre-initialization functions. */
00342 #define DT_PREINIT_ARRAYSZ 33   /* Size in bytes of the array of
00343                    pre-initialization functions. */
00344 
00345 #define DT_COUNT    33  /* Number of defined d_tag values. */
00346 
00347 #define DT_LOOS     0x6000000d  /* First OS-specific */
00348 #define DT_HIOS     0x6fff0000  /* Last OS-specific */
00349 #define DT_LOPROC   0x70000000  /* First processor-specific type. */
00350 #define DT_HIPROC   0x7fffffff  /* Last processor-specific type. */
00351 
00352 /* Values for DT_FLAGS */
00353 #define DF_ORIGIN   0x0001  /* Indicates that the object being loaded may
00354                    make reference to the $ORIGIN substitution
00355                    string */
00356 #define DF_SYMBOLIC 0x0002  /* Indicates "symbolic" linking. */
00357 #define DF_TEXTREL  0x0004  /* Indicates there may be relocations in
00358                    non-writable segments. */
00359 #define DF_BIND_NOW 0x0008  /* Indicates that the dynamic linker should
00360                    process all relocations for the object
00361                    containing this entry before transferring
00362                    control to the program. */
00363 #define DF_STATIC_TLS   0x0010  /* Indicates that the shared object or
00364                    executable contains code using a static
00365                    thread-local storage scheme. */
00366 
00367 /* Values for n_type.  Used in core files. */
00368 #define NT_PRSTATUS 1   /* Process status. */
00369 #define NT_FPREGSET 2   /* Floating point registers. */
00370 #define NT_PRPSINFO 3   /* Process state info. */
00371 
00372 /* Symbol Binding - ELFNN_ST_BIND - st_info */
00373 #define STB_LOCAL   0   /* Local symbol */
00374 #define STB_GLOBAL  1   /* Global symbol */
00375 #define STB_WEAK    2   /* like global - lower precedence */
00376 #define STB_LOPROC  13  /* reserved range for processor */
00377 #define STB_HIPROC  15  /*  specific symbol bindings */
00378 
00379 /* Symbol type - ELFNN_ST_TYPE - st_info */
00380 #define STT_NOTYPE  0   /* Unspecified type. */
00381 #define STT_OBJECT  1   /* Data object. */
00382 #define STT_FUNC    2   /* Function. */
00383 #define STT_SECTION 3   /* Section. */
00384 #define STT_FILE    4   /* Source file. */
00385 #define STT_TLS     6   /* TLS object. */
00386 #define STT_LOPROC  13  /* reserved range for processor */
00387 #define STT_HIPROC  15  /*  specific symbol types */
00388 
00389 /* Special symbol table indexes. */
00390 #define STN_UNDEF   0   /* Undefined symbol index. */
00391 
00392 #endif /* !_SYS_ELF_COMMON_H_ */

Generated on Sat May 26 2012 04:31:54 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.