13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 34ea9375a2d02a43671437e0d3d808d85afb30afahhtianCopyright (c) 2004 - 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 123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name: 133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang PeCoffLoaderEx.c 153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract: 173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IA-32 Specific relocation fixups 193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRevision History 213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "TianoCommon.h" 253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "EfiImage.h" 263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS 283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangPeCoffLoaderRelocateImageEx ( 293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT16 *Reloc, 303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN OUT CHAR8 *Fixup, 313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN OUT CHAR8 **FixupData, 323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT64 Adjust 333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) 343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description: 373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Performs an IA-32 specific relocation fixup 393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments: 413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Reloc - Pointer to the relocation record 433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Fixup - Pointer to the address to fix up 453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang FixupData - Pointer to a buffer to log the fixups 473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Adjust - The offset to adjust the fixup 493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns: 513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang EFI_UNSUPPORTED - relocate unsupported 533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{ 563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return EFI_UNSUPPORTED; 573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} 583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangBOOLEAN 603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangPeCoffLoaderImageFormatSupported ( 613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang IN UINT16 Machine 623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang ) 633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++ 643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRoutine Description: 653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Returns TRUE if the machine type of PE/COFF image is supported. Supported 673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang does not mean the image can be executed it means the PE/COFF loader supports 683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang loading and relocating of the image type. It's up to the caller to support 693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang the entry point. 703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang This function implies the basic PE/COFF loader/relocator supports IA32, EBC, 723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang & X64 images. Calling the entry point in a correct mannor is up to the 733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang consumer of this library. 743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangArguments: 763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang Machine - Machine type from the PE Header. 783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangReturns: 803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang TRUE - if this PE/COFF loader can load the image 823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang FALSE - if this PE/COFF loader cannot load the image 833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/ 853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang{ 863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang if ((Machine == EFI_IMAGE_MACHINE_IA32) || (Machine == EFI_IMAGE_MACHINE_X64) || 873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang (Machine == EFI_IMAGE_MACHINE_EBC)) { 883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return TRUE; 893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang } 903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang return FALSE; 923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} 933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang 94