]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Efi/Include/EfiImage.h
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Efi / Include / EfiImage.h
diff --git a/EdkCompatibilityPkg/Foundation/Efi/Include/EfiImage.h b/EdkCompatibilityPkg/Foundation/Efi/Include/EfiImage.h
deleted file mode 100644 (file)
index 0708214..0000000
+++ /dev/null
@@ -1,706 +0,0 @@
-/*++\r
-\r
-Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
-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:\r
-\r
-  EfiImage.h\r
-\r
-Abstract:\r
-\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
-  BugBug: Fix text - doc as defined in MSFT EFI specification\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
-\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 EFI_IMAGE_MACHINE_IA32      0x014c\r
-#define EFI_IMAGE_MACHINE_IA64      0x0200\r
-#define EFI_IMAGE_MACHINE_X64       0x8664\r
-#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED       0x01c2\r
-#define EFI_IMAGE_MACHINE_AARCH64   0xAA64\r
-\r
-//\r
-// #define EFI_IMAGE_MACHINE_FCODE     0xfc0d\r
-//\r
-#define EFI_IMAGE_MACHINE_EBC       0x0EBC\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
-// 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
-// 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!!! 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!!! 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!!! 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
-// Include 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
-#include "EfiPeOptionalHeader.h"\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
-// 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
-// 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
-// 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
-// Resource Format\r
-//\r
-typedef struct {\r
-  UINT32  Characteristics;\r
-  UINT32  TimeDateStamp;\r
-  UINT16  MajorVersion;\r
-  UINT16  MinorVersion;\r
-  UINT16  NumberOfNamedEntries;\r
-  UINT16  NumberOfIdEntries;\r
-//  EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];\r
-} EFI_IMAGE_RESOURCE_DIRECTORY;\r
-\r
-typedef struct {\r
-  union {\r
-    struct {\r
-      UINT32  NameOffset:31;\r
-      UINT32  NameIsString:1;\r
-    } s;\r
-    UINT32  Id;\r
-  } u1;\r
-  union {\r
-    UINT32  OffsetToData;\r
-    struct {\r
-      UINT32  OffsetToDirectory:31;\r
-      UINT32  DataIsDirectory:1;\r
-    } s;\r
-  } u2;\r
-} EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY;\r
-\r
-typedef struct {\r
-  UINT16  Length;\r
-  CHAR16  String[1];\r
-} EFI_IMAGE_RESOURCE_DIRECTORY_STRING;\r
-\r
-typedef struct {\r
-  UINT32  OffsetToData;\r
-  UINT32  Size;\r
-  UINT32  CodePage;\r
-  UINT32  Reserved;\r
-} EFI_IMAGE_RESOURCE_DATA_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
-// 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
-//\r
-// Union of PE32, PE32+, and TE headers\r
-//\r
-typedef union {\r
-  EFI_IMAGE_NT_HEADERS32   Pe32;\r
-  EFI_IMAGE_NT_HEADERS64   Pe32Plus;\r
-  EFI_TE_IMAGE_HEADER      Te;\r
-} EFI_IMAGE_OPTIONAL_HEADER_UNION;\r
-\r
-typedef union {\r
-  EFI_IMAGE_NT_HEADERS32            *Pe32;\r
-  EFI_IMAGE_NT_HEADERS64            *Pe32Plus;\r
-  EFI_TE_IMAGE_HEADER               *Te;\r
-  EFI_IMAGE_OPTIONAL_HEADER_UNION   *Union;\r
-} EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION;\r
-\r
-#endif\r