]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Add support for parseing map files generated by CLANG9 in GenFv
authorZhiguang Liu <zhiguang.liu@intel.com>
Fri, 1 Nov 2019 02:35:59 +0000 (10:35 +0800)
committerLiming Gao <liming.gao@intel.com>
Fri, 8 Nov 2019 00:29:36 +0000 (08:29 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2320

Add support for parseing map files generated by CLANG9 in GenFv

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
BaseTools/Source/C/GenFv/GenFvInternalLib.c

index 908740de505f8069527ba575636f06f04ec0f4c8..daebfe894c77b2dbf204e531e917dfd921726261 100644 (file)
@@ -791,6 +791,7 @@ Returns:
   FILE                                *PeMapFile;\r
   CHAR8                               Line [MAX_LINE_LEN];\r
   CHAR8                               KeyWord [MAX_LINE_LEN];\r
+  CHAR8                               KeyWord2 [MAX_LINE_LEN];\r
   CHAR8                               FunctionName [MAX_LINE_LEN];\r
   EFI_PHYSICAL_ADDRESS                FunctionAddress;\r
   UINT32                              FunctionType;\r
@@ -805,6 +806,7 @@ Returns:
   UINT32                              TextVirtualAddress;\r
   UINT32                              DataVirtualAddress;\r
   EFI_PHYSICAL_ADDRESS                LinkTimeBaseAddress;\r
+  BOOLEAN                             IsUseClang;\r
 \r
   //\r
   // Init local variable\r
@@ -932,6 +934,7 @@ Returns:
   // Output Functions information into Fv Map file\r
   //\r
   LinkTimeBaseAddress = 0;\r
+  IsUseClang = FALSE;\r
   while (fgets (Line, MAX_LINE_LEN, PeMapFile) != NULL) {\r
     //\r
     // Skip blank line\r
@@ -946,6 +949,12 @@ Returns:
     if (FunctionType == 0) {\r
       sscanf (Line, "%s", KeyWord);\r
       if (stricmp (KeyWord, "Address") == 0) {\r
+        sscanf (Line, "%s %s", KeyWord, KeyWord2);\r
+        if (stricmp (KeyWord2, "Size") == 0) {\r
+          IsUseClang = TRUE;\r
+          FunctionType = 1;\r
+          continue;\r
+        }\r
         //\r
         // function list\r
         //\r
@@ -967,11 +976,20 @@ Returns:
     // Printf Function Information\r
     //\r
     if (FunctionType == 1) {\r
-      sscanf (Line, "%s %s %llx %s", KeyWord, FunctionName, &TempLongAddress, FunctionTypeName);\r
-      FunctionAddress = (UINT64) TempLongAddress;\r
-      if (FunctionTypeName [1] == '\0' && (FunctionTypeName [0] == 'f' || FunctionTypeName [0] == 'F')) {\r
-        fprintf (FvMapFile, "  0x%010llx    ", (unsigned long long) (ImageBaseAddress + FunctionAddress - LinkTimeBaseAddress));\r
-        fprintf (FvMapFile, "%s\n", FunctionName);\r
+      if (IsUseClang) {\r
+        sscanf (Line, "%llx %s %s %s", &TempLongAddress, KeyWord, KeyWord2, FunctionTypeName);\r
+        FunctionAddress = (UINT64) TempLongAddress;\r
+        if (FunctionTypeName [0] == '_' ) {\r
+          fprintf (FvMapFile, "  0x%010llx    ", (unsigned long long) (ImageBaseAddress + FunctionAddress - LinkTimeBaseAddress));\r
+          fprintf (FvMapFile, "%s\n", FunctionTypeName);\r
+        }\r
+      } else {\r
+        sscanf (Line, "%s %s %llx %s", KeyWord, FunctionName, &TempLongAddress, FunctionTypeName);\r
+        FunctionAddress = (UINT64) TempLongAddress;\r
+        if (FunctionTypeName [1] == '\0' && (FunctionTypeName [0] == 'f' || FunctionTypeName [0] == 'F')) {\r
+          fprintf (FvMapFile, "  0x%010llx    ", (unsigned long long) (ImageBaseAddress + FunctionAddress - LinkTimeBaseAddress));\r
+          fprintf (FvMapFile, "%s\n", FunctionName);\r
+        }\r
       }\r
     } else if (FunctionType == 2) {\r
       sscanf (Line, "%s %s %llx %s", KeyWord, FunctionName, &TempLongAddress, FunctionTypeName);\r