diff options
author | qhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-03-05 09:20:08 +0000 |
---|---|---|
committer | qhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524> | 2009-03-05 09:20:08 +0000 |
commit | 398b646f5bcd3714685eb537f749edb2966d12dc (patch) | |
tree | 0a5f79bfbd67027f4b13105209dcbcee6bddf374 /UnixPkg/Library/PeiUnixPeCoffExtraActionLib | |
parent | 27b2d249d57f9bde599af477d3b82acc3c62dfac (diff) | |
download | edk2-platforms-398b646f5bcd3714685eb537f749edb2966d12dc.tar.xz |
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
Diffstat (limited to 'UnixPkg/Library/PeiUnixPeCoffExtraActionLib')
-rw-r--r-- | UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.c | 137 | ||||
-rw-r--r-- | UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.inf | 49 |
2 files changed, 186 insertions, 0 deletions
diff --git a/UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.c b/UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.c new file mode 100644 index 0000000000..c878b224da --- /dev/null +++ b/UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.c @@ -0,0 +1,137 @@ +/**@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 PEI phase + + +**/ +#include <PiPei.h> +#include <Ppi/UnixThunk.h> +#include <FrameworkModuleBase.h> + +#include <Library/PeCoffLib.h> +#include <Library/PeiServicesLib.h> +#include <Library/DebugLib.h> +#include <Library/BaseLib.h> +#include <Library/PeCoffExtraActionLib.h> + +// +// Cache of UnixThunk protocol +// +EFI_UNIX_THUNK_PROTOCOL *mUnix = NULL; + +/** + The function caches the pointer of the WinNT thunk functions + It will ASSERT() if Unix thunk ppi is not installed. + + @retval EFI_SUCCESS WinNT thunk protocol is found and cached. + +**/ +EFI_STATUS +EFIAPI +UnixPeCoffGetUnixThunkStucture ( + ) +{ + PEI_UNIX_THUNK_PPI *UnixThunkPpi; + EFI_STATUS Status; + + + // + // Locate Unix ThunkPpi for retrieving standard output handle + // + Status = PeiServicesLocatePpi ( + &gPeiUnixThunkPpiGuid, + 0, + NULL, + (VOID **) &UnixThunkPpi + ); + + ASSERT_EFI_ERROR (Status); + + mUnix = (EFI_UNIX_THUNK_PROTOCOL *) UnixThunkPpi->UnixThunk (); + + 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; + + if (mUnix == NULL) { + UnixPeCoffGetUnixThunkStucture (); + } + 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/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.inf b/UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.inf new file mode 100644 index 0000000000..1ecdd29681 --- /dev/null +++ b/UnixPkg/Library/PeiUnixPeCoffExtraActionLib/PeiUnixPeCoffExtraActionLib.inf @@ -0,0 +1,49 @@ +#/** @file +# PeCoff extra action libary for Pei 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 = PeiUnixPeCoffExtraActionLib + FILE_GUID = 1D0D29DE-A5EC-46aa-AE8A-1A5A1F71F202 + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + LIBRARY_CLASS = PeCoffExtraActionLib|PEI_CORE PEIM + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 +# + +[Sources.common] + PeiUnixPeCoffExtraActionLib.c + +[Packages] + MdePkg/MdePkg.dec + UnixPkg/UnixPkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + IntelFrameworkPkg/IntelFrameworkPkg.dec + +[LibraryClasses] + BaseLib + PeiServicesLib + DebugLib + +[Ppis] + gPeiUnixThunkPpiGuid # PPI ALWAYS_CONSUMED |