]>
Commit | Line | Data |
---|---|---|
09bb585c | 1 | Index: BaseTools/Conf/build_rule.template |
2 | =================================================================== | |
720b0d88 | 3 | --- BaseTools/Conf/build_rule.template (revision 12691) |
09bb585c | 4 | +++ BaseTools/Conf/build_rule.template (working copy) |
9703e347 | 5 | @@ -129,7 +129,7 @@ |
6 | "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r | |
7 | "$(SYMRENAME)" $(SYMRENAME_FLAGS) ${dst}\r | |
8 | \r | |
9 | - <Command.ARMGCC>\r | |
10 | + <Command.ARMGCC, Command.ARMLINUXGCC>\r | |
11 | "$(CC)" $(CC_FLAGS) -o ${dst} $(INC) ${src}\r | |
12 | \r | |
13 | \r | |
14 | @@ -217,7 +217,7 @@ | |
15 | <Command.RVCT>\r | |
16 | "$(SLINK)" $(SLINK_FLAGS) ${dst} --via $(OBJECT_FILES_LIST)\r | |
17 | \r | |
18 | - <Command.RVCTCYGWIN, Command.ARMGCC>\r | |
19 | + <Command.RVCTCYGWIN, Command.ARMGCC, Command.ARMLINUXGCC>\r | |
20 | # $(OBJECT_FILES_LIST) has wrong paths for cygwin\r | |
21 | "$(SLINK)" $(SLINK_FLAGS) ${dst} $(OBJECT_FILES)\r | |
22 | \r | |
23 | @@ -241,7 +241,7 @@ | |
24 | "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r | |
25 | "$(OBJCOPY)" $(OBJCOPY_FLAGS) ${dst}\r | |
26 | \r | |
27 | - <Command.ARMGCC>\r | |
28 | + <Command.ARMGCC, Command.ARMLINUXGCC>\r | |
29 | "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r | |
30 | \r | |
31 | <Command.RVCT>\r | |
32 | @@ -271,7 +271,7 @@ | |
33 | <Command.GCC>\r | |
34 | "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) @$(STATIC_LIBRARY_FILES_LIST) -\) $(DLINK2_FLAGS)\r | |
35 | \r | |
36 | - <Command.ARMGCC>\r | |
37 | + <Command.ARMGCC, Command.ARMLINUXGCC>\r | |
38 | "$(DLINK)" $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(STATIC_LIBRARY_FILES) -\) $(DLINK2_FLAGS)\r | |
39 | \r | |
40 | <Command.RVCT>\r | |
41 | @@ -292,7 +292,7 @@ | |
42 | <OutputFile>\r | |
43 | $(DEBUG_DIR)(+)$(MODULE_NAME).efi\r | |
44 | \r | |
45 | - <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC> \r | |
46 | + <Command.MSFT, Command.INTEL, Command.RVCT, Command.ARMGCC, Command.ARMLINUXGCC> \r | |
47 | "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)\r | |
48 | $(CP) ${dst} $(OUTPUT_DIR)\r | |
49 | $(CP) ${dst} $(BIN_DIR)\r | |
50 | @@ -536,7 +536,7 @@ | |
51 | "$(GENFW)" -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) $(GENFW_FLAGS)\r | |
52 | "$(RC)" $(RC_FLAGS) $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc ${dst}\r | |
53 | \r | |
54 | - <Command.XCODE, Command.RVCT, Command.ARMGCC> \r | |
55 | + <Command.XCODE, Command.RVCT, Command.ARMGCC, Command.ARMLINUXGCC> \r | |
56 | GenFw -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES)\r | |
57 | \r | |
58 | \r | |
09bb585c | 59 | Index: BaseTools/Conf/tools_def.template |
60 | =================================================================== | |
720b0d88 | 61 | --- BaseTools/Conf/tools_def.template (revision 12691) |
09bb585c | 62 | +++ BaseTools/Conf/tools_def.template (working copy) |
63 | @@ -467,6 +467,7 @@ | |
64 | # MSFT - Microsoft\r | |
65 | # GCC - GNU GCC\r | |
66 | # INTEL - INTEL\r | |
67 | +# RVCT - ARM RealView Toolchain\r | |
9703e347 | 68 | ####################################################################################\r |
597cb96f | 69 | ####################################################################################\r |
597cb96f | 70 | #\r |
09bb585c | 71 | @@ -4173,11 +4174,69 @@ |
72 | *_ARMGCC_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -x c -E -P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h\r | |
9703e347 | 73 | \r |
597cb96f | 74 | *_ARMGCC_ARM_SLINK_FLAGS = -rc\r |
09bb585c | 75 | -*_ARMGCC_ARM_DLINK_FLAGS = $(ARCHDLINK_FLAGS) --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r |
76 | +*_ARMGCC_ARM_DLINK_FLAGS = $(ARCHDLINK_FLAGS) -Ttext=0x0 --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r | |
77 | \r | |
78 | DEBUG_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -combine -O0\r | |
79 | RELEASE_ARMGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -combine -Wno-unused\r | |
597cb96f | 80 | \r |
9703e347 | 81 | +####################################################################################\r |
82 | +#\r | |
83 | +# ARM GNU/Linux GCC\r | |
84 | +#\r | |
85 | +####################################################################################\r | |
86 | +# ARMLINUXGCC - ARM version of the GCC cross compiler\r | |
87 | +\r | |
88 | +*_ARMLINUXGCC_*_*_FAMILY = GCC\r | |
89 | +*_ARMLINUXGCC_*_*_BUILDRULEFAMILY = ARMLINUXGCC\r | |
90 | +\r | |
91 | +*_ARMLINUXGCC_*_MAKE_PATH = make\r | |
92 | +*_ARMLINUXGCC_*_MAKE_FLAGS = --no-print-directory\r | |
93 | +\r | |
94 | +##################\r | |
95 | +# ASL definitions\r | |
96 | +##################\r | |
97 | +*_ARMLINUXGCC_*_ASL_PATH = DEF(UNIX_IASL_BIN)\r | |
98 | +*_ARMLINUXGCC_*_ASL_FLAGS = DEF(IASL_FLAGS)\r | |
99 | +*_ARMLINUXGCC_*_ASL_OUTFLAGS = DEF(IASL_OUTFLAGS)\r | |
100 | +*_ARMLINUXGCC_*_ASLPP_FLAGS = -x c -E -P\r | |
101 | +*_ARMLINUXGCC_*_ASLCC_FLAGS = -x c\r | |
102 | +*_ARMLINUXGCC_*_ASLDLINK_FLAGS = DEF(GCC_DLINK_FLAGS_COMMON) --entry _ReferenceAcpiTable\r | |
103 | +\r | |
104 | +##################\r | |
105 | +# ARM definitions\r | |
106 | +##################\r | |
107 | +\r | |
108 | +*_ARMLINUXGCC_ARM_ASLCC_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r | |
109 | +*_ARMLINUXGCC_ARM_ASLDLINK_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ld\r | |
110 | +*_ARMLINUXGCC_ARM_ASLPP_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r | |
111 | +\r | |
112 | +*_ARMLINUXGCC_ARM_CC_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r | |
113 | +*_ARMLINUXGCC_ARM_SLINK_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ar\r | |
114 | +*_ARMLINUXGCC_ARM_DLINK_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-ld\r | |
115 | +*_ARMLINUXGCC_ARM_ASM_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-as\r | |
116 | +*_ARMLINUXGCC_ARM_PP_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r | |
117 | +*_ARMLINUXGCC_ARM_VFRPP_PATH = ENV(ARMLINUXGCC_TOOLS_PATH)arm-linux-gnueabi-gcc\r | |
118 | +\r | |
119 | +#\r | |
120 | +# Use default values, or override in DSC file\r | |
121 | +#\r | |
122 | +*_ARMLINUXGCC_ARM_ARCHCC_FLAGS = -mthumb\r | |
123 | +*_ARMLINUXGCC_ARM_ARCHASM_FLAGS = \r | |
124 | +*_ARMLINUXGCC_ARM_ARCHDLINK_FLAGS =\r | |
125 | +*_ARMLINUXGCC_ARM_PLATFORM_FLAGS = -march=armv7-a\r | |
126 | +\r | |
127 | + DEBUG_ARMLINUXGCC_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -mlittle-endian -g\r | |
128 | +RELEASE_ARMLINUXGCC_ARM_ASM_FLAGS = $(ARCHASM_FLAGS) $(PLATFORM_FLAGS) -mlittle-endian\r | |
129 | +\r | |
130 | +*_ARMLINUXGCC_ARM_PP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -E -x assembler-with-cpp -include $(DEST_DIR_DEBUG)/AutoGen.h\r | |
131 | +*_ARMLINUXGCC_ARM_VFRPP_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) -x c -E -P -DVFRCOMPILE --include $(DEST_DIR_DEBUG)/$(MODULE_NAME)StrDefs.h\r | |
132 | +\r | |
133 | +*_ARMLINUXGCC_ARM_SLINK_FLAGS = -rc\r | |
09bb585c | 134 | +*_ARMLINUXGCC_ARM_DLINK_FLAGS = $(ARCHDLINK_FLAGS) -Ttext=0x0 --oformat=elf32-littlearm --emit-relocs -nostdlib -u $(IMAGE_ENTRY_POINT) -e $(IMAGE_ENTRY_POINT) -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map\r |
9703e347 | 135 | +\r |
136 | + DEBUG_ARMLINUXGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -Wno-address -O0\r | |
137 | +RELEASE_ARMLINUXGCC_ARM_CC_FLAGS = $(ARCHCC_FLAGS) $(PLATFORM_FLAGS) DEF(GCC_ARMGCC_CC_FLAGS) -Wno-address -Wno-unused-but-set-variable\r | |
09bb585c | 138 | +\r |
597cb96f | 139 | #################\r |
140 | # ASM 16 linker defintions\r | |
09bb585c | 141 | #################\r |
142 | Index: BaseTools/Source/Python/Workspace/MetaFileParser.py | |
143 | =================================================================== | |
720b0d88 | 144 | --- BaseTools/Source/Python/Workspace/MetaFileParser.py (revision 12691) |
09bb585c | 145 | +++ BaseTools/Source/Python/Workspace/MetaFileParser.py (working copy) |
146 | @@ -1280,6 +1280,9 @@ | |
147 | Records = IncludedFileTable.GetAll() | |
148 | if Records: | |
149 | self._Content[self._ContentIndex:self._ContentIndex] = Records | |
150 | + self._Content.pop(self._ContentIndex-1) | |
151 | + self._ValueList = None | |
152 | + self._ContentIndex -= 1 | |
153 | ||
154 | def __ProcessSkuId(self): | |
155 | self._ValueList = [ReplaceMacro(Value, self._Macros, RaiseError=True) | |
156 | Index: BaseTools/Source/Python/Workspace/WorkspaceDatabase.py | |
157 | =================================================================== | |
720b0d88 | 158 | --- BaseTools/Source/Python/Workspace/WorkspaceDatabase.py (revision 12691) |
09bb585c | 159 | +++ BaseTools/Source/Python/Workspace/WorkspaceDatabase.py (working copy) |
160 | @@ -2319,7 +2319,7 @@ | |
161 | # @param GlobalMacros Global macros used for replacement during file parsing\r | |
162 | # @prarm RenewDb=False Create new database file if it's already there\r | |
163 | #\r | |
164 | - def __init__(self, DbPath, RenewDb=False):\r | |
165 | + def __init__(self, DbPath, RenewDb=False, DbSignature={}):\r | |
166 | self._DbClosedFlag = False\r | |
167 | if not DbPath:\r | |
168 | DbPath = os.path.normpath(os.path.join(GlobalData.gWorkspace, self._DB_PATH_))\r | |
169 | @@ -2331,7 +2331,7 @@ | |
170 | os.makedirs(DbDir)\r | |
171 | \r | |
172 | # remove db file in case inconsistency between db and file in file system\r | |
173 | - if self._CheckWhetherDbNeedRenew(RenewDb, DbPath):\r | |
174 | + if self._CheckWhetherDbNeedRenew(RenewDb, DbPath, DbSignature):\r | |
175 | os.remove(DbPath)\r | |
176 | \r | |
177 | # create db with optimized parameters\r | |
178 | @@ -2367,7 +2367,38 @@ | |
179 | #\r | |
180 | # @return Bool value for whether need renew workspace databse\r | |
181 | #\r | |
182 | - def _CheckWhetherDbNeedRenew (self, force, DbPath):\r | |
183 | + def _CheckWhetherDbNeedRenew (self, force, DbPath, DbSignature):\r | |
184 | + DbDir = os.path.split(DbPath)[0]\r | |
185 | + MacroFilePath = os.path.normpath(os.path.join(DbDir, "build.mac"))\r | |
186 | + MacroMatch = False\r | |
187 | + if os.path.exists(MacroFilePath) and os.path.isfile(MacroFilePath):\r | |
188 | + LastMacros = None\r | |
189 | + try:\r | |
190 | + f = open(MacroFilePath,'r')\r | |
191 | + LastMacros = pickle.load(f)\r | |
192 | + f.close()\r | |
193 | + except IOError:\r | |
194 | + pass\r | |
195 | + except:\r | |
196 | + f.close()\r | |
197 | +\r | |
198 | + if LastMacros != None and type(LastMacros) is DictType:\r | |
199 | + if LastMacros == DbSignature:\r | |
200 | + MacroMatch = True\r | |
201 | +\r | |
202 | + if not MacroMatch:\r | |
203 | + # save command line macros to file\r | |
204 | + try:\r | |
205 | + f = open(MacroFilePath,'w')\r | |
206 | + pickle.dump(DbSignature, f, 2)\r | |
207 | + f.close()\r | |
208 | + except IOError:\r | |
209 | + pass\r | |
210 | + except:\r | |
211 | + f.close()\r | |
212 | +\r | |
213 | + force = True\r | |
214 | +\r | |
215 | # if database does not exist, we need do nothing\r | |
216 | if not os.path.exists(DbPath): return False\r | |
217 | \r | |
218 | Index: BaseTools/Source/Python/build/build.py | |
219 | =================================================================== | |
720b0d88 | 220 | --- BaseTools/Source/Python/build/build.py (revision 12691) |
09bb585c | 221 | +++ BaseTools/Source/Python/build/build.py (working copy) |
222 | @@ -704,6 +704,8 @@ | |
223 | #\r | |
224 | def __init__(self, Target, WorkspaceDir, BuildOptions):\r | |
225 | self.WorkspaceDir = WorkspaceDir\r | |
226 | + DbSignature = {'Target': Target, 'BuildOptions': BuildOptions }\r | |
227 | + \r | |
228 | self.Target = Target\r | |
229 | self.PlatformFile = BuildOptions.PlatformFile\r | |
230 | self.ModuleFile = BuildOptions.ModuleFile\r | |
231 | @@ -726,7 +728,7 @@ | |
232 | if BuildOptions.DisableCache:\r | |
233 | self.Db = WorkspaceDatabase(":memory:")\r | |
234 | else:\r | |
235 | - self.Db = WorkspaceDatabase(None, self.Reparse)\r | |
236 | + self.Db = WorkspaceDatabase(None, self.Reparse, DbSignature)\r | |
237 | self.BuildDatabase = self.Db.BuildObject\r | |
238 | self.Platform = None\r | |
239 | self.LoadFixAddress = 0\r | |
720b0d88 | 240 | Index: BaseTools/Source/Python/Trim/Trim.py |
241 | =================================================================== | |
242 | --- BaseTools/Source/Python/Trim/Trim.py (revision 12691) | |
243 | +++ BaseTools/Source/Python/Trim/Trim.py (working copy) | |
244 | @@ -37,7 +37,9 @@ | |
245 | ## Regular expression for matching "#pragma pack" | |
246 | gPragmaPattern = re.compile("^\s*#pragma\s+pack", re.MULTILINE) | |
247 | ## Regular expression for matching HEX number | |
248 | -gHexNumberPattern = re.compile("0[xX]([0-9a-fA-F]+)") | |
249 | +gHexNumberPattern = re.compile("(0[xX])([0-9a-fA-F]+)U?") | |
250 | +## Regular expression for matching decimal number | |
251 | +gDecNumberPattern = re.compile("([0-9]+)U?") | |
252 | ## Regular expression for matching "Include ()" in asl file | |
253 | gAslIncludePattern = re.compile("^(\s*)[iI]nclude\s*\(\"?([^\"\(\)]+)\"\)", re.MULTILINE) | |
254 | ## Regular expression for matching C style #include "XXX.asl" in asl file | |
255 | @@ -169,10 +171,15 @@ | |
256 | ||
257 | # convert HEX number format if indicated | |
258 | if ConvertHex: | |
259 | - Line = gHexNumberPattern.sub(r"0\1h", Line) | |
260 | + Line = gHexNumberPattern.sub(r"0\2h", Line) | |
261 | + else: | |
262 | + Line = gHexNumberPattern.sub(r"\1\2", Line) | |
263 | if TrimLong: | |
264 | Line = gLongNumberPattern.sub(r"\1", Line) | |
265 | ||
266 | + # convert Decimal number format | |
267 | + Line = gDecNumberPattern.sub(r"\1", Line) | |
268 | + | |
269 | if LineNumber != None: | |
270 | EdkLogger.verbose("Got line directive: line=%d" % LineNumber) | |
271 | # in case preprocessor removed some lines, like blank or comment lines | |
09bb585c | 272 | Index: BaseTools/Source/C/GenFv/GenFv.c |
273 | =================================================================== | |
720b0d88 | 274 | --- BaseTools/Source/C/GenFv/GenFv.c (revision 12691) |
09bb585c | 275 | +++ BaseTools/Source/C/GenFv/GenFv.c (working copy) |
276 | @@ -623,12 +623,7 @@ | |
597cb96f | 277 | );\r |
278 | } else {\r | |
279 | VerboseMsg ("Create Fv image and its map file");\r | |
09bb585c | 280 | - //\r |
281 | - // Will take rebase action at below situation:\r | |
282 | - // 1. ForceRebase Flag specified to TRUE;\r | |
283 | - // 2. ForceRebase Flag not specified, BaseAddress greater than zero.\r | |
284 | - //\r | |
285 | - if (((mFvDataInfo.BaseAddress > 0) && (mFvDataInfo.ForceRebase == -1)) || (mFvDataInfo.ForceRebase == 1)) {\r | |
597cb96f | 286 | + if (mFvDataInfo.BaseAddressSet) {\r |
287 | VerboseMsg ("FvImage Rebase Address is 0x%llX", (unsigned long long) mFvDataInfo.BaseAddress);\r | |
288 | }\r | |
289 | //\r | |
09bb585c | 290 | Index: BaseTools/Source/C/GenFv/GenFvInternalLib.c |
291 | =================================================================== | |
720b0d88 | 292 | --- BaseTools/Source/C/GenFv/GenFvInternalLib.c (revision 12691) |
09bb585c | 293 | +++ BaseTools/Source/C/GenFv/GenFvInternalLib.c (working copy) |
294 | @@ -506,6 +506,7 @@ | |
597cb96f | 295 | \r |
296 | EFI_STATUS\r | |
297 | AddPadFile (\r | |
298 | + IN FV_INFO *FvInfo,\r | |
299 | IN OUT MEMORY_FILE *FvImage,\r | |
300 | IN UINT32 DataAlignment,\r | |
301 | IN VOID *FvEnd,\r | |
09bb585c | 302 | @@ -537,6 +538,8 @@ |
597cb96f | 303 | {\r |
304 | EFI_FFS_FILE_HEADER *PadFile;\r | |
305 | UINTN PadFileSize;\r | |
306 | + UINTN PadFileOffset;\r | |
307 | + UINTN ExtHeaderSize;\r | |
308 | \r | |
309 | //\r | |
310 | // Verify input parameters.\r | |
09bb585c | 311 | @@ -559,32 +562,29 @@ |
597cb96f | 312 | // This is the earliest possible valid offset (current plus pad file header\r |
313 | // plus the next file header)\r | |
314 | //\r | |
315 | - PadFileSize = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage + (sizeof (EFI_FFS_FILE_HEADER) * 2);\r | |
316 | + // The padding is added into its own FFS file (which requires a header) added before the aligned file:\r | |
317 | + // | ... FV data before AlignedFile ... | Pad File FFS Header | Padding | AlignedFile FFS Header (+ ExtHeader) | AlignedData\r | |
318 | \r | |
319 | //\r | |
320 | - // Add whatever it takes to get to the next aligned address\r | |
321 | + // Calculate the Offset of the Pad File from the beginning of the FV file\r | |
322 | //\r | |
323 | - while ((PadFileSize % DataAlignment) != 0) {\r | |
324 | - PadFileSize++;\r | |
325 | - }\r | |
326 | - //\r | |
327 | - // Subtract the next file header size\r | |
328 | - //\r | |
329 | - PadFileSize -= sizeof (EFI_FFS_FILE_HEADER);\r | |
330 | -\r | |
331 | - //\r | |
332 | - // Subtract the starting offset to get size\r | |
333 | - //\r | |
334 | - PadFileSize -= (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage;\r | |
335 | + PadFileOffset = (UINTN) FvImage->CurrentFilePointer - (UINTN) FvImage->FileImage;\r | |
336 | \r | |
337 | //\r | |
338 | - // Append extension header size\r | |
339 | + // Get the size of the extension header if exists\r | |
340 | //\r | |
341 | if (ExtHeader != NULL) {\r | |
342 | - PadFileSize = PadFileSize + ExtHeader->ExtHeaderSize;\r | |
343 | + ExtHeaderSize = ExtHeader->ExtHeaderSize;\r | |
344 | + } else {\r | |
345 | + ExtHeaderSize = 0;\r | |
346 | }\r | |
347 | \r | |
348 | //\r | |
349 | + // Calculate the Size of the Padding to ensure the alignment of the data of the Next file\r | |
350 | + //\r | |
351 | + PadFileSize = DataAlignment - ((FvInfo->BaseAddress + PadFileOffset + sizeof (EFI_FFS_FILE_HEADER) + ExtHeaderSize) & (DataAlignment - 1));\r | |
352 | +\r | |
353 | + //\r | |
354 | // Verify that we have enough space for the file header\r | |
355 | //\r | |
356 | if (((UINTN) FvImage->CurrentFilePointer + PadFileSize) > (UINTN) FvEnd) {\r | |
09bb585c | 357 | @@ -1115,7 +1115,7 @@ |
597cb96f | 358 | //\r |
359 | // Add pad file if necessary\r | |
360 | //\r | |
361 | - Status = AddPadFile (FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL);\r | |
362 | + Status = AddPadFile (FvInfo, FvImage, 1 << CurrentFileAlignment, *VtfFileImage, NULL);\r | |
363 | if (EFI_ERROR (Status)) {\r | |
364 | Error (NULL, 0, 4002, "Resource", "FV space is full, could not add pad file for data alignment property.");\r | |
365 | free (FileBuffer);\r | |
09bb585c | 366 | @@ -2304,7 +2304,7 @@ |
597cb96f | 367 | //\r |
368 | // Add FV Extended Header contents to the FV as a PAD file\r | |
369 | //\r | |
370 | - AddPadFile (&FvImageMemoryFile, 4, VtfFileImage, FvExtHeader);\r | |
371 | + AddPadFile (&mFvDataInfo, &FvImageMemoryFile, 4, VtfFileImage, FvExtHeader);\r | |
372 | \r | |
373 | //\r | |
374 | // Fv Extension header change update Fv Header Check sum\r | |
09bb585c | 375 | @@ -2825,20 +2825,12 @@ |
376 | PeFileBuffer = NULL;\r | |
377 | \r | |
597cb96f | 378 | //\r |
09bb585c | 379 | - // Don't need to relocate image when BaseAddress is zero and no ForceRebase Flag specified.\r |
380 | + // Don't need to relocate image when BaseAddress is not set.\r | |
597cb96f | 381 | //\r |
09bb585c | 382 | - if ((FvInfo->BaseAddress == 0) && (FvInfo->ForceRebase == -1)) {\r |
597cb96f | 383 | + if (FvInfo->BaseAddressSet == FALSE) {\r |
384 | return EFI_SUCCESS;\r | |
385 | }\r | |
09bb585c | 386 | - \r |
387 | - //\r | |
388 | - // If ForceRebase Flag specified to FALSE, will always not take rebase action.\r | |
389 | - //\r | |
390 | - if (FvInfo->ForceRebase == 0) {\r | |
391 | - return EFI_SUCCESS;\r | |
392 | - }\r | |
393 | \r | |
394 | -\r | |
597cb96f | 395 | XipBase = FvInfo->BaseAddress + XipOffset;\r |
09bb585c | 396 | \r |
397 | //\r |