Added PeCoffLoaderGetMachineType to the PeCoffGetEntryPointLibrary Class. Document to be updated. Added the PeCoffLoaderImageReadFromMemory() and PeCoffLoaderRelocateImageForRuntime () to the PcCoffLib. Updated EfiImage.h and removed EFI_IMAGE_OPTIONAL_HEADER and EFI_IMAGE_NT_HEADERS as they were replaced with checking the MachineType. PeCoffLib – Added checks for MachineType so the PeCoff lib can load any PE32 or PE32+ image. The relocations are still limited to IA32, X64, IPF, and EBC. I also added a re-relocator function to remove PeLoader Code from Runtime Lib. Even though there is only one instance of the re-relocator I wanted to get all the PeCoff loader code together. Replaced DEBUG_CODE() macro with DEBUG_CODE_START() and DEBUG_CODE_END() so you can debug through the DEBUG_CODE() macros. Also removed PE/COFF code and replaced with library usage. I also updated the IO Instrinsic lib to use _ReadWriteBarrior() to help with sync problems git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1103 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   IA-32 Specific relocation fixups.
 | |
| 
 | |
|   Copyright (c) 2006, Intel Corporation<BR>
 | |
|   All rights reserved. This program and the accompanying materials
 | |
|   are licensed and made available under the terms and conditions of the BSD License
 | |
|   which accompanies this distribution.  The full text of the license may be found at
 | |
|   http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
|   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
|   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
|   Module Name:  PeCoffLoaderEx.c
 | |
| 
 | |
| **/
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Performs an IA-32 specific relocation fixup.
 | |
| 
 | |
|   @param  Reloc       Pointer to the relocation record.
 | |
|   @param  Fixup       Pointer to the address to fix up.
 | |
|   @param  FixupData   Pointer to a buffer to log the fixups.
 | |
|   @param  Adjust      The offset to adjust the fixup.
 | |
| 
 | |
|   @retval EFI_UNSUPPORTED Unsupported now.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| PeCoffLoaderRelocateImageEx (
 | |
|   IN UINT16      *Reloc,
 | |
|   IN OUT CHAR8   *Fixup,
 | |
|   IN OUT CHAR8   **FixupData,
 | |
|   IN UINT64      Adjust
 | |
|   )
 | |
| {
 | |
|   return RETURN_UNSUPPORTED;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Returns TRUE if the machine type of PE/COFF image is supported. Supported 
 | |
|   does not mean the image can be executed it means the PE/COFF loader supports
 | |
|   loading and relocating of the image type. It's up to the caller to support
 | |
|   the entry point. 
 | |
| 
 | |
|   This function implies the basic PE/COFF loader/relocator supports IA32, EBC,
 | |
|   & X64 images. Calling the entry point in a correct mannor is up to the 
 | |
|   consumer of this library.
 | |
| 
 | |
|   @param  Machine   Machine type from the PE Header.
 | |
| 
 | |
|   @return TRUE if this PE/COFF loader can load the image
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| PeCoffLoaderImageFormatSupported (
 | |
|   IN  UINT16  Machine
 | |
|   )
 | |
| {
 | |
|   if ((Machine == EFI_IMAGE_MACHINE_IA32) || (Machine == EFI_IMAGE_MACHINE_X64) || 
 | |
|       (Machine ==  EFI_IMAGE_MACHINE_EBC)) {
 | |
|     return TRUE; 
 | |
|   }
 | |
| 
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Performs an Itanium-based specific re-relocation fixup and is a no-op on other
 | |
|   instruction sets. This is used to re-relocated the image into the EFI virtual
 | |
|   space for runtime calls.
 | |
| 
 | |
|   @param  Reloc       Pointer to the relocation record.
 | |
|   @param  Fixup       Pointer to the address to fix up.
 | |
|   @param  FixupData   Pointer to a buffer to log the fixups.
 | |
|   @param  Adjust      The offset to adjust the fixup.
 | |
| 
 | |
|   @return Status code.
 | |
| 
 | |
| **/
 | |
| RETURN_STATUS
 | |
| PeHotRelocateImageEx (
 | |
|   IN UINT16      *Reloc,
 | |
|   IN OUT CHAR8   *Fixup,
 | |
|   IN OUT CHAR8   **FixupData,
 | |
|   IN UINT64      Adjust
 | |
|   )
 | |
| {
 | |
|   return RETURN_UNSUPPORTED;
 | |
| }
 | |
| 
 |