]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/C/Common/PeCoffLib.h
License header updated to match correct format.
[mirror_edk2.git] / BaseTools / Source / C / Common / PeCoffLib.h
1 /** @file
2 Function prototypes and defines on Memory Only PE COFF loader
3
4 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef __BASE_PE_COFF_LIB_H__
16 #define __BASE_PE_COFF_LIB_H__
17
18 //
19 // Return status codes from the PE/COFF Loader services
20 // BUGBUG: Find where used and see if can be replaced by RETURN_STATUS codes
21 //
22 #define IMAGE_ERROR_SUCCESS 0
23 #define IMAGE_ERROR_IMAGE_READ 1
24 #define IMAGE_ERROR_INVALID_PE_HEADER_SIGNATURE 2
25 #define IMAGE_ERROR_INVALID_MACHINE_TYPE 3
26 #define IMAGE_ERROR_INVALID_SUBSYSTEM 4
27 #define IMAGE_ERROR_INVALID_IMAGE_ADDRESS 5
28 #define IMAGE_ERROR_INVALID_IMAGE_SIZE 6
29 #define IMAGE_ERROR_INVALID_SECTION_ALIGNMENT 7
30 #define IMAGE_ERROR_SECTION_NOT_LOADED 8
31 #define IMAGE_ERROR_FAILED_RELOCATION 9
32 #define IMAGE_ERROR_FAILED_ICACHE_FLUSH 10
33
34
35 //
36 // PE/COFF Loader Read Function passed in by caller
37 //
38 typedef
39 RETURN_STATUS
40 (EFIAPI *PE_COFF_LOADER_READ_FILE) (
41 IN VOID *FileHandle,
42 IN UINTN FileOffset,
43 IN OUT UINTN *ReadSize,
44 OUT VOID *Buffer
45 );
46
47 //
48 // Context structure used while PE/COFF image is being loaded and relocated
49 //
50 typedef struct {
51 PHYSICAL_ADDRESS ImageAddress;
52 UINT64 ImageSize;
53 PHYSICAL_ADDRESS DestinationAddress;
54 PHYSICAL_ADDRESS EntryPoint;
55 PE_COFF_LOADER_READ_FILE ImageRead;
56 VOID *Handle;
57 VOID *FixupData;
58 UINT32 SectionAlignment;
59 UINT32 PeCoffHeaderOffset;
60 UINT32 DebugDirectoryEntryRva;
61 VOID *CodeView;
62 CHAR8 *PdbPointer;
63 UINTN SizeOfHeaders;
64 UINT32 ImageCodeMemoryType;
65 UINT32 ImageDataMemoryType;
66 UINT32 ImageError;
67 UINTN FixupDataSize;
68 UINT16 Machine;
69 UINT16 ImageType;
70 BOOLEAN RelocationsStripped;
71 BOOLEAN IsTeImage;
72 } PE_COFF_LOADER_IMAGE_CONTEXT;
73
74
75 /**
76 Retrieves information on a PE/COFF image
77
78 @param ImageContext The context of the image being loaded
79
80 @retval EFI_SUCCESS The information on the PE/COFF image was collected.
81 @retval EFI_INVALID_PARAMETER ImageContext is NULL.
82 @retval EFI_UNSUPPORTED The PE/COFF image is not supported.
83 @retval Otherwise The error status from reading the PE/COFF image using the
84 ImageContext->ImageRead() function
85
86 **/
87 RETURN_STATUS
88 EFIAPI
89 PeCoffLoaderGetImageInfo (
90 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
91 )
92 ;
93
94 /**
95 Relocates a PE/COFF image in memory
96
97 @param ImageContext Contains information on the loaded image to relocate
98
99 @retval EFI_SUCCESS if the PE/COFF image was relocated
100 @retval EFI_LOAD_ERROR if the image is not a valid PE/COFF image
101 @retval EFI_UNSUPPORTED not support
102
103 **/
104 RETURN_STATUS
105 EFIAPI
106 PeCoffLoaderRelocateImage (
107 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
108 )
109 ;
110
111 /**
112 Loads a PE/COFF image into memory
113
114 @param ImageContext Contains information on image to load into memory
115
116 @retval EFI_SUCCESS if the PE/COFF image was loaded
117 @retval EFI_BUFFER_TOO_SMALL if the caller did not provide a large enough buffer
118 @retval EFI_LOAD_ERROR if the image is a runtime driver with no relocations
119 @retval EFI_INVALID_PARAMETER if the image address is invalid
120
121 **/
122 RETURN_STATUS
123 EFIAPI
124 PeCoffLoaderLoadImage (
125 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext
126 )
127 ;
128
129 VOID *
130 EFIAPI
131 PeCoffLoaderGetPdbPointer (
132 IN VOID *Pe32Data
133 )
134 ;
135
136 RETURN_STATUS
137 EFIAPI
138 PeCoffLoaderGetEntryPoint (
139 IN VOID *Pe32Data,
140 OUT VOID **EntryPoint,
141 OUT VOID **BaseOfImage
142 )
143 ;
144
145 //
146 // These functions are used by the ARM PE/COFF relocation code and by
147 // the ELF to PE/COFF converter so that is why they are public
148 //
149
150 /**
151 Pass in a pointer to an ARM MOVT or MOVW immediate instruciton and
152 return the immediate data encoded in the instruction
153
154 @param Instruction Pointer to ARM MOVT or MOVW immediate instruction
155
156 @return Immediate address encoded in the instruction
157
158 **/
159 UINT16
160 EFIAPI
161 ThumbMovtImmediateAddress (
162 IN UINT16 *Instruction
163 );
164
165 /**
166 Update an ARM MOVT or MOVW immediate instruction immediate data.
167
168 @param Instruction Pointer to ARM MOVT or MOVW immediate instruction
169 @param Address New addres to patch into the instruction
170
171 **/
172 VOID
173 EFIAPI
174 ThumbMovtImmediatePatch (
175 IN OUT UINT16 *Instruction,
176 IN UINT16 Address
177 );
178
179
180 /**
181 Pass in a pointer to an ARM MOVW/MOVT instruciton pair and
182 return the immediate data encoded in the two` instruction
183
184 @param Instructions Pointer to ARM MOVW/MOVT insturction pair
185
186 @return Immediate address encoded in the instructions
187
188 **/
189 UINT32
190 EFIAPI
191 ThumbMovwMovtImmediateAddress (
192 IN UINT16 *Instructions
193 );
194
195 /**
196 Update an ARM MOVW/MOVT immediate instruction instruction pair.
197
198 @param Instructions Pointer to ARM MOVW/MOVT instruction pair
199 @param Address New addres to patch into the instructions
200 **/
201 VOID
202 EFIAPI
203 ThumbMovwMovtImmediatePatch (
204 IN OUT UINT16 *Instructions,
205 IN UINT32 Address
206 );
207
208
209
210 #endif