--- /dev/null
+/** @file\r
+ Provides services to perform additional actions to relocate and unload\r
+ PE/Coff image for some environment specific purpose say for souce level debug.\r
+\r
+ Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __PE_COFF_EXTRA_ACTION_LIB_H__\r
+#define __PE_COFF_EXTRA_ACTION_LIB_H__\r
+#include <Library/PeCoffLib.h>\r
+/**\r
+ Applies additional actions to relocate fixups to a PE/COFF image.\r
+\r
+ Generally this function is called after sucessfully Applying relocation fixups \r
+ to a PE/COFF image for some specicial purpose. \r
+ As a example, For NT32 emulator, the function should be implemented and called\r
+ to support source level debug. \r
+ \r
+ @param ImageContext Pointer to the image context structure that describes the PE/COFF\r
+ image that is being relocated.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeCoffLoaderRelocateImageExtraAction (\r
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
+ );\r
+\r
+/**\r
+ Unloads a loaded PE/COFF image from memory and releases its taken resource.\r
+ \r
+ Releases any environment specific resources that were allocated when the image \r
+ specified by ImageContext was loaded using PeCoffLoaderLoadImage(). \r
+ For NT32 emulator, the PE/COFF image loaded by system needs to release.\r
+ For real platform, the PE/COFF image loaded by Core doesn't needs to be unloaded, \r
+ \r
+ If ImageContext is NULL, then ASSERT().\r
+ \r
+ @param ImageContext Pointer to the image context structure that describes the PE/COFF\r
+ image to be unloaded.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeCoffLoaderUnloadImageExtraAction (\r
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
+ );\r
+#endif\r
// If there are no relocation entries, then we are done\r
//\r
if (ImageContext->RelocationsStripped) {\r
+ // Applies additional environment specific actions to relocate fixups \r
+ // to a PE/COFF image if needed\r
+ PeCoffLoaderRelocateImageExtraAction (ImageContext); \r
return RETURN_SUCCESS;\r
}\r
\r
ImageContext->EntryPoint -= (UINT64) ImageContext->ImageAddress;\r
ImageContext->EntryPoint += (UINT64) ImageContext->DestinationAddress;\r
}\r
+ \r
+ // Applies additional environment specific actions to relocate fixups \r
+ // to a PE/COFF image if needed\r
+ PeCoffLoaderRelocateImageExtraAction (ImageContext);\r
+ \r
return RETURN_SUCCESS;\r
}\r
\r
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
)\r
{\r
+ // Applies additional environment specific actions to unload a \r
+ // PE/COFF image if needed\r
+ PeCoffLoaderUnloadImageExtraAction (ImageContext);\r
return RETURN_SUCCESS;\r
}\r
\r
[LibraryClasses]\r
DebugLib\r
+ PeCoffExtraActionLib\r
BaseMemoryLib\r
\r
#include <Library/PeCoffLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/DebugLib.h>\r
+#include <Library/PeCoffExtraActionLib.h>\r
#include <IndustryStandard/PeImage.h>\r
\r
\r
--- /dev/null
+/** @file\r
+ Null PE/Coff Extra Action library instances with empty functions.\r
+\r
+ Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
+ All rights reserved. This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <Base.h>\r
+#include <Library/PeCoffExtraActionLib.h>\r
+/**\r
+ Applies additional actions to relocate fixups to a PE/COFF image.\r
+\r
+ Generally this function is called after sucessfully Applying relocation fixups \r
+ to a PE/COFF image for some specicial purpose. \r
+ As a example, For NT32 emulator, the function should be implemented and called\r
+ to support source level debug. \r
+ \r
+ @param ImageContext Pointer to the image context structure that describes the PE/COFF\r
+ image that is being relocated.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeCoffLoaderRelocateImageExtraAction (\r
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
+ )\r
+{\r
+} \r
+\r
+/**\r
+ Unloads a loaded PE/COFF image from memory and releases its taken resource.\r
+ \r
+ Releases any environment specific resources that were allocated when the image \r
+ specified by ImageContext was loaded using PeCoffLoaderLoadImage(). \r
+ For NT32 emulator, the PE/COFF image loaded by system needs to release.\r
+ For real platform, the PE/COFF image loaded by Core doesn't needs to be unloaded, \r
+ \r
+ If ImageContext is NULL, then ASSERT().\r
+ \r
+ @param ImageContext Pointer to the image context structure that describes the PE/COFF\r
+ image to be unloaded.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeCoffLoaderUnloadImageExtraAction (\r
+ IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext\r
+ )\r
+{\r
+}
\ No newline at end of file
--- /dev/null
+#/** @file\r
+# Debug Library with empty functions.\r
+#\r
+# Copyright (c) 2007 - 2008, Intel Corporation.\r
+#\r
+# All rights reserved. This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+#\r
+#**/\r
+\r
+[Defines]\r
+ INF_VERSION = 0x00010005\r
+ BASE_NAME = PeCoffExtraActionLibNull\r
+ FILE_GUID = 0EB84DA1-267A-40b4-8347-1F48694C8B47\r
+ MODULE_TYPE = BASE\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = PeCoffExtraActionLib \r
+\r
+\r
+#\r
+# VALID_ARCHITECTURES = IA32 X64 IPF EBC\r
+#\r
+\r
+[Sources.common]\r
+ PeCoffExtraActionLib.c\r
+\r
+\r
+[Packages]\r
+ MdePkg/MdePkg.dec\r
+\r
\r
## @libraryclass Provides services to load and relocate a PE/COFF image.\r
PeCoffLib|Include/Library/PeCoffLib.h\r
+ ## @libraryclass Provides extra action services for unloading and relocating a PE/COFF image on some specific platform such\r
+ ## as NT32 emulator.\r
+ PeCoffExtraActionLib|Include/Library/PeCoffExtraActionLib.h\r
\r
## @libraryclass Provides a service to retrieve the PE/COFF entry point from a PE/COFF image.\r
PeCoffGetEntryPointLib|Include/Library/PeCoffGetEntryPointLib.h\r
MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf\r
MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf\r
MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
+ MdePkg/Library/PeCoffExtraActionLibNull/PeCoffExtraActionLibNull.inf\r
MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf\r
MdePkg/Library/BasePostCodeLibDebug/BasePostCodeLibDebug.inf\r
MdePkg/Library/BasePostCodeLibPort80/BasePostCodeLibPort80.inf\r