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