]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenPatchPcdTable/GenPatchPcdTable.py
BaseTools: parse map file generated by Xcode on Mac
[mirror_edk2.git] / BaseTools / Source / Python / GenPatchPcdTable / GenPatchPcdTable.py
index 4452fac0406460556197a3c4aa6ec09cf213f41d..fdad5a44dc3d25cfc0fa9e255f778140095754ad 100644 (file)
@@ -5,7 +5,7 @@
 #    PCD Name    Offset in binary\r
 #    ========    ================\r
 #\r
-# Copyright (c) 2008 - 2016, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2008 - 2017, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -58,8 +58,25 @@ def parsePcdInfoFromMapFile(mapfilepath, efifilepath):
     if (firstline.startswith("Archive member included ") and\r
         firstline.endswith(" file (symbol)")):\r
         return _parseForGCC(lines, efifilepath)\r
+    if firstline.startswith("# Path:"):\r
+        return _parseForXcode(lines, efifilepath)\r
     return _parseGeneral(lines, efifilepath)\r
 \r
+def _parseForXcode(lines, efifilepath):\r
+    status = 0\r
+    pcds = []\r
+    for index, line in enumerate(lines):\r
+        line = line.strip()\r
+        if status == 0 and line == "# Symbols:":\r
+            status = 1\r
+            continue\r
+        if status == 1 and len(line) != 0:\r
+            if '_gPcd_BinaryPatch_' in line:\r
+                m = re.match('^([\da-fA-FxX]+)([\s\S]*)([_]*_gPcd_BinaryPatch_([\w]+))', line)\r
+                if m != None:\r
+                    pcds.append((m.groups(0)[3], int(m.groups(0)[0], 16)))\r
+    return pcds\r
+\r
 def _parseForGCC(lines, efifilepath):\r
     """ Parse map file generated by GCC linker """\r
     status = 0\r