llvm/lib/Target/X86/X86COFF.h
2007-12-29 20:36:04 +00:00

96 lines
3.1 KiB
C++

//===--- 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