From 398b646f5bcd3714685eb537f749edb2966d12dc Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Thu, 5 Mar 2009 09:20:08 +0000 Subject: Remove PeiPeCoffLoader.h and gPeiPeCoffLoaderGuid, and Add PeCoffExtraActionLib class and instances. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7812 6f19259b-4bc3-4df7-8a09-765794883524 --- .../DxeUnixPeCoffExtraActionLib.c | 132 +++++++++++++++++++++ .../DxeUnixPeCoffExtraActionLib.inf | 52 ++++++++ 2 files changed, 184 insertions(+) create mode 100644 UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.c create mode 100644 UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.inf (limited to 'UnixPkg/Library/DxeUnixPeCoffExtraActionLib') diff --git a/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.c b/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.c new file mode 100644 index 0000000000..a28fde8ebc --- /dev/null +++ b/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.c @@ -0,0 +1,132 @@ +/**@file + +Copyright (c) 2006, Intel Corporation +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: + + PeiUnixPeCoffExtraActionLib.c + +Abstract: + + Provides services to perform additional actions to relocate and unload + PE/Coff image for Unix environment specific purpose such as souce level debug. + This version only works for DXE phase + + +**/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +// +// Cache of UnixThunk protocol +// +EFI_UNIX_THUNK_PROTOCOL *mUnix; + + +/** + The constructor function gets the pointer of the WinNT thunk functions + It will ASSERT() if Unix thunk protocol is not installed. + + @retval EFI_SUCCESS Unix thunk protocol is found and cached. + +**/ +EFI_STATUS +EFIAPI +DxeUnixPeCoffLibExtraActionConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_HOB_GUID_TYPE *GuidHob; + + // + // Retrieve UnixThunkProtocol from GUID'ed HOB + // + GuidHob = GetFirstGuidHob (&gEfiUnixThunkProtocolGuid); + ASSERT (GuidHob != NULL); + mUnix = (EFI_UNIX_THUNK_PROTOCOL *)(*(UINTN *)(GET_GUID_HOB_DATA (GuidHob))); + ASSERT (mUnix != NULL); + + return EFI_SUCCESS; +} + +/** + Applies additional actions to relocate fixups to a PE/COFF image. + + Generally this function is called after sucessfully Applying relocation fixups + to a PE/COFF image for some specicial purpose. + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image that is being relocated. + +**/ +VOID +EFIAPI +PeCoffLoaderRelocateImageExtraAction ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ + VOID * Handle; + VOID * Entry; + + Handle = NULL; + Entry = NULL; + + DEBUG ((EFI_D_ERROR, "Loading %s 0x%08lx - entry point 0x%08lx\n", + ImageContext->PdbPointer, + (UINTN)ImageContext->ImageAddress, + (UINTN)ImageContext->EntryPoint)); + + Handle = mUnix->Dlopen(ImageContext->PdbPointer, RTLD_NOW); + + if (Handle) { + Entry = mUnix->Dlsym(Handle, "_ModuleEntryPoint"); + } else { + DEBUG ((EFI_D_ERROR, "%s\n", mUnix->Dlerror())); + } + + if (Entry != NULL) { + ImageContext->EntryPoint = Entry; + DEBUG ((EFI_D_ERROR, "Change %s Entrypoint to :0x%08lx\n", ImageContext->PdbPointer, Entry)); + } + + + return; + } + +/** + Unloads a loaded PE/COFF image from memory and releases its taken resource. + + Releases any environment specific resources that were allocated when the image + specified by ImageContext was loaded using PeCoffLoaderLoadImage(). + + If ImageContext is NULL, then ASSERT(). + + @param ImageContext Pointer to the image context structure that describes the PE/COFF + image to be unloaded. + +**/ +VOID +EFIAPI +PeCoffLoaderUnloadImageExtraAction ( + IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext + ) +{ +} \ No newline at end of file diff --git a/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.inf b/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.inf new file mode 100644 index 0000000000..93c514692c --- /dev/null +++ b/UnixPkg/Library/DxeUnixPeCoffExtraActionLib/DxeUnixPeCoffExtraActionLib.inf @@ -0,0 +1,52 @@ +#/** @file +# PeCoff extra action libary for DXE phase that run Unix emulator. +# +# Lib to provide memory journal status code reporting Routines +# Copyright (c) 2007, Intel Corporation +# 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. + +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = DxeUnixPeCoffExtraActionLib + FILE_GUID = C6F96971-39D2-49a5-93FC-5D42FB4D7DD2 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = PeCoffExtraActionLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + CONSTRUCTOR = DxeUnixPeCoffLibExtraActionConstructor + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 +# + +[Sources.common] + DxeUnixPeCoffExtraActionLib.c + +[Packages] + UnixPkg/UnixPkg.dec + MdePkg/MdePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + +[LibraryClasses] + DebugLib + HobLib + BaseMemoryLib + +[Protocols] + gEfiUnixThunkProtocolGuid # PROTOCOL ALWAYS_CONSUMED + -- cgit v1.2.3