## @ PatchFv.py\r
#\r
-# Copyright (c) 2014 - 2019, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>\r
# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
##\r
match = re.match("^EFI_BASE_ADDRESS\s*=\s*(0x[a-fA-F0-9]+)", rptLine)\r
if match is not None:\r
self.fdBase = int(match.group(1), 16) - fvOffset\r
+ break\r
rptLine = fdIn.readline()\r
fdIn.close()\r
if self.fdBase == 0xFFFFFFFF:\r
- raise Exception("Could not find EFI_BASE_ADDRESS in INF file!" % fvFile)\r
+ raise Exception("Could not find EFI_BASE_ADDRESS in INF file!" % infFile)\r
return 0\r
\r
#\r
foundModHdr = False\r
while (rptLine != "" ):\r
if rptLine[0] != ' ':\r
- #DxeIpl (Fixed Flash Address, BaseAddress=0x00fffb4310, EntryPoint=0x00fffb4958)\r
- #(GUID=86D70125-BAA3-4296-A62F-602BEBBB9081 .textbaseaddress=0x00fffb4398 .databaseaddress=0x00fffb4178)\r
- match = re.match("([_a-zA-Z0-9\-]+)\s\(.+BaseAddress=(0x[0-9a-fA-F]+),\s+EntryPoint=(0x[0-9a-fA-F]+)\)", rptLine)\r
+ #DxeIpl (Fixed Flash Address, BaseAddress=0x00fffb4310, EntryPoint=0x00fffb4958,Type=PE)\r
+ match = re.match("([_a-zA-Z0-9\-]+)\s\(.+BaseAddress=(0x[0-9a-fA-F]+),\s+EntryPoint=(0x[0-9a-fA-F]+),\s*Type=\w+\)", rptLine)\r
+ if match is None:\r
+ #DxeIpl (Fixed Flash Address, BaseAddress=0x00fffb4310, EntryPoint=0x00fffb4958)\r
+ match = re.match("([_a-zA-Z0-9\-]+)\s\(.+BaseAddress=(0x[0-9a-fA-F]+),\s+EntryPoint=(0x[0-9a-fA-F]+)\)", rptLine)\r
if match is not None:\r
foundModHdr = True\r
modName = match.group(1)\r
modName = self.dictGuidNameXref[modName.upper()]\r
self.dictModBase['%s:BASE' % modName] = int (match.group(2), 16)\r
self.dictModBase['%s:ENTRY' % modName] = int (match.group(3), 16)\r
+ #(GUID=86D70125-BAA3-4296-A62F-602BEBBB9081 .textbaseaddress=0x00fffb4398 .databaseaddress=0x00fffb4178)\r
match = re.match("\(GUID=([A-Z0-9\-]+)\s+\.textbaseaddress=(0x[0-9a-fA-F]+)\s+\.databaseaddress=(0x[0-9a-fA-F]+)\)", rptLine)\r
if match is not None:\r
if foundModHdr:\r
#\r
# retval 0 Parsed MOD MAP file successfully\r
# retval 1 There is no moduleEntryPoint in modSymbols\r
+ # retval 2 There is no offset for moduleEntryPoint in modSymbols\r
#\r
def parseModMapFile(self, moduleName, mapFile):\r
#\r
else:\r
#MSFT\r
#0003:00000190 _gComBase 00007a50 SerialPo\r
- patchMapFileMatchString = "^\s[0-9a-fA-F]{4}:[0-9a-fA-F]{8}\s+(\w+)\s+([0-9a-fA-F]{8}\s+)"\r
+ patchMapFileMatchString = "^\s[0-9a-fA-F]{4}:[0-9a-fA-F]{8}\s+(\w+)\s+([0-9a-fA-F]{8,16}\s+)"\r
matchKeyGroupIndex = 1\r
matchSymbolGroupIndex = 2\r
prefix = ''\r
continue\r
\r
if not moduleEntryPoint in modSymbols:\r
- return 1\r
+ if matchSymbolGroupIndex == 2:\r
+ if not '_ModuleEntryPoint' in modSymbols:\r
+ return 1\r
+ else:\r
+ moduleEntryPoint = "_ModuleEntryPoint"\r
+ else:\r
+ return 1\r
\r
modEntry = '%s:%s' % (moduleName,moduleEntryPoint)\r
if not modEntry in self.dictSymbolAddress:\r
#\r
# Get current character\r
#\r
- # retval elf.string[self.index]\r
+ # retval self.string[self.index]\r
# retval '' Exception\r
#\r
def getCurr(self):\r