]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/TianoTools/PeCoffLoader/Common/EfiImage.h
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / Source / TianoTools / PeCoffLoader / Common / EfiImage.h
diff --git a/Tools/Source/TianoTools/PeCoffLoader/Common/EfiImage.h b/Tools/Source/TianoTools/PeCoffLoader/Common/EfiImage.h
deleted file mode 100644 (file)
index 9528e6b..0000000
+++ /dev/null
@@ -1,701 +0,0 @@
-/** @file\r
-  EFI image format for PE32+. Please note some data structures are different\r
-  for IA-32 and Itanium-based images, look for UINTN and the #ifdef EFI_IA64\r
-\r
-  @bug Fix text - doc as defined in MSFT EFI specification.\r
-\r
-  Copyright (c) 2006, Intel Corporation                                                         \r
-  All rights reserved. This program and the accompanying materials                          \r
-  are licensed and made available under the terms and conditions of the BSD License         \r
-  which accompanies this distribution.  The full text of the license may be found at        \r
-  http://opensource.org/licenses/bsd-license.php                                            \r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-\r
-  Module Name:  EfiImage.h\r
-\r
-**/\r
-\r
-#ifndef __EFI_IMAGE_H__\r
-#define __EFI_IMAGE_H__\r
-\r
-//\r
-// PE32+ Subsystem type for EFI images\r
-//\r
-#define EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION         10\r
-#define EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11\r
-#define EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER      12\r
-#define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER      13\r
-\r
-//\r
-// BugBug: Need to get a real answer for this problem. This is not in the\r
-//         PE specification.\r
-//\r
-//         A SAL runtime driver does not get fixed up when a transition to\r
-//         virtual mode is made. In all other cases it should be treated\r
-//         like a EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER image\r
-//\r
-#define EFI_IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER  13\r
-\r
-//\r
-// PE32+ Machine type for EFI images\r
-//\r
-#define IMAGE_FILE_MACHINE_I386     0x014c\r
-#define IMAGE_FILE_MACHINE_IA64     0x0200\r
-#define IMAGE_FILE_MACHINE_EBC      0x0EBC\r
-#define IMAGE_FILE_MACHINE_X64      0x8664\r
-//\r
-// Support old names for backward compatible\r
-//\r
-#define EFI_IMAGE_MACHINE_IA32      IMAGE_FILE_MACHINE_I386 \r
-#define EFI_IMAGE_MACHINE_IA64      IMAGE_FILE_MACHINE_IA64  \r
-#define EFI_IMAGE_MACHINE_IPF       IMAGE_FILE_MACHINE_IA64  \r
-#define EFI_IMAGE_MACHINE_EBC       IMAGE_FILE_MACHINE_EBC  \r
-#define EFI_IMAGE_MACHINE_X64       IMAGE_FILE_MACHINE_X64\r
-\r
-#define EFI_IMAGE_DOS_SIGNATURE     0x5A4D      // MZ\r
-#define EFI_IMAGE_OS2_SIGNATURE     0x454E      // NE\r
-#define EFI_IMAGE_OS2_SIGNATURE_LE  0x454C      // LE\r
-#define EFI_IMAGE_NT_SIGNATURE      0x00004550  // PE00\r
-#define EFI_IMAGE_EDOS_SIGNATURE    0x44454550  // PEED\r
-\r
-///\r
-/// PE images can start with an optional DOS header, so if an image is run\r
-///  under DOS it can print an error message.\r
-///\r
-typedef struct {\r
-  UINT16  e_magic;    // Magic number\r
-  UINT16  e_cblp;     // Bytes on last page of file\r
-  UINT16  e_cp;       // Pages in file\r
-  UINT16  e_crlc;     // Relocations\r
-  UINT16  e_cparhdr;  // Size of header in paragraphs\r
-  UINT16  e_minalloc; // Minimum extra paragraphs needed\r
-  UINT16  e_maxalloc; // Maximum extra paragraphs needed\r
-  UINT16  e_ss;       // Initial (relative) SS value\r
-  UINT16  e_sp;       // Initial SP value\r
-  UINT16  e_csum;     // Checksum\r
-  UINT16  e_ip;       // Initial IP value\r
-  UINT16  e_cs;       // Initial (relative) CS value\r
-  UINT16  e_lfarlc;   // File address of relocation table\r
-  UINT16  e_ovno;     // Overlay number\r
-  UINT16  e_res[4];   // Reserved words\r
-  UINT16  e_oemid;    // OEM identifier (for e_oeminfo)\r
-  UINT16  e_oeminfo;  // OEM information; e_oemid specific\r
-  UINT16  e_res2[10]; // Reserved words\r
-  UINT32  e_lfanew;   // File address of new exe header\r
-} EFI_IMAGE_DOS_HEADER;\r
-\r
-///\r
-/// File header format.\r
-///\r
-typedef struct {\r
-  UINT16  Machine;\r
-  UINT16  NumberOfSections;\r
-  UINT32  TimeDateStamp;\r
-  UINT32  PointerToSymbolTable;\r
-  UINT32  NumberOfSymbols;\r
-  UINT16  SizeOfOptionalHeader;\r
-  UINT16  Characteristics;\r
-} EFI_IMAGE_FILE_HEADER;\r
-\r
-#define EFI_IMAGE_SIZEOF_FILE_HEADER        20\r
-\r
-#define EFI_IMAGE_FILE_RELOCS_STRIPPED      0x0001  // Relocation info stripped from file.\r
-#define EFI_IMAGE_FILE_EXECUTABLE_IMAGE     0x0002  // File is executable  (i.e. no unresolved externel references).\r
-#define EFI_IMAGE_FILE_LINE_NUMS_STRIPPED   0x0004  // Line nunbers stripped from file.\r
-#define EFI_IMAGE_FILE_LOCAL_SYMS_STRIPPED  0x0008  // Local symbols stripped from file.\r
-#define EFI_IMAGE_FILE_BYTES_REVERSED_LO    0x0080  // Bytes of machine word are reversed.\r
-#define EFI_IMAGE_FILE_32BIT_MACHINE        0x0100  // 32 bit word machine.\r
-#define EFI_IMAGE_FILE_DEBUG_STRIPPED       0x0200  // Debugging info stripped from file in .DBG file\r
-#define EFI_IMAGE_FILE_SYSTEM               0x1000  // System File.\r
-#define EFI_IMAGE_FILE_DLL                  0x2000  // File is a DLL.\r
-#define EFI_IMAGE_FILE_BYTES_REVERSED_HI    0x8000  // Bytes of machine word are reversed.\r
-#define EFI_IMAGE_FILE_MACHINE_UNKNOWN      0\r
-#define EFI_IMAGE_FILE_MACHINE_I386         0x14c   // Intel 386.\r
-#define EFI_IMAGE_FILE_MACHINE_R3000        0x162   // MIPS* little-endian, 0540 big-endian\r
-#define EFI_IMAGE_FILE_MACHINE_R4000        0x166   // MIPS* little-endian\r
-#define EFI_IMAGE_FILE_MACHINE_ALPHA        0x184   // Alpha_AXP*\r
-#define EFI_IMAGE_FILE_MACHINE_POWERPC      0x1F0   // IBM* PowerPC Little-Endian\r
-#define EFI_IMAGE_FILE_MACHINE_TAHOE        0x7cc   // Intel EM machine\r
-//\r
-// * Other names and brands may be claimed as the property of others.\r
-//\r
-\r
-///\r
-/// Directory format.\r
-///\r
-typedef struct {\r
-  UINT32  VirtualAddress;\r
-  UINT32  Size;\r
-} EFI_IMAGE_DATA_DIRECTORY;\r
-\r
-#define EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES 16\r
-\r
-typedef struct {\r
-  UINT16  Magic;\r
-  UINT8   MajorLinkerVersion;\r
-  UINT8   MinorLinkerVersion;\r
-  UINT32  SizeOfCode;\r
-  UINT32  SizeOfInitializedData;\r
-  UINT32  SizeOfUninitializedData;\r
-  UINT32  AddressOfEntryPoint;\r
-  UINT32  BaseOfCode;\r
-  UINT32  BaseOfData;\r
-  UINT32  BaseOfBss;\r
-  UINT32  GprMask;\r
-  UINT32  CprMask[4];\r
-  UINT32  GpValue;\r
-} EFI_IMAGE_ROM_OPTIONAL_HEADER;\r
-\r
-#define EFI_IMAGE_ROM_OPTIONAL_HDR_MAGIC      0x107\r
-#define EFI_IMAGE_SIZEOF_ROM_OPTIONAL_HEADER  sizeof (EFI_IMAGE_ROM_OPTIONAL_HEADER)\r
-\r
-typedef struct {\r
-  EFI_IMAGE_FILE_HEADER         FileHeader;\r
-  EFI_IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;\r
-} EFI_IMAGE_ROM_HEADERS;\r
-\r
-///\r
-/// @attention\r
-/// EFI_IMAGE_OPTIONAL_HEADER32 and EFI_IMAGE_OPTIONAL_HEADER64\r
-/// are for use ONLY by tools.  All proper EFI code MUST use\r
-/// EFI_IMAGE_OPTIONAL_HEADER ONLY!!!\r
-///\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b\r
-\r
-typedef struct {\r
-  //\r
-  // Standard fields.\r
-  //\r
-  UINT16                    Magic;\r
-  UINT8                     MajorLinkerVersion;\r
-  UINT8                     MinorLinkerVersion;\r
-  UINT32                    SizeOfCode;\r
-  UINT32                    SizeOfInitializedData;\r
-  UINT32                    SizeOfUninitializedData;\r
-  UINT32                    AddressOfEntryPoint;\r
-  UINT32                    BaseOfCode;\r
-  UINT32                    BaseOfData;\r
-  //\r
-  // NT additional fields.\r
-  //\r
-  UINT32                    ImageBase;\r
-  UINT32                    SectionAlignment;\r
-  UINT32                    FileAlignment;\r
-  UINT16                    MajorOperatingSystemVersion;\r
-  UINT16                    MinorOperatingSystemVersion;\r
-  UINT16                    MajorImageVersion;\r
-  UINT16                    MinorImageVersion;\r
-  UINT16                    MajorSubsystemVersion;\r
-  UINT16                    MinorSubsystemVersion;\r
-  UINT32                    Win32VersionValue;\r
-  UINT32                    SizeOfImage;\r
-  UINT32                    SizeOfHeaders;\r
-  UINT32                    CheckSum;\r
-  UINT16                    Subsystem;\r
-  UINT16                    DllCharacteristics;\r
-  UINT32                    SizeOfStackReserve;\r
-  UINT32                    SizeOfStackCommit;\r
-  UINT32                    SizeOfHeapReserve;\r
-  UINT32                    SizeOfHeapCommit;\r
-  UINT32                    LoaderFlags;\r
-  UINT32                    NumberOfRvaAndSizes;\r
-  EFI_IMAGE_DATA_DIRECTORY  DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES];\r
-} EFI_IMAGE_OPTIONAL_HEADER32;\r
-\r
-///\r
-/// @attention\r
-/// EFI_IMAGE_OPTIONAL_HEADER32 and EFI_IMAGE_OPTIONAL_HEADER64\r
-/// are for use ONLY by tools.  All proper EFI code MUST use\r
-/// EFI_IMAGE_OPTIONAL_HEADER ONLY!!!\r
-///\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b\r
-\r
-typedef struct {\r
-  //\r
-  // Standard fields.\r
-  //\r
-  UINT16                    Magic;\r
-  UINT8                     MajorLinkerVersion;\r
-  UINT8                     MinorLinkerVersion;\r
-  UINT32                    SizeOfCode;\r
-  UINT32                    SizeOfInitializedData;\r
-  UINT32                    SizeOfUninitializedData;\r
-  UINT32                    AddressOfEntryPoint;\r
-  UINT32                    BaseOfCode;\r
-  //\r
-  // NT additional fields.\r
-  //\r
-  UINT64                    ImageBase;\r
-  UINT32                    SectionAlignment;\r
-  UINT32                    FileAlignment;\r
-  UINT16                    MajorOperatingSystemVersion;\r
-  UINT16                    MinorOperatingSystemVersion;\r
-  UINT16                    MajorImageVersion;\r
-  UINT16                    MinorImageVersion;\r
-  UINT16                    MajorSubsystemVersion;\r
-  UINT16                    MinorSubsystemVersion;\r
-  UINT32                    Win32VersionValue;\r
-  UINT32                    SizeOfImage;\r
-  UINT32                    SizeOfHeaders;\r
-  UINT32                    CheckSum;\r
-  UINT16                    Subsystem;\r
-  UINT16                    DllCharacteristics;\r
-  UINT64                    SizeOfStackReserve;\r
-  UINT64                    SizeOfStackCommit;\r
-  UINT64                    SizeOfHeapReserve;\r
-  UINT64                    SizeOfHeapCommit;\r
-  UINT32                    LoaderFlags;\r
-  UINT32                    NumberOfRvaAndSizes;\r
-  EFI_IMAGE_DATA_DIRECTORY  DataDirectory[EFI_IMAGE_NUMBER_OF_DIRECTORY_ENTRIES];\r
-} EFI_IMAGE_OPTIONAL_HEADER64;\r
-\r
-///\r
-/// @attention\r
-/// EFI_IMAGE_NT_HEADERS32 and EFI_IMAGE_HEADERS64 are for use ONLY\r
-/// by tools.  All proper EFI code MUST use EFI_IMAGE_NT_HEADERS ONLY!!!\r
-///\r
-typedef struct {\r
-  UINT32                      Signature;\r
-  EFI_IMAGE_FILE_HEADER       FileHeader;\r
-  EFI_IMAGE_OPTIONAL_HEADER32 OptionalHeader;\r
-} EFI_IMAGE_NT_HEADERS32;\r
-\r
-#define EFI_IMAGE_SIZEOF_NT_OPTIONAL32_HEADER sizeof (EFI_IMAGE_NT_HEADERS32)\r
-\r
-typedef struct {\r
-  UINT32                      Signature;\r
-  EFI_IMAGE_FILE_HEADER       FileHeader;\r
-  EFI_IMAGE_OPTIONAL_HEADER64 OptionalHeader;\r
-} EFI_IMAGE_NT_HEADERS64;\r
-\r
-#define EFI_IMAGE_SIZEOF_NT_OPTIONAL64_HEADER sizeof (EFI_IMAGE_NT_HEADERS64)\r
-\r
-//\r
-// Processor specific definition of EFI_IMAGE_OPTIONAL_HEADER so the\r
-// type name EFI_IMAGE_OPTIONAL_HEADER is appropriate to the build.  Same for\r
-// EFI_IMAGE_NT_HEADERS.  These definitions MUST be used by ALL EFI code.\r
-//\r
-#if   defined (MDE_CPU_IA32) && !defined (BUILDING_TOOLS) || \\r
-      defined (BUILDING_TOOLS) && defined (TOOL_BUILD_IA32_TARGET)\r
-\r
-// typedef EFI_IMAGE_OPTIONAL_HEADER32     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS32          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC\r
-#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
-  (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
-\r
-#elif defined (MDE_CPU_IPF) && !defined (BUILDING_TOOLS) || \\r
-      defined (BUILDING_TOOLS) && defined (TOOL_BUILD_IPF_TARGET)\r
-\r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
-#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
-  (((Machine) == EFI_IMAGE_MACHINE_IPF) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
-\r
-#elif defined (MDE_CPU_X64) && !defined (BUILDING_TOOLS) || \\r
-      defined (BUILDING_TOOLS) && defined (TOOL_BUILD_X64_TARGET)\r
-\r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
-#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \\r
-  (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC))\r
-\r
-#elif defined (MDE_CPU_EBC)\r
-\r
-//\r
-// This is just to make sure you can cross compile with the EBC compiiler.\r
-// It does not make sense to have a PE loader coded in EBC. You need to \r
-// understand the basic \r
-//\r
-typedef EFI_IMAGE_OPTIONAL_HEADER64     EFI_IMAGE_OPTIONAL_HEADER;\r
-typedef EFI_IMAGE_NT_HEADERS64          EFI_IMAGE_NT_HEADERS;\r
-\r
-#define EFI_IMAGE_NT_OPTIONAL_HDR_MAGIC EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
-#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC)\r
-\r
-#else\r
-#error Unknown Processor Type\r
-#endif\r
-\r
-\r
-#define EFI_IMAGE_FIRST_SECTION(ntheader) \\r
-    ( \\r
-      (EFI_IMAGE_SECTION_HEADER *) \\r
-        ( \\r
-          (UINT32) ntheader + \\r
-          FIELD_OFFSET (EFI_IMAGE_NT_HEADERS, OptionalHeader) + \\r
-          ((EFI_IMAGE_NT_HEADERS *) (ntheader))->FileHeader.SizeOfOptionalHeader \\r
-        ) \\r
-    )\r
-\r
-//\r
-// Subsystem Values\r
-//\r
-#define EFI_IMAGE_SUBSYSTEM_UNKNOWN     0\r
-#define EFI_IMAGE_SUBSYSTEM_NATIVE      1\r
-#define EFI_IMAGE_SUBSYSTEM_WINDOWS_GUI 2\r
-#define EFI_IMAGE_SUBSYSTEM_WINDOWS_CUI 3.\r
-#define EFI_IMAGE_SUBSYSTEM_OS2_CUI     5\r
-#define EFI_IMAGE_SUBSYSTEM_POSIX_CUI   7\r
-\r
-//\r
-// Directory Entries\r
-//\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_EXPORT      0\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_IMPORT      1\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE    2\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_EXCEPTION   3\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_SECURITY    4\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC   5\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_DEBUG       6\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_COPYRIGHT   7\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_GLOBALPTR   8\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_TLS         9\r
-#define EFI_IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10\r
-\r
-//\r
-// Section header format.\r
-//\r
-#define EFI_IMAGE_SIZEOF_SHORT_NAME 8\r
-\r
-typedef struct {\r
-  UINT8 Name[EFI_IMAGE_SIZEOF_SHORT_NAME];\r
-  union {\r
-    UINT32  PhysicalAddress;\r
-    UINT32  VirtualSize;\r
-  } Misc;\r
-  UINT32  VirtualAddress;\r
-  UINT32  SizeOfRawData;\r
-  UINT32  PointerToRawData;\r
-  UINT32  PointerToRelocations;\r
-  UINT32  PointerToLinenumbers;\r
-  UINT16  NumberOfRelocations;\r
-  UINT16  NumberOfLinenumbers;\r
-  UINT32  Characteristics;\r
-} EFI_IMAGE_SECTION_HEADER;\r
-\r
-#define EFI_IMAGE_SIZEOF_SECTION_HEADER       40\r
-\r
-#define EFI_IMAGE_SCN_TYPE_NO_PAD             0x00000008  // Reserved.\r
-#define EFI_IMAGE_SCN_CNT_CODE                0x00000020\r
-#define EFI_IMAGE_SCN_CNT_INITIALIZED_DATA    0x00000040\r
-#define EFI_IMAGE_SCN_CNT_UNINITIALIZED_DATA  0x00000080\r
-\r
-#define EFI_IMAGE_SCN_LNK_OTHER               0x00000100  // Reserved.\r
-#define EFI_IMAGE_SCN_LNK_INFO                0x00000200  // Section contains comments or some other type of information.\r
-#define EFI_IMAGE_SCN_LNK_REMOVE              0x00000800  // Section contents will not become part of image.\r
-#define EFI_IMAGE_SCN_LNK_COMDAT              0x00001000\r
-\r
-#define EFI_IMAGE_SCN_ALIGN_1BYTES            0x00100000\r
-#define EFI_IMAGE_SCN_ALIGN_2BYTES            0x00200000\r
-#define EFI_IMAGE_SCN_ALIGN_4BYTES            0x00300000\r
-#define EFI_IMAGE_SCN_ALIGN_8BYTES            0x00400000\r
-#define EFI_IMAGE_SCN_ALIGN_16BYTES           0x00500000\r
-#define EFI_IMAGE_SCN_ALIGN_32BYTES           0x00600000\r
-#define EFI_IMAGE_SCN_ALIGN_64BYTES           0x00700000\r
-\r
-#define EFI_IMAGE_SCN_MEM_DISCARDABLE         0x02000000\r
-#define EFI_IMAGE_SCN_MEM_NOT_CACHED          0x04000000\r
-#define EFI_IMAGE_SCN_MEM_NOT_PAGED           0x08000000\r
-#define EFI_IMAGE_SCN_MEM_SHARED              0x10000000\r
-#define EFI_IMAGE_SCN_MEM_EXECUTE             0x20000000\r
-#define EFI_IMAGE_SCN_MEM_READ                0x40000000\r
-#define EFI_IMAGE_SCN_MEM_WRITE               0x80000000\r
-\r
-///\r
-/// Symbol format.\r
-///\r
-#define EFI_IMAGE_SIZEOF_SYMBOL 18\r
-\r
-//\r
-// Section values.\r
-//\r
-// Symbols have a section number of the section in which they are\r
-// defined. Otherwise, section numbers have the following meanings:\r
-//\r
-#define EFI_IMAGE_SYM_UNDEFINED (UINT16) 0  // Symbol is undefined or is common.\r
-#define EFI_IMAGE_SYM_ABSOLUTE  (UINT16) -1 // Symbol is an absolute value.\r
-#define EFI_IMAGE_SYM_DEBUG     (UINT16) -2 // Symbol is a special debug item.\r
-//\r
-// Type (fundamental) values.\r
-//\r
-#define EFI_IMAGE_SYM_TYPE_NULL   0   // no type.\r
-#define EFI_IMAGE_SYM_TYPE_VOID   1   //\r
-#define EFI_IMAGE_SYM_TYPE_CHAR   2   // type character.\r
-#define EFI_IMAGE_SYM_TYPE_SHORT  3   // type short integer.\r
-#define EFI_IMAGE_SYM_TYPE_INT    4\r
-#define EFI_IMAGE_SYM_TYPE_LONG   5\r
-#define EFI_IMAGE_SYM_TYPE_FLOAT  6\r
-#define EFI_IMAGE_SYM_TYPE_DOUBLE 7\r
-#define EFI_IMAGE_SYM_TYPE_STRUCT 8\r
-#define EFI_IMAGE_SYM_TYPE_UNION  9\r
-#define EFI_IMAGE_SYM_TYPE_ENUM   10  // enumeration.\r
-#define EFI_IMAGE_SYM_TYPE_MOE    11  // member of enumeration.\r
-#define EFI_IMAGE_SYM_TYPE_BYTE   12\r
-#define EFI_IMAGE_SYM_TYPE_WORD   13\r
-#define EFI_IMAGE_SYM_TYPE_UINT   14\r
-#define EFI_IMAGE_SYM_TYPE_DWORD  15\r
-\r
-//\r
-// Type (derived) values.\r
-//\r
-#define EFI_IMAGE_SYM_DTYPE_NULL      0 // no derived type.\r
-#define EFI_IMAGE_SYM_DTYPE_POINTER   1\r
-#define EFI_IMAGE_SYM_DTYPE_FUNCTION  2\r
-#define EFI_IMAGE_SYM_DTYPE_ARRAY     3\r
-\r
-//\r
-// Storage classes.\r
-//\r
-#define EFI_IMAGE_SYM_CLASS_END_OF_FUNCTION   (UINT8) -1\r
-#define EFI_IMAGE_SYM_CLASS_NULL              0\r
-#define EFI_IMAGE_SYM_CLASS_AUTOMATIC         1\r
-#define EFI_IMAGE_SYM_CLASS_EXTERNAL          2\r
-#define EFI_IMAGE_SYM_CLASS_STATIC            3\r
-#define EFI_IMAGE_SYM_CLASS_REGISTER          4\r
-#define EFI_IMAGE_SYM_CLASS_EXTERNAL_DEF      5\r
-#define EFI_IMAGE_SYM_CLASS_LABEL             6\r
-#define EFI_IMAGE_SYM_CLASS_UNDEFINED_LABEL   7\r
-#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_STRUCT  8\r
-#define EFI_IMAGE_SYM_CLASS_ARGUMENT          9\r
-#define EFI_IMAGE_SYM_CLASS_STRUCT_TAG        10\r
-#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_UNION   11\r
-#define EFI_IMAGE_SYM_CLASS_UNION_TAG         12\r
-#define EFI_IMAGE_SYM_CLASS_TYPE_DEFINITION   13\r
-#define EFI_IMAGE_SYM_CLASS_UNDEFINED_STATIC  14\r
-#define EFI_IMAGE_SYM_CLASS_ENUM_TAG          15\r
-#define EFI_IMAGE_SYM_CLASS_MEMBER_OF_ENUM    16\r
-#define EFI_IMAGE_SYM_CLASS_REGISTER_PARAM    17\r
-#define EFI_IMAGE_SYM_CLASS_BIT_FIELD         18\r
-#define EFI_IMAGE_SYM_CLASS_BLOCK             100\r
-#define EFI_IMAGE_SYM_CLASS_FUNCTION          101\r
-#define EFI_IMAGE_SYM_CLASS_END_OF_STRUCT     102\r
-#define EFI_IMAGE_SYM_CLASS_FILE              103\r
-#define EFI_IMAGE_SYM_CLASS_SECTION           104\r
-#define EFI_IMAGE_SYM_CLASS_WEAK_EXTERNAL     105\r
-\r
-//\r
-// type packing constants\r
-//\r
-#define EFI_IMAGE_N_BTMASK  017\r
-#define EFI_IMAGE_N_TMASK   060\r
-#define EFI_IMAGE_N_TMASK1  0300\r
-#define EFI_IMAGE_N_TMASK2  0360\r
-#define EFI_IMAGE_N_BTSHFT  4\r
-#define EFI_IMAGE_N_TSHIFT  2\r
-\r
-//\r
-// Communal selection types.\r
-//\r
-#define EFI_IMAGE_COMDAT_SELECT_NODUPLICATES    1\r
-#define EFI_IMAGE_COMDAT_SELECT_ANY             2\r
-#define EFI_IMAGE_COMDAT_SELECT_SAME_SIZE       3\r
-#define EFI_IMAGE_COMDAT_SELECT_EXACT_MATCH     4\r
-#define EFI_IMAGE_COMDAT_SELECT_ASSOCIATIVE     5\r
-\r
-#define EFI_IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY  1\r
-#define EFI_IMAGE_WEAK_EXTERN_SEARCH_LIBRARY    2\r
-#define EFI_IMAGE_WEAK_EXTERN_SEARCH_ALIAS      3\r
-\r
-///\r
-/// Relocation format.\r
-///\r
-typedef struct {\r
-  UINT32  VirtualAddress;\r
-  UINT32  SymbolTableIndex;\r
-  UINT16  Type;\r
-} EFI_IMAGE_RELOCATION;\r
-\r
-#define EFI_IMAGE_SIZEOF_RELOCATION 10\r
-\r
-//\r
-// I386 relocation types.\r
-//\r
-#define EFI_IMAGE_REL_I386_ABSOLUTE 0   // Reference is absolute, no relocation is necessary\r
-#define EFI_IMAGE_REL_I386_DIR16    01  // Direct 16-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_REL16    02  // PC-relative 16-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_DIR32    06  // Direct 32-bit reference to the symbols virtual address\r
-#define EFI_IMAGE_REL_I386_DIR32NB  07  // Direct 32-bit reference to the symbols virtual address, base not included\r
-#define EFI_IMAGE_REL_I386_SEG12    011 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address\r
-#define EFI_IMAGE_REL_I386_SECTION  012\r
-#define EFI_IMAGE_REL_I386_SECREL   013\r
-#define EFI_IMAGE_REL_I386_REL32    024 // PC-relative 32-bit reference to the symbols virtual address\r
-\r
-///\r
-/// Based relocation format.\r
-///\r
-typedef struct {\r
-  UINT32  VirtualAddress;\r
-  UINT32  SizeOfBlock;\r
-} EFI_IMAGE_BASE_RELOCATION;\r
-\r
-#define EFI_IMAGE_SIZEOF_BASE_RELOCATION  8\r
-\r
-//\r
-// Based relocation types.\r
-//\r
-#define EFI_IMAGE_REL_BASED_ABSOLUTE      0\r
-#define EFI_IMAGE_REL_BASED_HIGH          1\r
-#define EFI_IMAGE_REL_BASED_LOW           2\r
-#define EFI_IMAGE_REL_BASED_HIGHLOW       3\r
-#define EFI_IMAGE_REL_BASED_HIGHADJ       4\r
-#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR  5\r
-#define EFI_IMAGE_REL_BASED_IA64_IMM64    9\r
-#define EFI_IMAGE_REL_BASED_DIR64         10\r
-\r
-///\r
-/// Line number format.\r
-///\r
-typedef struct {\r
-  union {\r
-    UINT32  SymbolTableIndex; // Symbol table index of function name if Linenumber is 0.\r
-    UINT32  VirtualAddress;   // Virtual address of line number.\r
-  } Type;\r
-  UINT16  Linenumber;         // Line number.\r
-} EFI_IMAGE_LINENUMBER;\r
-\r
-#define EFI_IMAGE_SIZEOF_LINENUMBER 6\r
-\r
-//\r
-// Archive format.\r
-//\r
-#define EFI_IMAGE_ARCHIVE_START_SIZE        8\r
-#define EFI_IMAGE_ARCHIVE_START             "!<arch>\n"\r
-#define EFI_IMAGE_ARCHIVE_END               "`\n"\r
-#define EFI_IMAGE_ARCHIVE_PAD               "\n"\r
-#define EFI_IMAGE_ARCHIVE_LINKER_MEMBER     "/               "\r
-#define EFI_IMAGE_ARCHIVE_LONGNAMES_MEMBER  "//              "\r
-\r
-typedef struct {\r
-  UINT8 Name[16];     // File member name - `/' terminated.\r
-  UINT8 Date[12];     // File member date - decimal.\r
-  UINT8 UserID[6];    // File member user id - decimal.\r
-  UINT8 GroupID[6];   // File member group id - decimal.\r
-  UINT8 Mode[8];      // File member mode - octal.\r
-  UINT8 Size[10];     // File member size - decimal.\r
-  UINT8 EndHeader[2]; // String to end header.\r
-} EFI_IMAGE_ARCHIVE_MEMBER_HEADER;\r
-\r
-#define EFI_IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60\r
-\r
-//\r
-// DLL support.\r
-//\r
-\r
-///\r
-/// DLL Export Format\r
-///\r
-typedef struct {\r
-  UINT32  Characteristics;\r
-  UINT32  TimeDateStamp;\r
-  UINT16  MajorVersion;\r
-  UINT16  MinorVersion;\r
-  UINT32  Name;\r
-  UINT32  Base;\r
-  UINT32  NumberOfFunctions;\r
-  UINT32  NumberOfNames;\r
-  UINT32  AddressOfFunctions;\r
-  UINT32  AddressOfNames;\r
-  UINT32  AddressOfNameOrdinals;\r
-} EFI_IMAGE_EXPORT_DIRECTORY;\r
-\r
-///\r
-/// DLL support.\r
-/// Import Format\r
-///\r
-typedef struct {\r
-  UINT16  Hint;\r
-  UINT8   Name[1];\r
-} EFI_IMAGE_IMPORT_BY_NAME;\r
-\r
-typedef struct {\r
-  union {\r
-    UINT32                    Function;\r
-    UINT32                    Ordinal;\r
-    EFI_IMAGE_IMPORT_BY_NAME  *AddressOfData;\r
-  } u1;\r
-} EFI_IMAGE_THUNK_DATA;\r
-\r
-#define EFI_IMAGE_ORDINAL_FLAG              0x80000000\r
-#define EFI_IMAGE_SNAP_BY_ORDINAL(Ordinal)  ((Ordinal & EFI_IMAGE_ORDINAL_FLAG) != 0)\r
-#define EFI_IMAGE_ORDINAL(Ordinal)          (Ordinal & 0xffff)\r
-\r
-typedef struct {\r
-  UINT32                Characteristics;\r
-  UINT32                TimeDateStamp;\r
-  UINT32                ForwarderChain;\r
-  UINT32                Name;\r
-  EFI_IMAGE_THUNK_DATA  *FirstThunk;\r
-} EFI_IMAGE_IMPORT_DESCRIPTOR;\r
-\r
-///\r
-/// Debug Format\r
-///\r
-#define EFI_IMAGE_DEBUG_TYPE_CODEVIEW 2\r
-\r
-typedef struct {\r
-  UINT32  Characteristics;\r
-  UINT32  TimeDateStamp;\r
-  UINT16  MajorVersion;\r
-  UINT16  MinorVersion;\r
-  UINT32  Type;\r
-  UINT32  SizeOfData;\r
-  UINT32  RVA;\r
-  UINT32  FileOffset;\r
-} EFI_IMAGE_DEBUG_DIRECTORY_ENTRY;\r
-\r
-#define CODEVIEW_SIGNATURE_NB10 0x3031424E  // "NB10"\r
-typedef struct {\r
-  UINT32  Signature;                        // "NB10"\r
-  UINT32  Unknown;\r
-  UINT32  Unknown2;\r
-  UINT32  Unknown3;\r
-  //\r
-  // Filename of .PDB goes here\r
-  //\r
-} EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY;\r
-\r
-#define CODEVIEW_SIGNATURE_RSDS 0x53445352  // "RSDS"\r
-typedef struct {\r
-  UINT32  Signature;                        // "RSDS"\r
-  UINT32  Unknown;\r
-  UINT32  Unknown2;\r
-  UINT32  Unknown3;\r
-  UINT32  Unknown4;\r
-  UINT32  Unknown5;\r
-  //\r
-  // Filename of .PDB goes here\r
-  //\r
-} EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY;\r
-\r
-///\r
-/// Header format for TE images\r
-///\r
-typedef struct {\r
-  UINT16                    Signature;            // signature for TE format = "VZ"\r
-  UINT16                    Machine;              // from the original file header\r
-  UINT8                     NumberOfSections;     // from the original file header\r
-  UINT8                     Subsystem;            // from original optional header\r
-  UINT16                    StrippedSize;         // how many bytes we removed from the header\r
-  UINT32                    AddressOfEntryPoint;  // offset to entry point -- from original optional header\r
-  UINT32                    BaseOfCode;           // from original image -- required for ITP debug\r
-  UINT64                    ImageBase;            // from original file header\r
-  EFI_IMAGE_DATA_DIRECTORY  DataDirectory[2];     // only base relocation and debug directory\r
-} EFI_TE_IMAGE_HEADER;\r
-\r
-#define EFI_TE_IMAGE_HEADER_SIGNATURE 0x5A56      // "VZ"\r
-\r
-//\r
-// Data directory indexes in our TE image header\r
-//\r
-#define EFI_TE_IMAGE_DIRECTORY_ENTRY_BASERELOC  0\r
-#define EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG      1\r
-\r
-#endif\r