]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Core/Pei/Image/Image.c
Removed cross references from PciCf8Lib and PciExpressLib class to PciLib class.
[mirror_edk2.git] / EdkModulePkg / Core / Pei / Image / Image.c
index 5edc8479eb04ca4aadd31c43ca684952f07a8a88..9df12f8ab3ef3f0da77fcffc658249293522718e 100644 (file)
@@ -21,6 +21,8 @@ Abstract:
 \r
 #include <PeiMain.h>\r
 \r
+\r
+\r
 EFI_STATUS\r
 PeiLoadImage (\r
   IN EFI_PEI_SERVICES         **PeiServices,\r
@@ -130,106 +132,35 @@ Returns:
   // Print debug message: Loading PEIM at 0x12345678 EntryPoint=0x12345688 Driver.efi\r
   //\r
   DEBUG ((EFI_D_INFO | EFI_D_LOAD, "Loading PEIM at 0x%08x EntryPoint=0x%08x ", Pe32Data, *EntryPoint));\r
-  DEBUG_CODE (\r
-    EFI_IMAGE_DATA_DIRECTORY * DirectoryEntry;\r
-    EFI_IMAGE_DEBUG_DIRECTORY_ENTRY * DebugEntry;\r
-    UINTN DirCount;\r
-    UINTN Index;\r
-    UINTN Index1;\r
-    BOOLEAN FileNameFound;\r
-    CHAR8 *AsciiString;\r
-    CHAR8 AsciiBuffer[512];\r
-    VOID *CodeViewEntryPointer;\r
-    INTN TEImageAdjust;\r
-    EFI_IMAGE_DOS_HEADER  *DosHeader;\r
-    EFI_IMAGE_NT_HEADERS  *PeHeader;\r
+  DEBUG_CODE_BEGIN ();\r
+    PE_COFF_LOADER_IMAGE_CONTEXT          ImageContext;\r
+    UINTN                                 Index;\r
+    CHAR8                                 *PdbStr;\r
+    CHAR8                                 AsciiBuffer[512];\r
 \r
-    //\r
-    // Pe32Data is NULL when load TE image \r
-    //    \r
-    PeHeader = NULL;\r
-    if (TEImageHeader == NULL) {\r
-      DosHeader = (EFI_IMAGE_DOS_HEADER *)Pe32Data;\r
-      if (DosHeader->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
-        //\r
-        // DOS image header is present, so read the PE header after the DOS image header\r
-        //\r
-        PeHeader = (EFI_IMAGE_NT_HEADERS *) ((UINTN) Pe32Data + (UINTN) ((DosHeader->e_lfanew) & 0x0ffff));\r
-      } else {\r
-        //\r
-        // DOS image header is not present, so PE header is at the image base\r
-        //\r
-        PeHeader = (EFI_IMAGE_NT_HEADERS *) Pe32Data;\r
-      }\r
-    }\r
 \r
-    //\r
-    // Find the codeview info in the image and display the file name\r
-    // being loaded.\r
-    //\r
-    // Per the PE/COFF spec, you can't assume that a given data directory\r
-    // is present in the image. You have to check the NumberOfRvaAndSizes in\r
-    // the optional header to verify a desired directory entry is there.\r
-    //\r
-    DebugEntry      = NULL;\r
-    DirectoryEntry  = NULL;\r
-    TEImageAdjust   = 0;\r
-    if (TEImageHeader == NULL) {\r
-      if (PeHeader->OptionalHeader.NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_DEBUG) {\r
-        DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *) &(PeHeader->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
-        DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) ((UINTN) ImageAddress + DirectoryEntry->VirtualAddress);\r
-      }\r
-    } else {\r
-      if (TEImageHeader->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress != 0) {\r
-        DirectoryEntry  = &TEImageHeader->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG];\r
-        TEImageAdjust   = sizeof (EFI_TE_IMAGE_HEADER) - TEImageHeader->StrippedSize;\r
-        DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)((UINTN) TEImageHeader +\r
-                      TEImageHeader->DataDirectory[EFI_TE_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress +\r
-                      TEImageAdjust);\r
-      }\r
-    }\r
+    ZeroMem (&ImageContext, sizeof (ImageContext));\r
+    ImageContext.Handle    = Pe32Data;\r
+    ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
 \r
-    if (DebugEntry != NULL && DirectoryEntry != NULL) {\r
-      for (DirCount = 0; DirCount < DirectoryEntry->Size; DirCount++, DebugEntry++) {\r
-        if (DebugEntry->Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {\r
-          if (DebugEntry->SizeOfData > 0) {\r
-            CodeViewEntryPointer = (VOID *) ((UINTN) DebugEntry->RVA + (UINTN) ImageAddress + (UINTN)TEImageAdjust);\r
-            switch (* (UINT32 *) CodeViewEntryPointer) {\r
-              case CODEVIEW_SIGNATURE_NB10:\r
-                AsciiString = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);\r
-                break;\r
-\r
-              case CODEVIEW_SIGNATURE_RSDS:\r
-                AsciiString = (CHAR8 *) CodeViewEntryPointer + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);\r
-                break;\r
-\r
-              default:\r
-                AsciiString = NULL;\r
-                break;\r
-            }\r
-            if (AsciiString != NULL) {\r
-              FileNameFound = FALSE;\r
-              for (Index = 0, Index1 = 0; AsciiString[Index] != 0; Index++) {\r
-                if (AsciiString[Index] == '\\') {\r
-                  Index1 = Index;\r
-                  FileNameFound = TRUE;\r
-                }\r
-              }\r
-\r
-              if (FileNameFound) {\r
-                for (Index = Index1 + 1; AsciiString[Index] != '.'; Index++) {\r
-                  AsciiBuffer[Index - (Index1 + 1)] = AsciiString[Index];\r
-                }\r
-                AsciiBuffer[Index - (Index1 + 1)] = 0;\r
-                DEBUG ((EFI_D_INFO | EFI_D_LOAD, "%a.efi", AsciiBuffer));\r
-                break;\r
-              }\r
-            }\r
-          }\r
+    PeCoffLoaderGetImageInfo (&ImageContext);\r
+    \r
+    if (ImageContext.PdbPointer != NULL) {\r
+      //\r
+      // Copy PDB pointer to AsciiBuffer and replace .PDB with .EFI\r
+      //\r
+      PdbStr = ImageContext.PdbPointer;\r
+      for (Index = 0; PdbStr != 0; Index++, PdbStr++) {\r
+        AsciiBuffer[Index] = *PdbStr;\r
+        if (*PdbStr == '.') {\r
+          AsciiBuffer[Index] = '\0';  \r
         }\r
       }\r
+      \r
+      DEBUG ((EFI_D_INFO | EFI_D_LOAD, "%a.efi", AsciiBuffer));\r
     }\r
-  );\r
+\r
+  DEBUG_CODE_END ();\r
 \r
   DEBUG ((EFI_D_INFO | EFI_D_LOAD, "\n"));\r
 \r