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
UINT32 TextVirtualAddress;\r
UINT32 DataVirtualAddress;\r
EFI_PHYSICAL_ADDRESS LinkTimeBaseAddress;\r
+ BOOLEAN IsUseClang;\r
\r
//\r
// Init local variable\r
// 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
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
// 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