]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/GenVtf/GenVtf.c
Sync tool code to BuildTools project r1739.
[mirror_edk2.git] / BaseTools / Source / C / GenVtf / GenVtf.c
index eafbcbf0023df9d7fd435445529d5239d0a89110..890cfd98fd371d7451c02ae54e1ac5ae8848af22 100644 (file)
@@ -1267,7 +1267,7 @@ Returns:
   //\r
   // Update the SYM file for this component based on it's start address.\r
   //\r
-  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName);\r
+  Status = UpdateSymFile (CompStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);\r
   if (EFI_ERROR (Status)) {\r
 \r
     //\r
@@ -1406,7 +1406,7 @@ Returns:
   //\r
   // Update the SYM file for this component based on it's start address.\r
   //\r
-  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName);\r
+  Status = UpdateSymFile (PalStartAddress, SymFileName, VtfInfo->CompSymName, FileSize);\r
   if (EFI_ERROR (Status)) {\r
 \r
     //\r
@@ -1688,7 +1688,7 @@ Returns:
   FileHeader->IntegrityCheck.Checksum.File    = 0;\r
   FileHeader->State                           = 0;\r
   FileHeader->IntegrityCheck.Checksum.Header  = CalculateChecksum8 ((UINT8 *) FileHeader, sizeof (EFI_FFS_FILE_HEADER));\r
-  FileHeader->IntegrityCheck.Checksum.File    = CalculateChecksum8 ((UINT8 *) FileHeader, TotalVtfSize);\r
+  FileHeader->IntegrityCheck.Checksum.File    = CalculateChecksum8 ((UINT8 *) (FileHeader + 1), TotalVtfSize - sizeof (EFI_FFS_FILE_HEADER));\r
   FileHeader->State                           = EFI_FILE_HEADER_CONSTRUCTION | EFI_FILE_HEADER_VALID | EFI_FILE_DATA_VALID;\r
 \r
   return EFI_SUCCESS;\r
@@ -2153,7 +2153,9 @@ EFI_STATUS
 UpdateSymFile (\r
   IN UINT64 BaseAddress,\r
   IN CHAR8  *DestFileName,\r
-  IN CHAR8  *SourceFileName\r
+  IN CHAR8  *SourceFileName,\r
+  IN UINT64 FileSize\r
+\r
   )\r
 /*++\r
 \r
@@ -2167,6 +2169,7 @@ Arguments:
   BaseAddress    - The base address for the new SYM tokens.\r
   DestFileName   - The destination file.\r
   SourceFileName - The source file.\r
+  FileSize       - Size of bin file.\r
 \r
 Returns:\r
 \r
@@ -2185,7 +2188,7 @@ Returns:
   CHAR8   Token[_MAX_PATH];\r
   CHAR8   BaseToken[_MAX_PATH];\r
   UINT64  TokenAddress;\r
-  long      StartLocation;\r
+  long    StartLocation;\r
 \r
   //\r
   // Verify input parameters.\r
@@ -2275,13 +2278,20 @@ Returns:
       // Get the token address\r
       //\r
       AsciiStringToUint64 (Address, TRUE, &TokenAddress);\r
+      if (TokenAddress > FileSize) {\r
+        //\r
+        // Symbol offset larger than FileSize. This Symbol can't be in Bin file. Don't print them.\r
+        //\r
+        break;\r
+      }\r
 \r
       //\r
       // Add the base address, the size of the FFS file header and the size of the peim header.\r
       //\r
       TokenAddress += BaseAddress &~IPF_CACHE_BIT;\r
 \r
-      fprintf (DestFile, "%s | %016llX | %s | %s%s\n", Type, (unsigned long long) TokenAddress, Section, BaseToken, Token);\r
+      fprintf (DestFile, "%s | %016llX | ", Type, (unsigned long long) TokenAddress);\r
+      fprintf (DestFile, "%s | %s\n    %s\n", Section, Token, BaseToken); \r
     }\r
   }\r
 \r