From 6e3789d7424660b14ef3d7123221c97db5d8aff5 Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Wed, 25 Apr 2018 17:24:58 +0800 Subject: Remove unused files Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Guo Mang --- BaseTools/Scripts/SmiHandlerProfileSymbolGen.py | 312 ------------------------ 1 file changed, 312 deletions(-) delete mode 100644 BaseTools/Scripts/SmiHandlerProfileSymbolGen.py (limited to 'BaseTools/Scripts/SmiHandlerProfileSymbolGen.py') diff --git a/BaseTools/Scripts/SmiHandlerProfileSymbolGen.py b/BaseTools/Scripts/SmiHandlerProfileSymbolGen.py deleted file mode 100644 index f03278b64f..0000000000 --- a/BaseTools/Scripts/SmiHandlerProfileSymbolGen.py +++ /dev/null @@ -1,312 +0,0 @@ -## -# Generate symbal for SMI handler profile info. -# -# This tool depends on DIA2Dump.exe (VS) or nm (gcc) to parse debug entry. -# -# Copyright (c) 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 that accompanies this distribution. -# The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php. -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -## - -import os -import re -import sys -from optparse import OptionParser - -from xml.dom.minidom import parse -import xml.dom.minidom - -versionNumber = "1.1" -__copyright__ = "Copyright (c) 2016, Intel Corporation. All rights reserved." - -class Symbols: - def __init__(self): - self.listLineAddress = [] - self.pdbName = "" - # Cache for function - self.functionName = "" - # Cache for line - self.sourceName = "" - - - def getSymbol (self, rva): - index = 0 - lineName = 0 - sourceName = "??" - while index + 1 < self.lineCount : - if self.listLineAddress[index][0] <= rva and self.listLineAddress[index + 1][0] > rva : - offset = rva - self.listLineAddress[index][0] - functionName = self.listLineAddress[index][1] - lineName = self.listLineAddress[index][2] - sourceName = self.listLineAddress[index][3] - if lineName == 0 : - return [functionName] - else : - return [functionName, sourceName, lineName] - index += 1 - - return [] - - def parse_debug_file(self, driverName, pdbName): - if cmp (pdbName, "") == 0 : - return - self.pdbName = pdbName; - - try: - nmCommand = "nm" - nmLineOption = "-l" - print "parsing (debug) - " + pdbName - os.system ('%s %s %s > nmDump.line.log' % (nmCommand, nmLineOption, pdbName)) - except : - print 'ERROR: nm command not available. Please verify PATH' - return - - # - # parse line - # - linefile = open("nmDump.line.log") - reportLines = linefile.readlines() - linefile.close() - - # 000113ca T AllocatePool c:\home\edk-ii\MdePkg\Library\UefiMemoryAllocationLib\MemoryAllocationLib.c:399 - patchLineFileMatchString = "([0-9a-fA-F]*)\s+[T|D|t|d]\s+(\w+)\s*((?:[a-zA-Z]:)?[\w+\-./_a-zA-Z0-9\\\\]*):?([0-9]*)" - - for reportLine in reportLines: - match = re.match(patchLineFileMatchString, reportLine) - if match is not None: - rva = int (match.group(1), 16) - functionName = match.group(2) - sourceName = match.group(3) - if cmp (match.group(4), "") != 0 : - lineName = int (match.group(4)) - else : - lineName = 0 - self.listLineAddress.append ([rva, functionName, lineName, sourceName]) - - self.lineCount = len (self.listLineAddress) - - self.listLineAddress = sorted(self.listLineAddress, key=lambda symbolAddress:symbolAddress[0]) - - def parse_pdb_file(self, driverName, pdbName): - if cmp (pdbName, "") == 0 : - return - self.pdbName = pdbName; - - try: - #DIA2DumpCommand = "\"C:\\Program Files (x86)\Microsoft Visual Studio 14.0\\DIA SDK\\Samples\\DIA2Dump\\x64\\Debug\\Dia2Dump.exe\"" - DIA2DumpCommand = "Dia2Dump.exe" - #DIA2SymbolOption = "-p" - DIA2LinesOption = "-l" - print "parsing (pdb) - " + pdbName - #os.system ('%s %s %s > DIA2Dump.symbol.log' % (DIA2DumpCommand, DIA2SymbolOption, pdbName)) - os.system ('%s %s %s > DIA2Dump.line.log' % (DIA2DumpCommand, DIA2LinesOption, pdbName)) - except : - print 'ERROR: DIA2Dump command not available. Please verify PATH' - return - - # - # parse line - # - linefile = open("DIA2Dump.line.log") - reportLines = linefile.readlines() - linefile.close() - - # ** GetDebugPrintErrorLevel - # line 32 at [0000C790][0001:0000B790], len = 0x3 c:\home\edk-ii\mdepkg\library\basedebugprinterrorlevellib\basedebugprinterrorlevellib.c (MD5: 687C0AE564079D35D56ED5D84A6164CC) - # line 36 at [0000C793][0001:0000B793], len = 0x5 - # line 37 at [0000C798][0001:0000B798], len = 0x2 - - patchLineFileMatchString = "\s+line ([0-9]+) at \[([0-9a-fA-F]{8})\]\[[0-9a-fA-F]{4}\:[0-9a-fA-F]{8}\], len = 0x[0-9a-fA-F]+\s*([\w+\-\:./_a-zA-Z0-9\\\\]*)\s*" - patchLineFileMatchStringFunc = "\*\*\s+(\w+)\s*" - - for reportLine in reportLines: - match = re.match(patchLineFileMatchString, reportLine) - if match is not None: - if cmp (match.group(3), "") != 0 : - self.sourceName = match.group(3) - sourceName = self.sourceName - functionName = self.functionName - - rva = int (match.group(2), 16) - lineName = int (match.group(1)) - self.listLineAddress.append ([rva, functionName, lineName, sourceName]) - else : - match = re.match(patchLineFileMatchStringFunc, reportLine) - if match is not None: - self.functionName = match.group(1) - - self.lineCount = len (self.listLineAddress) - self.listLineAddress = sorted(self.listLineAddress, key=lambda symbolAddress:symbolAddress[0]) - -class SymbolsFile: - def __init__(self): - self.symbolsTable = {} - -symbolsFile = "" - -driverName = "" -rvaName = "" -symbolName = "" - -def getSymbolName(driverName, rva): - global symbolsFile - - try : - symbolList = symbolsFile.symbolsTable[driverName] - if symbolList is not None: - return symbolList.getSymbol (rva) - else: - return [] - except Exception: - return [] - -def myOptionParser(): - usage = "%prog [--version] [-h] [--help] [-i inputfile [-o outputfile] [-g guidreffile]]" - Parser = OptionParser(usage=usage, description=__copyright__, version="%prog " + str(versionNumber)) - Parser.add_option("-i", "--inputfile", dest="inputfilename", type="string", help="The input memory profile info file output from MemoryProfileInfo application in MdeModulePkg") - Parser.add_option("-o", "--outputfile", dest="outputfilename", type="string", help="The output memory profile info file with symbol, MemoryProfileInfoSymbol.txt will be used if it is not specified") - Parser.add_option("-g", "--guidref", dest="guidreffilename", type="string", help="The input guid ref file output from build") - - (Options, args) = Parser.parse_args() - if Options.inputfilename is None: - Parser.error("no input file specified") - if Options.outputfilename is None: - Options.outputfilename = "SmiHandlerProfileInfoSymbol.xml" - return Options - -dictGuid = { - '00000000-0000-0000-0000-000000000000':'gZeroGuid', - '2A571201-4966-47F6-8B86-F31E41F32F10':'gEfiEventLegacyBootGuid', - '27ABF055-B1B8-4C26-8048-748F37BAA2DF':'gEfiEventExitBootServicesGuid', - '7CE88FB3-4BD7-4679-87A8-A8D8DEE50D2B':'gEfiEventReadyToBootGuid', - '02CE967A-DD7E-4FFC-9EE7-810CF0470880':'gEfiEndOfDxeEventGroupGuid', - '60FF8964-E906-41D0-AFED-F241E974E08E':'gEfiDxeSmmReadyToLockProtocolGuid', - '18A3C6DC-5EEA-48C8-A1C1-B53389F98999':'gEfiSmmSwDispatch2ProtocolGuid', - '456D2859-A84B-4E47-A2EE-3276D886997D':'gEfiSmmSxDispatch2ProtocolGuid', - '4CEC368E-8E8E-4D71-8BE1-958C45FC8A53':'gEfiSmmPeriodicTimerDispatch2ProtocolGuid', - 'EE9B8D90-C5A6-40A2-BDE2-52558D33CCA1':'gEfiSmmUsbDispatch2ProtocolGuid', - '25566B03-B577-4CBF-958C-ED663EA24380':'gEfiSmmGpiDispatch2ProtocolGuid', - '7300C4A1-43F2-4017-A51B-C81A7F40585B':'gEfiSmmStandbyButtonDispatch2ProtocolGuid', - '1B1183FA-1823-46A7-8872-9C578755409D':'gEfiSmmPowerButtonDispatch2ProtocolGuid', - '58DC368D-7BFA-4E77-ABBC-0E29418DF930':'gEfiSmmIoTrapDispatch2ProtocolGuid', - } - -def genGuidString(guidreffile): - guidLines = guidreffile.readlines() - for guidLine in guidLines: - guidLineList = guidLine.split(" ") - if len(guidLineList) == 2: - guid = guidLineList[0] - guidName = guidLineList[1] - if guid not in dictGuid.keys() : - dictGuid[guid] = guidName - -def createSym(symbolName): - SymbolNode = xml.dom.minidom.Document().createElement("Symbol") - SymbolFunction = xml.dom.minidom.Document().createElement("Function") - SymbolFunctionData = xml.dom.minidom.Document().createTextNode(symbolName[0]) - SymbolFunction.appendChild(SymbolFunctionData) - SymbolNode.appendChild(SymbolFunction) - if (len(symbolName)) >= 2: - SymbolSourceFile = xml.dom.minidom.Document().createElement("SourceFile") - SymbolSourceFileData = xml.dom.minidom.Document().createTextNode(symbolName[1]) - SymbolSourceFile.appendChild(SymbolSourceFileData) - SymbolNode.appendChild(SymbolSourceFile) - if (len(symbolName)) >= 3: - SymbolLineNumber = xml.dom.minidom.Document().createElement("LineNumber") - SymbolLineNumberData = xml.dom.minidom.Document().createTextNode(str(symbolName[2])) - SymbolLineNumber.appendChild(SymbolLineNumberData) - SymbolNode.appendChild(SymbolLineNumber) - return SymbolNode - -def main(): - global symbolsFile - global Options - Options = myOptionParser() - - symbolsFile = SymbolsFile() - - try : - DOMTree = xml.dom.minidom.parse(Options.inputfilename) - except Exception: - print "fail to open input " + Options.inputfilename - return 1 - - if Options.guidreffilename is not None: - try : - guidreffile = open(Options.guidreffilename) - except Exception: - print "fail to open guidref" + Options.guidreffilename - return 1 - genGuidString(guidreffile) - guidreffile.close() - - SmiHandlerProfile = DOMTree.documentElement - - SmiHandlerDatabase = SmiHandlerProfile.getElementsByTagName("SmiHandlerDatabase") - SmiHandlerCategory = SmiHandlerDatabase[0].getElementsByTagName("SmiHandlerCategory") - for smiHandlerCategory in SmiHandlerCategory: - SmiEntry = smiHandlerCategory.getElementsByTagName("SmiEntry") - for smiEntry in SmiEntry: - if smiEntry.hasAttribute("HandlerType"): - guidValue = smiEntry.getAttribute("HandlerType") - if guidValue in dictGuid.keys() : - smiEntry.setAttribute("HandlerType", dictGuid[guidValue]) - SmiHandler = smiEntry.getElementsByTagName("SmiHandler") - for smiHandler in SmiHandler: - Module = smiHandler.getElementsByTagName("Module") - Pdb = Module[0].getElementsByTagName("Pdb") - if (len(Pdb)) >= 1: - driverName = Module[0].getAttribute("Name") - pdbName = Pdb[0].childNodes[0].data - - Module[0].removeChild(Pdb[0]) - - symbolsFile.symbolsTable[driverName] = Symbols() - - if cmp (pdbName[-3:], "pdb") == 0 : - symbolsFile.symbolsTable[driverName].parse_pdb_file (driverName, pdbName) - else : - symbolsFile.symbolsTable[driverName].parse_debug_file (driverName, pdbName) - - Handler = smiHandler.getElementsByTagName("Handler") - RVA = Handler[0].getElementsByTagName("RVA") - print " Handler RVA: %s" % RVA[0].childNodes[0].data - - if (len(RVA)) >= 1: - rvaName = RVA[0].childNodes[0].data - symbolName = getSymbolName (driverName, int(rvaName, 16)) - - if (len(symbolName)) >= 1: - SymbolNode = createSym(symbolName) - Handler[0].appendChild(SymbolNode) - - Caller = smiHandler.getElementsByTagName("Caller") - RVA = Caller[0].getElementsByTagName("RVA") - print " Caller RVA: %s" % RVA[0].childNodes[0].data - - if (len(RVA)) >= 1: - rvaName = RVA[0].childNodes[0].data - symbolName = getSymbolName (driverName, int(rvaName, 16)) - - if (len(symbolName)) >= 1: - SymbolNode = createSym(symbolName) - Caller[0].appendChild(SymbolNode) - - try : - newfile = open(Options.outputfilename, "w") - except Exception: - print "fail to open output" + Options.outputfilename - return 1 - - newfile.write(DOMTree.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8")) - newfile.close() - -if __name__ == '__main__': - sys.exit(main()) -- cgit v1.2.3