mirror of
https://github.com/tianocore/edk2
synced 2026-08-27 00:23:19 -04:00
BaseTools: Fix FMMT FvHandler Padding operation issue
When using the FMMT FvHandler function, new padding size should be calculated correctly comparing with origin ffs and new ffs, else it will cause the binary size changes. This patch is used to fix the bug. Signed-off-by: Yuwei Chen <yuwei.chen@intel.com>
This commit is contained in:
parent
491530abaa
commit
a60334ad59
1 changed files with 22 additions and 4 deletions
|
|
@ -237,11 +237,20 @@ class FvHandler:
|
|||
Size_delta = len(CompressedData) - len(TargetTree.Data.OriData)
|
||||
ChangeSize(TargetTree, -Size_delta)
|
||||
if TargetTree.NextRel:
|
||||
Original_Pad_Size = len(TargetTree.Data.PadData)
|
||||
TargetTree.Data.PadData = b'\x00' * New_Pad_Size
|
||||
self.Remain_New_Free_Space = len(TargetTree.Data.OriData) + len(TargetTree.Data.PadData) - len(CompressedData) - New_Pad_Size
|
||||
self.Remain_New_Free_Space = (
|
||||
len(TargetTree.Data.OriData) +
|
||||
Original_Pad_Size -
|
||||
len(CompressedData) -
|
||||
New_Pad_Size
|
||||
)
|
||||
else:
|
||||
TargetTree.Data.PadData = b''
|
||||
self.Remain_New_Free_Space = len(TargetTree.Data.OriData) - len(CompressedData)
|
||||
self.Remain_New_Free_Space = (
|
||||
len(TargetTree.Data.OriData) -
|
||||
len(CompressedData)
|
||||
)
|
||||
TargetTree.Data.OriData = CompressedData
|
||||
elif len(CompressedData) == len(TargetTree.Data.OriData):
|
||||
TargetTree.Data.OriData = CompressedData
|
||||
|
|
@ -347,15 +356,24 @@ class FvHandler:
|
|||
ModifySectionType(ParTree)
|
||||
Needed_Space += ParTree.Data.HeaderLength - OriHeaderLen
|
||||
# Update needed space with Delta_Pad_Size
|
||||
Original_Pad_Size = len(ParTree.Data.PadData)
|
||||
if ParTree.NextRel:
|
||||
New_Pad_Size = GetPadSize(ParTree.Data.Size, SECTION_COMMON_ALIGNMENT)
|
||||
Delta_Pad_Size = New_Pad_Size - len(ParTree.Data.PadData)
|
||||
Delta_Pad_Size = New_Pad_Size - Original_Pad_Size
|
||||
ParTree.Data.PadData = b'\x00' * New_Pad_Size
|
||||
Needed_Space += Delta_Pad_Size
|
||||
else:
|
||||
ParTree.Data.PadData = b''
|
||||
if Needed_Space < 0:
|
||||
self.Remain_New_Free_Space = len(ParTree.Data.OriData) - len(CompressedData)
|
||||
if ParTree.NextRel:
|
||||
self.Remain_New_Free_Space = (
|
||||
len(ParTree.Data.OriData) + Original_Pad_Size -
|
||||
len(CompressedData) - New_Pad_Size
|
||||
)
|
||||
else:
|
||||
self.Remain_New_Free_Space = (
|
||||
len(ParTree.Data.OriData) - len(CompressedData)
|
||||
)
|
||||
# If current section is not guided section
|
||||
elif Needed_Space:
|
||||
ChangeSize(ParTree, -Needed_Space)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue