13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 34ea9375a2d02a43671437e0d3d808d85afb30afahhtianCopyright (c) 2005 - 2006, Intel Corporation. All rights reserved.<BR> 44ea9375a2d02a43671437e0d3d808d85afb30afahhtianThis program and the accompanying materials 53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License 63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution. The full text of the license may be found at 73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php 83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name: 143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang PeCoffLoaderEx.c 163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract: 183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang x64 Specific relocation fixups 203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRevision History 223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "TianoCommon.h" 263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "EfiImage.h" 273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS 293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangPeCoffLoaderRelocateImageEx ( 303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT16 *Reloc, 313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN OUT CHAR8 *Fixup, 323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN OUT CHAR8 **FixupData, 333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT64 Adjust 343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) 353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description: 383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Performs an x64 specific relocation fixup 393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments: 413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Reloc - Pointer to the relocation record 423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Fixup - Pointer to the address to fix up 433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang FixupData - Pointer to a buffer to log the fixups 443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Adjust - The offset to adjust the fixup 453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns: 473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_UNSUPPORTED - relocate unsupported 483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{ 513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return EFI_UNSUPPORTED; 523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} 533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangBOOLEAN 553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangPeCoffLoaderImageFormatSupported ( 563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT16 Machine 573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) 583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description: 603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Returns TRUE if the machine type of PE/COFF image is supported. Supported 623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang does not mean the image can be executed it means the PE/COFF loader supports 633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang loading and relocating of the image type. It's up to the caller to support 643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang the entry point. 653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang This function implies the basic PE/COFF loader/relocator supports IA32, EBC, 673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang & X64 images. Calling the entry point in a correct mannor is up to the 683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang consumer of this library. 693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments: 713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Machine - Machine type from the PE Header. 733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns: 753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang TRUE - if this PE/COFF loader can load the image 773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang FALSE - if this PE/COFF loader cannot load the image 783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{ 813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang if ((Machine == EFI_IMAGE_MACHINE_IA32) || (Machine == EFI_IMAGE_MACHINE_X64) || 823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang (Machine == EFI_IMAGE_MACHINE_EBC)) { 833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return TRUE; 843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang } 853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return FALSE; 873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} 88