diff.py --select-occurrence (#74)

* --select-occurrence

* print address of function

Co-authored-by: Julgodis <>
Co-authored-by: Pheenoh <pheenoh@gmail.com>
This commit is contained in:
Jonathan Wase 2021-01-07 02:45:55 +01:00 committed by GitHub
parent 6f2c187418
commit 85f6906ba0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 1 deletions

16
diff.py
View File

@ -244,6 +244,13 @@ parser.add_argument(
metavar="SYMBOL",
help="override symbol name on lhs when using -o"
)
parser.add_argument(
"--select-occurence",
dest="select_occurence",
type=int,
default=0,
help="If multiple occurence of the same symbol is found, use this to select the correct ocurrance."
)
# Project-specific flags, e.g. different versions/make arguments.
add_custom_arguments_fn = getattr(diff_settings, "add_custom_arguments", None)
@ -498,8 +505,15 @@ def search_map_file(fn_name: str, mapfile: Optional[str] = None, build_dir: Opti
# ram elf rom object name
find = re.findall(re.compile(r' \S+ \S+ (\S+) (\S+) . ' + fn_name + r'(?: \(entry of \.(?:init|text)\))? \t(\S+)'), contents)
if len(find) > 1:
fail(f"Found multiple occurrences of function {fn_name} in map file.")
if args.select_occurence > 0:
find = [find[args.select_occurence - 1]]
else:
print(f"Found multiple occurrences of function {fn_name} in map file:", file=sys.stderr)
for i,location in enumerate(find):
print(f" {i+1}: {location[0]} {location[1]} {str(location[2]).ljust(40, ' ')}", file=sys.stderr)
fail(f"Use --select-occurence to select the right occurrence.")
if len(find) == 1:
print(find)
rom = int(find[0][1],16)
objname = find[0][2]
# The metrowerks linker map format does not contain the full object path, so we must complete it manually.