Skip to content

Commit f1c8aa9

Browse files
committed
Support disassembly of multiple functions
Signed-off-by: Dave Rodgman <dave.rodgman@arm.com>
1 parent 31b35b3 commit f1c8aa9

File tree

1 file changed

+26
-23
lines changed

1 file changed

+26
-23
lines changed

tools/bin/mtest

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -450,26 +450,29 @@ def disassemble(target):
450450
objdump = toolchain(target)["OBJDUMP"]
451451
objfiles = ["library/libmbedcrypto.a", "library/libmbedtls.a", "library/libmbedx509.a" ] + args.build_targets
452452
objfiles = [f"{ROOT}/{f}" for f in objfiles if os.path.exists(f"{ROOT}/{f}")]
453-
if args.disassemble == True:
454-
disarg = "--disassemble"
455-
else:
456-
disarg = f"--disassemble={args.disassemble}"
457-
output, _ = subrun([objdump] + objfiles + [disarg, "--visualize-jumps=extended-color"], silent=True)
458-
if args.disassemble == True:
459-
# return complete output
460-
return output
461-
else:
462-
# extract the relevant bit of output
463-
found = False
464-
diss = []
465-
for l in output.splitlines():
466-
if l.strip().endswith(f"{args.disassemble}>:"):
467-
found = True
468-
if found and re.search(r"[\w_]+.o:\s+file format", l): break
469-
if found and l.strip().startswith("Disassembly of section"): break
470-
if found: diss.append(l)
471-
while len(diss) > 0 and diss[-1] == "": diss = diss[:-1]
472-
return "\n".join(diss)
453+
fns = [None] if len(args.disassemble) == 0 else args.disassemble
454+
result = []
455+
for fn in fns:
456+
if fn is None:
457+
disarg = "--disassemble"
458+
else:
459+
disarg = f"--disassemble={fn}"
460+
output, _ = subrun([objdump] + objfiles + [disarg, "--visualize-jumps=extended-color"], silent=True)
461+
if fn is None:
462+
result.append(output)
463+
else:
464+
# extract the relevant bit of output
465+
found = False
466+
diss = []
467+
for l in output.splitlines():
468+
if l.strip().endswith(f"{fn}>:"):
469+
found = True
470+
if found and re.search(r"[\w_]+.o:\s+file format", l): break
471+
if found and l.strip().startswith("Disassembly of section"): break
472+
if found: diss.append(l)
473+
while len(diss) > 0 and diss[-1] == "": diss = diss[:-1]
474+
result.append("\n".join(diss))
475+
return "\n\n".join(result)
473476

474477

475478
def can_build(target):
@@ -641,7 +644,7 @@ Build targets: build the library by default, or files (e.g. aes.o), programs (e.
641644
parser.add_argument('-A', '--asan', action="store_true", default=False, help="make an ASAN build")
642645
parser.add_argument('-W', '--no-warnings', action="store_true", default=False, help="disable warnings")
643646
parser.add_argument('-C', '--no-clean', action="store_true", default=False, help="don't run make clean (if building for a single target)")
644-
parser.add_argument('-d', '--disassemble', metavar='function', action="store", nargs='?', const=True, default=None, help="disassemble specified function (or everything if no function specified)")
647+
parser.add_argument('-d', '--disassemble', metavar='function', nargs='*', default=None, help="disassemble specified function(s) (or everything if no function specified)")
645648
parser.add_argument('-s', '--size', action="store_true", default=False, help="display size of library / given build target")
646649
parser.add_argument('-S', '--size-tfm', action="store_true", default=False, help=f"as --size, but use the TF-M config file and build with {SIZE_TFM_COMPILER} -Oz for Cortex-M33")
647650
parser.add_argument('-j', '--jobs', nargs='?', const=-1, metavar='N', action="store", type=int, help="enable parallel builds, like 'make -j'. Alternatively, set the MAKEFLAGS environment variable")
@@ -861,10 +864,10 @@ def main():
861864
size(target)
862865
else:
863866
log("skipping size: " + toolchain_exes(target)["size_error"])
864-
if args.disassemble:
867+
if args.disassemble is not None:
865868
if can_disassemble(target):
866869
d = disassemble(target)
867-
distgt = '' if args.disassemble == True else ' for ' + args.disassemble
870+
distgt = '' if len(args.disassemble) == 0 else ' for ' + ", ".join(args.disassemble)
868871
log(f"Disassembly{distgt}:")
869872
print(d)
870873
print()

0 commit comments

Comments
 (0)