diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index dbb711e96c..2a5125d72d 100644 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -67,8 +67,26 @@ def GetVariableOffset(mapfilepath, efifilepath, varnames): if (firstline.startswith("Archive member included ") and firstline.endswith(" file (symbol)")): return _parseForGCC(lines, efifilepath, varnames) + if firstline.startswith("# Path:"): + return _parseForXcode(lines, efifilepath, varnames) return _parseGeneral(lines, efifilepath, varnames) +def _parseForXcode(lines, efifilepath, varnames): + status = 0 + ret = [] + for index, line in enumerate(lines): + line = line.strip() + if status == 0 and line == "# Symbols:": + status = 1 + continue + if status == 1 and len(line) != 0: + for varname in varnames: + if varname in line: + m = re.match('^([\da-fA-FxX]+)([\s\S]*)([_]*%s)$' % varname, line) + if m != None: + ret.append((varname, m.group(1))) + return ret + def _parseForGCC(lines, efifilepath, varnames): """ Parse map file generated by GCC linker """ status = 0 diff --git a/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py index 4452fac040..fdad5a44dc 100644 --- a/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py +++ b/BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py @@ -5,7 +5,7 @@ # PCD Name Offset in binary # ======== ================ # -# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.
+# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -58,8 +58,25 @@ def parsePcdInfoFromMapFile(mapfilepath, efifilepath): if (firstline.startswith("Archive member included ") and firstline.endswith(" file (symbol)")): return _parseForGCC(lines, efifilepath) + if firstline.startswith("# Path:"): + return _parseForXcode(lines, efifilepath) return _parseGeneral(lines, efifilepath) +def _parseForXcode(lines, efifilepath): + status = 0 + pcds = [] + for index, line in enumerate(lines): + line = line.strip() + if status == 0 and line == "# Symbols:": + status = 1 + continue + if status == 1 and len(line) != 0: + if '_gPcd_BinaryPatch_' in line: + m = re.match('^([\da-fA-FxX]+)([\s\S]*)([_]*_gPcd_BinaryPatch_([\w]+))', line) + if m != None: + pcds.append((m.groups(0)[3], int(m.groups(0)[0], 16))) + return pcds + def _parseForGCC(lines, efifilepath): """ Parse map file generated by GCC linker """ status = 0