2 Function prototypes and defines on Memory Only PE COFF loader
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
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.
15 #ifndef __BASE_PE_COFF_LIB_H__
16 #define __BASE_PE_COFF_LIB_H__
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
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
36 // PE/COFF Loader Read Function passed in by caller
40 (EFIAPI
*PE_COFF_LOADER_READ_FILE
) (
43 IN OUT UINTN
*ReadSize
,
48 // Context structure used while PE/COFF image is being loaded and relocated
51 PHYSICAL_ADDRESS ImageAddress
;
53 PHYSICAL_ADDRESS DestinationAddress
;
54 PHYSICAL_ADDRESS EntryPoint
;
55 PE_COFF_LOADER_READ_FILE ImageRead
;
58 UINT32 SectionAlignment
;
59 UINT32 PeCoffHeaderOffset
;
60 UINT32 DebugDirectoryEntryRva
;
64 UINT32 ImageCodeMemoryType
;
65 UINT32 ImageDataMemoryType
;
70 BOOLEAN RelocationsStripped
;
72 } PE_COFF_LOADER_IMAGE_CONTEXT
;
76 Retrieves information on a PE/COFF image
78 @param ImageContext The context of the image being loaded
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
89 PeCoffLoaderGetImageInfo (
90 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
95 Relocates a PE/COFF image in memory
97 @param ImageContext Contains information on the loaded image to relocate
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
106 PeCoffLoaderRelocateImage (
107 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
112 Loads a PE/COFF image into memory
114 @param ImageContext Contains information on image to load into memory
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
124 PeCoffLoaderLoadImage (
125 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
131 PeCoffLoaderGetPdbPointer (
138 PeCoffLoaderGetEntryPoint (
140 OUT VOID
**EntryPoint
,
141 OUT VOID
**BaseOfImage
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
151 Pass in a pointer to an ARM MOVT or MOVW immediate instruciton and
152 return the immediate data encoded in the instruction
154 @param Instruction Pointer to ARM MOVT or MOVW immediate instruction
156 @return Immediate address encoded in the instruction
161 ThumbMovtImmediateAddress (
162 IN UINT16
*Instruction
166 Update an ARM MOVT or MOVW immediate instruction immediate data.
168 @param Instruction Pointer to ARM MOVT or MOVW immediate instruction
169 @param Address New addres to patch into the instruction
174 ThumbMovtImmediatePatch (
175 IN OUT UINT16
*Instruction
,
181 Pass in a pointer to an ARM MOVW/MOVT instruciton pair and
182 return the immediate data encoded in the two` instruction
184 @param Instructions Pointer to ARM MOVW/MOVT insturction pair
186 @return Immediate address encoded in the instructions
191 ThumbMovwMovtImmediateAddress (
192 IN UINT16
*Instructions
196 Update an ARM MOVW/MOVT immediate instruction instruction pair.
198 @param Instructions Pointer to ARM MOVW/MOVT instruction pair
199 @param Address New addres to patch into the instructions
203 ThumbMovwMovtImmediatePatch (
204 IN OUT UINT16
*Instructions
,