Reviewed-by: Liming Gao <[email protected]>

-----Original Message-----
From: edk2-devel [mailto:[email protected]] On Behalf Of Yonghong 
Zhu
Sent: Wednesday, December 02, 2015 4:46 PM
To: [email protected]
Subject: [edk2] [Patch] BaseTools: Enhance GenFv Tool to report error message

When two vtf files in one FV image, no FV file can be generated, but it report 
the stack trace info. so we enhance the tool to report error message directly 
but not the stack trace info.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Yonghong Zhu <[email protected]>
---
 Source/C/GenFv/GenFvInternalLib.c | 23 +++++++++++----------
 Source/Python/GenFds/Fv.py        | 43 +++++++++++++++++++++------------------
 2 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/Source/C/GenFv/GenFvInternalLib.c 
b/Source/C/GenFv/GenFvInternalLib.c
index 6d2d5d1..10bb88b 100644
--- a/Source/C/GenFv/GenFvInternalLib.c
+++ b/Source/C/GenFv/GenFvInternalLib.c
@@ -2852,21 +2852,22 @@ Returns:
     // close file
     //
     fclose (fpin);
     
     if (FvInfoPtr->IsPiFvImage) {
-           //
-           // Check whether this ffs file is vtf file
-           //
-           if (IsVtfFile (&FfsHeader)) {
-             if (VtfFileFlag) {
-               //
-               // One Fv image can't have two vtf files.
-               //
-               return EFI_ABORTED;
-             }
-             VtfFileFlag = TRUE;
+        //
+        // Check whether this ffs file is vtf file
+        //
+        if (IsVtfFile (&FfsHeader)) {
+          if (VtfFileFlag) {
+            //
+            // One Fv image can't have two vtf files.
+            //
+            Error (NULL, 0, 3000,"Invalid", "One Fv image can't have two vtf 
files.");
+            return EFI_ABORTED;
+          }
+          VtfFileFlag = TRUE;
         VtfFileSize = FfsFileSize;
         continue;
       }
 
       //
diff --git a/Source/Python/GenFds/Fv.py b/Source/Python/GenFds/Fv.py index 
163ccd3..df97ccb 100644
--- a/Source/Python/GenFds/Fv.py
+++ b/Source/Python/GenFds/Fv.py
@@ -179,34 +179,37 @@ class FV (FvClassObject):
                                         )
 
         #
         # Write the Fv contents to Buffer
         #
-        FvFileObj = open ( FvOutputFile,'r+b')
+        if os.path.isfile(FvOutputFile):
+            FvFileObj = open ( FvOutputFile,'r+b')
 
-        GenFdsGlobalVariable.VerboseLogger( "\nGenerate %s FV Successfully" 
%self.UiFvName)
-        GenFdsGlobalVariable.SharpCounter = 0
+            GenFdsGlobalVariable.VerboseLogger( "\nGenerate %s FV 
Successfully" %self.UiFvName)
+            GenFdsGlobalVariable.SharpCounter = 0
 
-        Buffer.write(FvFileObj.read())
-        FvFileObj.seek(0)
-        # PI FvHeader is 0x48 byte
-        FvHeaderBuffer = FvFileObj.read(0x48)
-        # FV alignment position.
-        FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
-        # FvAlignmentValue is larger than or equal to 1K
-        if FvAlignmentValue >= 0x400:
-            if FvAlignmentValue >= 0x10000:
-                #The max alignment supported by FFS is 64K.
-                self.FvAlignment = "64K"
+            Buffer.write(FvFileObj.read())
+            FvFileObj.seek(0)
+            # PI FvHeader is 0x48 byte
+            FvHeaderBuffer = FvFileObj.read(0x48)
+            # FV alignment position.
+            FvAlignmentValue = 1 << (ord (FvHeaderBuffer[0x2E]) & 0x1F)
+            # FvAlignmentValue is larger than or equal to 1K
+            if FvAlignmentValue >= 0x400:
+                if FvAlignmentValue >= 0x10000:
+                    #The max alignment supported by FFS is 64K.
+                    self.FvAlignment = "64K"
+                else:
+                    self.FvAlignment = str (FvAlignmentValue / 0x400) + "K"
             else:
-                self.FvAlignment = str (FvAlignmentValue / 0x400) + "K"
+                # FvAlignmentValue is less than 1K
+                self.FvAlignment = str (FvAlignmentValue)
+            FvFileObj.close()
+            GenFds.ImageBinDict[self.UiFvName.upper() + 'fv'] = FvOutputFile
+            GenFdsGlobalVariable.LargeFileInFvFlags.pop()
         else:
-            # FvAlignmentValue is less than 1K
-            self.FvAlignment = str (FvAlignmentValue)
-        FvFileObj.close()
-        GenFds.ImageBinDict[self.UiFvName.upper() + 'fv'] = FvOutputFile
-        GenFdsGlobalVariable.LargeFileInFvFlags.pop()
+            GenFdsGlobalVariable.ErrorLogger("Failed to generate %s FV 
+ file." %self.UiFvName)
         return FvOutputFile
 
     ## _GetBlockSize()
     #
     #   Calculate FV's block size
--
2.6.1.windows.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to