Enhance GenFv tool always collect all module Map files into the single FvMap file...
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 27 May 2008 09:04:09 +0000 (09:04 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 27 May 2008 09:04:09 +0000 (09:04 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1245 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenFv/GenFvInternalLib.c

index 60db4e9..90aa1e8 100644 (file)
@@ -1997,12 +1997,12 @@ Returns:
   if (FvInfo->RuntimeBaseAddress != 0) {\r
     Flags  |= REBASE_RUNTIME_FILE;\r
   }\r
+\r
   //\r
-  // Don't Rebase this FFS.\r
+  //  Don't Rebase this FFS.\r
+  //  Only copy the original map file into the FvMap file \r
+  //  for the image that is not required to be relocated.\r
   //\r
-  if (Flags == 0) {\r
-    return EFI_SUCCESS;\r
-  }\r
 \r
   //\r
   // We only process files potentially containing PE32 sections.\r
@@ -2058,7 +2058,7 @@ Returns:
           //\r
           // We aren't relocating XIP code, so skip it.\r
           //\r
-          return EFI_SUCCESS;\r
+          goto WritePeMap;\r
         }\r
         \r
         //\r
@@ -2137,7 +2137,7 @@ Returns:
               //\r
               // RT drivers aren't supposed to be relocated\r
               //\r
-              continue;\r
+              goto WritePeMap;\r
             }\r
             //\r
             // make sure image base address at the section alignment\r
@@ -2156,7 +2156,7 @@ Returns:
               //\r
               // Skip all BS_DRIVER's\r
               //\r
-              continue;\r
+              goto WritePeMap;\r
             }\r
             //\r
             // make sure image base address at the Section and Page alignment\r
@@ -2174,7 +2174,7 @@ Returns:
           //\r
           // Skip DXE core, DxeCore only contain one PE image.\r
           //\r
-          return EFI_SUCCESS;\r
+          goto WritePeMap;\r
         }\r
         //\r
         // make sure image base address at the Section and Page alignment\r
@@ -2286,18 +2286,17 @@ Returns:
     //\r
     // Get this module function address from ModulePeMapFile and add them into FvMap file\r
     //\r
+WritePeMap:\r
     WriteMapFile (FvMapFile, FileName, ImageContext.DestinationAddress, PeHdr->OptionalHeader.AddressOfEntryPoint, 0);\r
   }\r
 \r
-  if ((Flags & 1) == 0 || (\r
-      FfsFile->Type != EFI_FV_FILETYPE_SECURITY_CORE &&\r
+  if (FfsFile->Type != EFI_FV_FILETYPE_SECURITY_CORE &&\r
       FfsFile->Type != EFI_FV_FILETYPE_PEI_CORE &&\r
-\r
       FfsFile->Type != EFI_FV_FILETYPE_PEIM &&\r
       FfsFile->Type != EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER\r
-      )) {\r
+      ) {\r
     //\r
-    // Only XIP code may have a TE section\r
+    // Only Peim code may have a TE section\r
     //\r
     return EFI_SUCCESS;\r
   }\r
@@ -2330,6 +2329,13 @@ Returns:
       Error (NULL, 0, 3000, "Invalid", "GetImageInfo() call failed on rebase of TE image %s", FileName);\r
       return Status;\r
     }\r
+    \r
+    if ((Flags & REBASE_XIP_FILE) == 0) {\r
+      //\r
+      // For none XIP PEIM module, their map info also are collected.\r
+      //\r
+      goto WriteTeMap;\r
+    }\r
     //\r
     // if reloc is stripped, try to get the original efi image to get reloc info.\r
     //\r
@@ -2466,6 +2472,7 @@ Returns:
     //\r
     // Get this module function address from ModulePeMapFile and add them into FvMap file\r
     //\r
+WriteTeMap:\r
     WriteMapFile (\r
       FvMapFile, \r
       FileName, \r
@@ -2645,16 +2652,18 @@ Returns:
   //\r
   // module information output\r
   //\r
-  if (FileGuidName != NULL) {\r
-    fprintf (FvMapFile, "%s (", KeyWord);\r
-    fprintf (FvMapFile, "BaseAddress=%08lx, ", ImageBaseAddress + Offset);\r
-    fprintf (FvMapFile, "EntryPoint=%08lx, ", ImageBaseAddress + AddressOfEntryPoint);\r
-    fprintf (FvMapFile, "GUID=%s)\n\n", FileGuidName);\r
+  if (ImageBaseAddress == 0) {\r
+    fprintf (FvMapFile, "%s (dummy) (", KeyWord);\r
+    fprintf (FvMapFile, "BaseAddress=%08lx, ", ImageBaseAddress);\r
   } else {\r
     fprintf (FvMapFile, "%s (", KeyWord);\r
     fprintf (FvMapFile, "BaseAddress=%08lx, ", ImageBaseAddress + Offset);\r
-    fprintf (FvMapFile, "EntryPoint=%08lx)", ImageBaseAddress + AddressOfEntryPoint);\r
   }\r
+  fprintf (FvMapFile, "EntryPoint=%08lx, ", ImageBaseAddress + AddressOfEntryPoint);\r
+  if (FileGuidName != NULL) {\r
+    fprintf (FvMapFile, "GUID=%s", FileGuidName);\r
+  }\r
+  fprintf (FvMapFile, ")\n\n");\r
 \r
   while (fgets (Line, MAX_LINE_LEN, PeMapFile) != NULL) {\r
     //\r