Update GenFw tool to zero time/date by default
authorlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 3 Jun 2009 03:19:53 +0000 (03:19 +0000)
committerlgao4 <lgao4@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 3 Jun 2009 03:19:53 +0000 (03:19 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1614 7335b38e-4728-0410-8992-fb3ffe349368

Source/C/GenFw/GenFw.c

index ca69cf7..d8fe75f 100644 (file)
@@ -122,7 +122,8 @@ STATIC CHAR8 *mInImageName;
 STATIC\r
 EFI_STATUS\r
 ZeroDebugData (\r
-  IN OUT UINT8   *FileBuffer\r
+  IN OUT UINT8   *FileBuffer,\r
+  BOOLEAN        ZeroDebug\r
   );\r
 \r
 STATIC\r
@@ -2038,7 +2039,7 @@ Returns:
   // Zero Debug Information of Pe Image\r
   //\r
   if (OutImageType == FW_ZERO_DEBUG_IMAGE) {\r
-    Status = ZeroDebugData (FileBuffer);\r
+    Status = ZeroDebugData (FileBuffer, TRUE);\r
     if (EFI_ERROR (Status)) {\r
       Error (NULL, 0, 3000, "Invalid", "Zero DebugData Error status is 0x%lx", (UINTN) Status);\r
       goto Finish;\r
@@ -2343,12 +2344,20 @@ Returns:
     Error (NULL, 0, 3000, "Invalid", "Magic 0x%x of PeImage %s is unknown.", PeHdr->OptionalHeader.Magic, mInImageName);\r
     goto Finish;\r
   }\r
-\r
+   \r
+  //\r
+  // Zero ExceptionTable Xdata\r
+  //\r
   if (!KeepExceptionTableFlag) {\r
     SectionHeader = (EFI_IMAGE_SECTION_HEADER *)(FileBuffer + DosHdr->e_lfanew + sizeof(UINT32) + sizeof (EFI_IMAGE_FILE_HEADER) + PeHdr->FileHeader.SizeOfOptionalHeader);\r
     ZeroXdataSection(mInImageName, FileBuffer, SectionHeader, PeHdr->FileHeader.NumberOfSections);\r
   }\r
 \r
+  //\r
+  // Zero Time/Data field\r
+  //\r
+  ZeroDebugData (FileBuffer, FALSE);\r
+\r
   if (OutImageType == FW_TE_IMAGE) {\r
     if ((PeHdr->FileHeader.NumberOfSections &~0xFF) || (Type &~0xFF)) {\r
       //\r
@@ -2441,7 +2450,8 @@ Finish:
 STATIC\r
 EFI_STATUS\r
 ZeroDebugData (\r
-  IN OUT UINT8   *FileBuffer\r
+  IN OUT UINT8   *FileBuffer,\r
+  BOOLEAN        ZeroDebugFlag\r
   )\r
 /*++\r
 \r
@@ -2452,6 +2462,7 @@ Routine Description:
 Arguments:\r
 \r
   FileBuffer    - Pointer to PeImage.\r
+  ZeroDebugFlag - TRUE to zero Debug information, FALSE to only zero time/stamp\r
 \r
 Returns:\r
 \r
@@ -2502,6 +2513,10 @@ Returns:
     if (Optional32Hdr->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_DEBUG && \\r
         Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Size != 0) {\r
       DebugDirectoryEntryRva = Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;\r
+      if (ZeroDebugFlag) {\r
+        Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Size = 0;\r
+        Optional32Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress = 0;\r
+      }\r
     }\r
   } else {\r
     Optional64Hdr = (EFI_IMAGE_OPTIONAL_HEADER64 *) ((UINT8*) FileHdr + sizeof (EFI_IMAGE_FILE_HEADER));\r
@@ -2517,6 +2532,10 @@ Returns:
     if (Optional64Hdr->NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_DEBUG && \\r
         Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Size != 0) {\r
       DebugDirectoryEntryRva = Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress;\r
+      if (ZeroDebugFlag) {\r
+        Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].Size = 0;\r
+        Optional64Hdr->DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress = 0;\r
+      }\r
     }\r
   }\r
 \r
@@ -2559,7 +2578,10 @@ Returns:
   if (DebugDirectoryEntryRva != 0) {\r
     DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *) (FileBuffer + DebugDirectoryEntryFileOffset);\r
     DebugEntry->TimeDateStamp = 0;\r
-    memset (FileBuffer + DebugEntry->FileOffset, 0, DebugEntry->SizeOfData);\r
+    if (ZeroDebugFlag) {\r
+      memset (FileBuffer + DebugEntry->FileOffset, 0, DebugEntry->SizeOfData);\r
+      memset (DebugEntry, 0, sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY));\r
+    }\r
   }\r
 \r
   return EFI_SUCCESS;\r