From 2ce311322c72857f73138c45358e722607a1e80c Mon Sep 17 00:00:00 2001 From: ajfish Date: Wed, 26 Jul 2006 15:23:35 +0000 Subject: Removed cross references from PciCf8Lib and PciExpressLib class to PciLib class. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added PeCoffLoaderGetMachineType to the PeCoffGetEntryPointLibrary Class. Document to be updated. Added the PeCoffLoaderImageReadFromMemory() and PeCoffLoaderRelocateImageForRuntime () to the PcCoffLib. Updated EfiImage.h and removed EFI_IMAGE_OPTIONAL_HEADER and EFI_IMAGE_NT_HEADERS as they were replaced with checking the MachineType. PeCoffLib – Added checks for MachineType so the PeCoff lib can load any PE32 or PE32+ image. The relocations are still limited to IA32, X64, IPF, and EBC. I also added a re-relocator function to remove PeLoader Code from Runtime Lib. Even though there is only one instance of the re-relocator I wanted to get all the PeCoff loader code together. Replaced DEBUG_CODE() macro with DEBUG_CODE_START() and DEBUG_CODE_END() so you can debug through the DEBUG_CODE() macros. Also removed PE/COFF code and replaced with library usage. I also updated the IO Instrinsic lib to use _ReadWriteBarrior() to help with sync problems git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1103 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c | 56 ++++++----------------- 1 file changed, 14 insertions(+), 42 deletions(-) (limited to 'EdkNt32Pkg/Library') diff --git a/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c b/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c index 320d6b7c44..c7b6bc9d5d 100644 --- a/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c +++ b/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c @@ -28,6 +28,9 @@ ClearDebugRegisters ( VOID ) { + // + // BugBug: We should not need to do this. We need to root cause this bug!!!! + // AsmWriteDr0 (0); AsmWriteDr1 (0); } @@ -85,6 +88,8 @@ Returns: return ; } + + STATIC CHAR8 * GetPdbPath ( @@ -107,51 +112,18 @@ Returns: --*/ { - CHAR8 *PdbPath; - UINT32 DirCount; - EFI_IMAGE_DOS_HEADER *DosHdr; - EFI_IMAGE_NT_HEADERS *NtHdr; - EFI_IMAGE_OPTIONAL_HEADER *OptionalHdr; - EFI_IMAGE_DATA_DIRECTORY *DirectoryEntry; - EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *DebugEntry; - VOID *CodeViewEntryPointer; - - CodeViewEntryPointer = NULL; - PdbPath = NULL; - DosHdr = ImageBase; - - if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) { - NtHdr = (EFI_IMAGE_NT_HEADERS *) ((UINT8 *) DosHdr + DosHdr->e_lfanew); - OptionalHdr = (VOID *) &NtHdr->OptionalHeader; - DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *) &(OptionalHdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]); - if (DirectoryEntry->VirtualAddress != 0) { - for (DirCount = 0; - (DirCount < DirectoryEntry->Size / sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)) && CodeViewEntryPointer == NULL; - DirCount++ - ) { - DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (DirectoryEntry->VirtualAddress + (UINTN) ImageBase + DirCount * sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)); - if (DebugEntry->Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) { - CodeViewEntryPointer = (VOID *) ((UINTN) DebugEntry->RVA + (UINTN) ImageBase); - switch (*(UINT32 *) CodeViewEntryPointer) { - case CODEVIEW_SIGNATURE_NB10: - PdbPath = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY); - break; - - case CODEVIEW_SIGNATURE_RSDS: - PdbPath = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY); - break; - - default: - break; - } - } - } - } - } + PE_COFF_LOADER_IMAGE_CONTEXT ImageContext; + + ZeroMem (&ImageContext, sizeof (ImageContext)); + ImageContext.Handle = ImageBase; + ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory; - return PdbPath; + PeCoffLoaderGetImageInfo (&ImageContext); + + return ImageContext.PdbPointer; } + STATIC VOID GetNameFromHandle ( -- cgit v1.2.3