X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkNt32Pkg%2FLibrary%2FEdkGenericBdsLib%2FPerformance.c;h=80b98563f067bba215341e813da49b31d6c02ce0;hp=320d6b7c44fe59540789205b72508ce17bbe49ac;hb=cb44bbdb8e15fc40362e6b0542be196c15c04615;hpb=878ddf1fc3540a715f63594ed22b6929e881afb4 diff --git a/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c b/EdkNt32Pkg/Library/EdkGenericBdsLib/Performance.c index 320d6b7c44..80b98563f0 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 ( @@ -260,9 +232,10 @@ Returns: // // Allocate a block of memory that contain performance data to OS // + mAcpiLowMemoryBase = 0xFFFFFFFF; Status = gBS->AllocatePages ( - AllocateAnyPages, - EfiACPIReclaimMemory, + AllocateMaxAddress, + EfiReservedMemoryType, 4, &mAcpiLowMemoryBase ); @@ -270,7 +243,7 @@ Returns: return ; } - mAcpiLowMemoryLength = 0x1000; + mAcpiLowMemoryLength = EFI_PAGES_TO_SIZE(4); Ptr = (UINT8 *) ((UINT32) mAcpiLowMemoryBase + sizeof (PERF_HEADER)); LimitCount = (mAcpiLowMemoryLength - sizeof (PERF_HEADER)) / sizeof (PERF_DATA); @@ -289,7 +262,7 @@ Returns: &Cpu ); if (EFI_ERROR (Status)) { - gBS->FreePages (mAcpiLowMemoryBase, 1); + gBS->FreePages (mAcpiLowMemoryBase, 4); return ; } // @@ -297,7 +270,7 @@ Returns: // Status = Cpu->GetTimerValue (Cpu, 0, &(CurrentTicker), &TimerPeriod); if (EFI_ERROR (Status)) { - gBS->FreePages (mAcpiLowMemoryBase, 1); + gBS->FreePages (mAcpiLowMemoryBase, 4); return ; } @@ -322,7 +295,7 @@ Returns: &Handles ); if (EFI_ERROR (Status)) { - gBS->FreePages (mAcpiLowMemoryBase, 1); + gBS->FreePages (mAcpiLowMemoryBase, 4); return ; } //