]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/GenFw/ElfConvert.h
BaseTools/GenFw: Enhance GenFw to support PRM GCC build
[mirror_edk2.git] / BaseTools / Source / C / GenFw / ElfConvert.h
CommitLineData
f51461c8 1/** @file\r
97fa0ee9 2Header file for Elf convert solution\r
f51461c8 3\r
d78675d1 4Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
f51461c8 5\r
2e351cbe 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
f51461c8
LG
7\r
8**/\r
9\r
10#ifndef _ELF_CONVERT_H_\r
11#define _ELF_CONVERT_H_\r
12\r
13#include "elf_common.h"\r
14#include "elf32.h"\r
15#include "elf64.h"\r
16\r
17//\r
18// Externally defined variables\r
19//\r
20extern UINT32 mCoffOffset;\r
21extern CHAR8 *mInImageName;\r
22extern UINT32 mImageTimeStamp;\r
23extern UINT8 *mCoffFile;\r
24extern UINT32 mTableOffset;\r
25extern UINT32 mOutImageType;\r
d78675d1 26extern UINT32 mFileBufferSize;\r
414cd2a4 27extern BOOLEAN mExportFlag;\r
f51461c8
LG
28\r
29//\r
30// Common EFI specific data.\r
31//\r
32#define ELF_HII_SECTION_NAME ".hii"\r
621bb723 33#define ELF_STRTAB_SECTION_NAME ".strtab"\r
54b1b57a 34#define MAX_COFF_ALIGNMENT 0x10000\r
414cd2a4
HLX
35#define ELF_SYMBOL_SECTION_NAME ".symtab"\r
36\r
37//\r
38// Platform Runtime Mechanism (PRM) specific data.\r
39//\r
40#define PRM_MODULE_EXPORT_SYMBOL_NUM 256\r
41\r
42// <to-do> to include PRM header directly once PrmPkg is in main repo\r
43#define PRM_HANDLER_NAME_MAXIMUM_LENGTH 128\r
44\r
45#define PRM_MODULE_EXPORT_DESCRIPTOR_NAME "PrmModuleExportDescriptor"\r
46#define PRM_MODULE_EXPORT_DESCRIPTOR_SIGNATURE SIGNATURE_64 ('P', 'R', 'M', '_', 'M', 'E', 'D', 'T')\r
47#define PRM_MODULE_EXPORT_REVISION 0x0\r
48\r
49//\r
50// Platform Runtime Mechanism (PRM) Export Descriptor Structures\r
51//\r
52#pragma pack(push, 1)\r
53\r
54typedef struct {\r
55 EFI_GUID PrmHandlerGuid;\r
56 CHAR8 PrmHandlerName[PRM_HANDLER_NAME_MAXIMUM_LENGTH];\r
57} PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT;\r
58\r
59typedef struct {\r
60 UINT64 Signature;\r
61 UINT16 Revision;\r
62 UINT16 NumberPrmHandlers;\r
63 EFI_GUID PlatformGuid;\r
64 EFI_GUID ModuleGuid;\r
65} PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER;\r
66\r
67typedef struct {\r
68 PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT_HEADER Header;\r
69 PRM_HANDLER_EXPORT_DESCRIPTOR_STRUCT PrmHandlerExportDescriptors[1];\r
70} PRM_MODULE_EXPORT_DESCRIPTOR_STRUCT;\r
71\r
72#pragma pack(pop)\r
f51461c8
LG
73\r
74//\r
75// Filter Types\r
76//\r
77typedef enum {\r
78 SECTION_TEXT,\r
79 SECTION_HII,\r
414cd2a4
HLX
80 SECTION_DATA,\r
81 SECTION_SYMBOL\r
f7496d71 82\r
f51461c8
LG
83} SECTION_FILTER_TYPES;\r
84\r
85//\r
fb0b35e0 86// FunctionTable\r
f51461c8
LG
87//\r
88typedef struct {\r
89 VOID (*ScanSections) ();\r
90 BOOLEAN (*WriteSections) (SECTION_FILTER_TYPES FilterType);\r
91 VOID (*WriteRelocations) ();\r
92 VOID (*WriteDebug) ();\r
414cd2a4 93 VOID (*WriteExport) ();\r
f51461c8
LG
94 VOID (*SetImageSize) ();\r
95 VOID (*CleanUp) ();\r
f7496d71 96\r
f51461c8
LG
97} ELF_FUNCTION_TABLE;\r
98\r
99//\r
100// Common functions\r
101//\r
102VOID\r
103CoffAddFixup (\r
104 UINT32 Offset,\r
105 UINT8 Type\r
106 );\r
107\r
108VOID\r
109CoffAddFixupEntry (\r
110 UINT16 Val\r
111 );\r
112\r
113\r
114VOID\r
115CreateSectionHeader (\r
116 const CHAR8 *Name,\r
117 UINT32 Offset,\r
118 UINT32 Size,\r
119 UINT32 Flags\r
120 );\r
121\r
122#endif\r