From 5b5481526fc9b89e5f3843d9bb3d6c4f5ce41060 Mon Sep 17 00:00:00 2001 From: Yuwei Chen Date: Thu, 29 Jun 2023 11:34:20 +0800 Subject: [PATCH] BaseTools: fixing FMMT ShrinkFv issue 1. FvLength not change issue; 2. FileSystemGuid align with File Size; Cc: Rebecca Cran Cc: Liming Gao Cc: Bob Feng Signed-off-by: Yuwei Chen Reviewed-by: Liming Gao Reviewed-by: Bob Feng --- BaseTools/Source/Python/FMMT/core/FMMTOperation.py | 2 +- BaseTools/Source/Python/FMMT/core/FvHandler.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/Python/FMMT/core/FMMTOperation.py b/BaseTools/Source/Python/FMMT/core/FMMTOperation.py index a86f8dda9a..d4aa339703 100644 --- a/BaseTools/Source/Python/FMMT/core/FMMTOperation.py +++ b/BaseTools/Source/Python/FMMT/core/FMMTOperation.py @@ -188,7 +188,7 @@ def ExtractFfs(inputfile: str, Ffs_name: str, outputfile: str, Fv_name: str=None FmmtParser.WholeFvTree.Findlist.remove(FmmtParser.WholeFvTree.Findlist[index]) if FmmtParser.WholeFvTree.Findlist != []: TargetNode = FmmtParser.WholeFvTree.Findlist[0] - if TargetNode.type == FV_TREE or SEC_FV_TREE or DATA_FV_TREE: + if TargetNode.type == FV_TREE or TargetNode.type == SEC_FV_TREE or TargetNode.type == DATA_FV_TREE: FinalData = struct2stream(TargetNode.Data.Header) + TargetNode.Data.Data with open(outputfile, "wb") as f: f.write(FinalData) diff --git a/BaseTools/Source/Python/FMMT/core/FvHandler.py b/BaseTools/Source/Python/FMMT/core/FvHandler.py index c7aca95bf2..7a60760336 100644 --- a/BaseTools/Source/Python/FMMT/core/FvHandler.py +++ b/BaseTools/Source/Python/FMMT/core/FvHandler.py @@ -279,7 +279,7 @@ def ModifyTest(self, ParTree, Needed_Space: int) -> None: ParTree.Child.remove(ParTree.Child[-1]) ParTree.Data.Free_Space = 0 ParTree.Data.Size += Needed_Space - ParTree.Data.Header.Fvlength = ParTree.Data.Size + ParTree.Data.Header.FvLength = ParTree.Data.Size ModifyFvSystemGuid(ParTree) for item in ParTree.Child: if item.type == FFS_FREE_SPACE: @@ -663,8 +663,12 @@ def ShrinkFv(self) -> bool: Removed_Space = TargetFv.Data.Free_Space - New_Free_Space TargetFv.Child[-1].Data.Data = b'\xff' * New_Free_Space TargetFv.Data.Size -= Removed_Space - TargetFv.Data.Header.Fvlength = TargetFv.Data.Size - ModifyFvSystemGuid(TargetFv) + TargetFv.Data.Header.FvLength = TargetFv.Data.Size + if struct2stream(TargetFv.Data.Header.FileSystemGuid) == EFI_FIRMWARE_FILE_SYSTEM3_GUID_BYTE: + if TargetFv.Data.Size <= 0xFFFFFF: + TargetFv.Data.Header.FileSystemGuid = ModifyGuidFormat( + "8c8ce578-8a3d-4f1c-9935-896185c32dd3") + for item in TargetFv.Child: if item.type == FFS_FREE_SPACE: TargetFv.Data.Data += item.Data.Data + item.Data.PadData