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