|  | //===--- X86COFF.h - Some definitions from COFF documentations ------------===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file just defines some symbols found in COFF documentation. They are | 
|  | // used to emit function type information for COFF targets (Cygwin/Mingw32). | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef X86COFF_H | 
|  | #define X86COFF_H | 
|  |  | 
|  | namespace COFF | 
|  | { | 
|  | /// Storage class tells where and what the symbol represents | 
|  | enum StorageClass { | 
|  | C_EFCN =   -1,  ///< Physical end of function | 
|  | C_NULL    = 0,  ///< No symbol | 
|  | C_AUTO    = 1,  ///< External definition | 
|  | C_EXT     = 2,  ///< External symbol | 
|  | C_STAT    = 3,  ///< Static | 
|  | C_REG     = 4,  ///< Register variable | 
|  | C_EXTDEF  = 5,  ///< External definition | 
|  | C_LABEL   = 6,  ///< Label | 
|  | C_ULABEL  = 7,  ///< Undefined label | 
|  | C_MOS     = 8,  ///< Member of structure | 
|  | C_ARG     = 9,  ///< Function argument | 
|  | C_STRTAG  = 10, ///< Structure tag | 
|  | C_MOU     = 11, ///< Member of union | 
|  | C_UNTAG   = 12, ///< Union tag | 
|  | C_TPDEF   = 13, ///< Type definition | 
|  | C_USTATIC = 14, ///< Undefined static | 
|  | C_ENTAG   = 15, ///< Enumeration tag | 
|  | C_MOE     = 16, ///< Member of enumeration | 
|  | C_REGPARM = 17, ///< Register parameter | 
|  | C_FIELD   = 18, ///< Bit field | 
|  |  | 
|  | C_BLOCK  = 100, ///< ".bb" or ".eb" - beginning or end of block | 
|  | C_FCN    = 101, ///< ".bf" or ".ef" - beginning or end of function | 
|  | C_EOS    = 102, ///< End of structure | 
|  | C_FILE   = 103, ///< File name | 
|  | C_LINE   = 104, ///< Line number, reformatted as symbol | 
|  | C_ALIAS  = 105, ///< Duplicate tag | 
|  | C_HIDDEN = 106  ///< External symbol in dmert public lib | 
|  | }; | 
|  |  | 
|  | /// The type of the symbol. This is made up of a base type and a derived type. | 
|  | /// For example, pointer to int is "pointer to T" and "int" | 
|  | enum SymbolType { | 
|  | T_NULL   = 0,  ///< No type info | 
|  | T_ARG    = 1,  ///< Void function argument (only used by compiler) | 
|  | T_VOID   = 1,  ///< The same as above. Just named differently in some specs. | 
|  | T_CHAR   = 2,  ///< Character | 
|  | T_SHORT  = 3,  ///< Short integer | 
|  | T_INT    = 4,  ///< Integer | 
|  | T_LONG   = 5,  ///< Long integer | 
|  | T_FLOAT  = 6,  ///< Floating point | 
|  | T_DOUBLE = 7,  ///< Double word | 
|  | T_STRUCT = 8,  ///< Structure | 
|  | T_UNION  = 9,  ///< Union | 
|  | T_ENUM   = 10, ///< Enumeration | 
|  | T_MOE    = 11, ///< Member of enumeration | 
|  | T_UCHAR  = 12, ///< Unsigned character | 
|  | T_USHORT = 13, ///< Unsigned short | 
|  | T_UINT   = 14, ///< Unsigned integer | 
|  | T_ULONG  = 15  ///< Unsigned long | 
|  | }; | 
|  |  | 
|  | /// Derived type of symbol | 
|  | enum SymbolDerivedType { | 
|  | DT_NON = 0, ///< No derived type | 
|  | DT_PTR = 1, ///< Pointer to T | 
|  | DT_FCN = 2, ///< Function returning T | 
|  | DT_ARY = 3  ///< Array of T | 
|  | }; | 
|  |  | 
|  | /// Masks for extracting parts of type | 
|  | enum SymbolTypeMasks { | 
|  | N_BTMASK = 017, ///< Mask for base type | 
|  | N_TMASK  = 060  ///< Mask for derived type | 
|  | }; | 
|  |  | 
|  | /// Offsets of parts of type | 
|  | enum Shifts { | 
|  | N_BTSHFT = 4 ///< Type is formed as (base + derived << N_BTSHIFT) | 
|  | }; | 
|  |  | 
|  | } | 
|  |  | 
|  | #endif // X86COFF_H |