summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/Common
diff options
context:
space:
mode:
authorCarsey, Jaben <jaben.carsey@intel.com>2018-04-20 23:51:23 +0800
committerYonghong Zhu <yonghong.zhu@intel.com>2018-04-26 14:27:59 +0800
commit1eb72acddd61ab30709076c5747204f3bf629178 (patch)
treed2e2da33480694da2a19bc3036787bf894bf16fa /BaseTools/Source/Python/Common
parent2a9aac46a639e2a6f253d57ba699ce712f819532 (diff)
downloadedk2-1eb72acddd61ab30709076c5747204f3bf629178.tar.gz
edk2-1eb72acddd61ab30709076c5747204f3bf629178.tar.bz2
edk2-1eb72acddd61ab30709076c5747204f3bf629178.zip
BaseTools: Share RegEx between files
Cc: Liming Gao <liming.gao@intel.com> Cc: Yonghong Zhu <yonghong.zhu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jaben Carsey <jaben.carsey@intel.com> Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com>
Diffstat (limited to 'BaseTools/Source/Python/Common')
-rw-r--r--BaseTools/Source/Python/Common/Misc.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py
index 641506a07d..f05ae39ebb 100644
--- a/BaseTools/Source/Python/Common/Misc.py
+++ b/BaseTools/Source/Python/Common/Misc.py
@@ -42,6 +42,13 @@ import subprocess
## Regular expression used to find out place holders in string template
gPlaceholderPattern = re.compile("\$\{([^$()\s]+)\}", re.MULTILINE | re.UNICODE)
+## regular expressions for map file processing
+startPatternGeneral = re.compile("^Start[' ']+Length[' ']+Name[' ']+Class")
+addressPatternGeneral = re.compile("^Address[' ']+Publics by Value[' ']+Rva\+Base")
+valuePatternGcc = re.compile('^([\w_\.]+) +([\da-fA-Fx]+) +([\da-fA-Fx]+)$')
+pcdPatternGcc = re.compile('^([\da-fA-Fx]+) +([\da-fA-Fx]+)')
+secReGeneral = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\da-fA-F]+)[Hh]? +([.\w\$]+) +(\w+)', re.UNICODE)
+
## Dictionary used to store file time stamp for quick re-access
gFileTimeStampCache = {} # {file path : file time stamp}
@@ -92,8 +99,6 @@ def _parseForXcode(lines, efifilepath, varnames):
def _parseForGCC(lines, efifilepath, varnames):
""" Parse map file generated by GCC linker """
- valuePattern = re.compile('^([\w_\.]+) +([\da-fA-Fx]+) +([\da-fA-Fx]+)$')
- pcdPattern = re.compile('^([\da-fA-Fx]+) +([\da-fA-Fx]+)')
status = 0
sections = []
varoffset = []
@@ -112,7 +117,7 @@ def _parseForGCC(lines, efifilepath, varnames):
# status handler
if status == 3:
- m = valuePattern.match(line)
+ m = valuePatternGcc.match(line)
if m is not None:
sections.append(m.groups(0))
for varname in varnames:
@@ -125,7 +130,7 @@ def _parseForGCC(lines, efifilepath, varnames):
else:
Str = line[len(".data.%s" % varname):]
if Str:
- m = pcdPattern.match(Str.strip())
+ m = pcdPatternGcc.match(Str.strip())
if m is not None:
varoffset.append((varname, int(m.groups(0)[0], 16) , int(sections[-1][1], 16), sections[-1][0]))
@@ -153,24 +158,21 @@ def _parseGeneral(lines, efifilepath, varnames):
status = 0 #0 - beginning of file; 1 - PE section definition; 2 - symbol table
secs = [] # key = section name
varoffset = []
- secRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\da-fA-F]+)[Hh]? +([.\w\$]+) +(\w+)', re.UNICODE)
symRe = re.compile('^([\da-fA-F]+):([\da-fA-F]+) +([\.:\\\\\w\?@\$]+) +([\da-fA-F]+)', re.UNICODE)
- startRe = re.compile("^Start[' ']+Length[' ']+Name[' ']+Class")
- addressRe = re.compile("^Address[' ']+Publics by Value[' ']+Rva\+Base")
for line in lines:
line = line.strip()
- if startRe.match(line):
+ if startPatternGeneral.match(line):
status = 1
continue
- if addressRe.match(line):
+ if addressPatternGeneral.match(line):
status = 2
continue
if line.startswith("entry point at"):
status = 3
continue
if status == 1 and len(line) != 0:
- m = secRe.match(line)
+ m = secReGeneral.match(line)
assert m is not None, "Fail to parse the section in map file , line is %s" % line
sec_no, sec_start, sec_length, sec_name, sec_class = m.groups(0)
secs.append([int(sec_no, 16), int(sec_start, 16), int(sec_length, 16), sec_name, sec_class])