]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/Documentation/patches/BaseTools-GenFv-Calculate-Alignment-From-Fv-Offset.patch
Add description for the parameter of SafeFreePool().
[mirror_edk2.git] / ArmPlatformPkg / Documentation / patches / BaseTools-GenFv-Calculate-Alignment-From-Fv-Offset.patch
CommitLineData
597cb96f 1diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
2old mode 100644
3new mode 100755
4index 189dc43..af47709
5--- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c
6+++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c
7@@ -505,6 +505,7 @@ Returns:
8 \r
9 EFI_STATUS\r
10 AddPadFile (\r
11+ IN FV_INFO *FvInfo,\r
12 IN OUT MEMORY_FILE *FvImage,\r
13 IN UINT32 DataAlignment,\r
14 IN VOID *FvEnd,\r
15@@ -536,6 +537,8 @@ Returns:
16 {\r
17 EFI_FFS_FILE_HEADER *PadFile;\r
18 UINTN PadFileSize;\r
19+ UINTN PadFileOffset;\r
20+ UINTN ExtHeaderSize;\r
21 \r
22 //\r
23 // Verify input parameters.\r
24@@ -558,32 +561,29 @@ Returns:
25 // This is the earliest possible valid offset (current plus pad file header\r
26 // plus the next file header)\r
27 //\r
28- PadFileSize = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + (sizeof (EFI_FFS_FILE_HEADER) * 2);\r
29+ // The padding is added into its own FFS file (which requires a header) added before the aligned file:\r
30+ // | ... FV data before AlignedFile ... | Pad File FFS Header | Padding | AlignedFile FFS Header (+ ExtHeader) | AlignedData\r
31 \r
32 //\r
33- // Add whatever it takes to get to the next aligned address\r
34+ // Calculate the Offset of the Pad File from the beginning of the FV file\r
35 //\r
36- while ((PadFileSize % DataAlignment) != 0) {\r
37- PadFileSize++;\r
38- }\r
39- //\r
40- // Subtract the next file header size\r
41- //\r
42- PadFileSize -= sizeof (EFI_FFS_FILE_HEADER);\r
43-\r
44- //\r
45- // Subtract the starting offset to get size\r
46- //\r
47- PadFileSize -= (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage;\r
48+ PadFileOffset = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage;\r
49 \r
50 //\r
51- // Append extension header size\r
52+ // Get the size of the extension header if exists\r
53 //\r
54 if (ExtHeader != NULL) {\r
55- PadFileSize = PadFileSize + ExtHeader->ExtHeaderSize;\r
56+ ExtHeaderSize = ExtHeader->ExtHeaderSize;\r
57+ } else {\r
58+ ExtHeaderSize = 0;\r
59 }\r
60 \r
61 //\r
62+ // Calculate the Size of the Padding to ensure the alignment of the data of the Next file\r
63+ //\r
64+ PadFileSize = DataAlignment - ((FvInfo->BaseAddress + PadFileOffset + sizeof (EFI_FFS_FILE_HEADER) + ExtHeaderSize) & (DataAlignment - 1));\r
65+\r
66+ //\r
67 // Verify that we have enough space for the file header\r
68 //\r
69 if (((UINTN) FvImage->CurrentFilePointer + PadFileSize) > (UINTN) FvEnd) {\r
70@@ -1110,7 +1110,7 @@ Returns:
71 //\r
72 // Add pad file if necessary\r
73 //\r
74- Status = AddPadFile (FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL);\r
75+ Status = AddPadFile (FvInfo, FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL);\r
76 if (EFI_ERROR (Status)) {\r
77 Error (NULL, 0, 4002, "Resource", "FV space is full, could not add pad file for data alignment property.");\r
78 free (FileBuffer);\r
79@@ -2295,7 +2295,7 @@ Returns:
80 //\r
81 // Add FV Extended Header contents to the FV as a PAD file\r
82 //\r
83- AddPadFile (&FvImageMemoryFile, 4, VtfFileImage, FvExtHeader);\r
84+ AddPadFile (&mFvDataInfo, &FvImageMemoryFile, 4, VtfFileImage, FvExtHeader);\r
85 \r
86 //\r
87 // Fv Extension header change update Fv Header Check sum\r