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