]>
Commit | Line | Data |
---|---|---|
597cb96f | 1 | diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c b/BaseTools/Source/C/GenFv/GenFvInternalLib.c |
2 | old mode 100644 | |
3 | new mode 100755 | |
4 | index 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 |