From a5635997b281e24f789dee211a8c13101943feb7 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sat, 5 Jun 2021 17:06:36 +0200 Subject: [PATCH] elf_mem_map: allow to annotate overlapping regions for clarity --- tools/elf_mem_map | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/tools/elf_mem_map b/tools/elf_mem_map index cde11daf..b3b59978 100755 --- a/tools/elf_mem_map +++ b/tools/elf_mem_map @@ -233,7 +233,7 @@ def decode_dump(path): return (buf_addr, buf_data) -def annotate_refs(grefs, addr, data, width=45, gaps=True): +def annotate_refs(grefs, addr, data, width=45, gaps=True, overlaps=True): last_end = None for entry in grefs: if entry.loc < addr: @@ -254,12 +254,16 @@ def annotate_refs(grefs, addr, data, width=45, gaps=True): typ = 'f' if len(buf) == 4 else 'd' buf_repr += ' F:' + '{:10.3f}'.format(unpack(typ, buf)[0]) - if gaps and last_end is not None and last_end < pos: - # decode gaps - gap_size = pos - last_end - gap_buf = data[last_end:pos] - print('{:04x} {} {:4} R:{}'.format(addr+last_end, "*UNKNOWN*".ljust(width), - gap_size, gap_buf.hex())) + if last_end is not None: + if gaps and last_end < pos: + # decode gaps + gap_size = pos - last_end + gap_buf = data[last_end:pos] + print('{:04x} {} {:4} R:{}'.format(addr+last_end, "*UNKNOWN*".ljust(width), + gap_size, gap_buf.hex())) + if overlaps and last_end > pos + 1: + gap_size = pos - last_end + print('{:04x} {} {:4}'.format(addr+last_end, "*OVERLAP*".ljust(width), gap_size)) print('{:04x} {} {:4}{} R:{}'.format(entry.loc, entry.name.ljust(width), entry.size, buf_repr, buf.hex())) @@ -284,6 +288,8 @@ def main(): help='do not dump memory inbetween known symbols') ap.add_argument('--no-expand-structs', action='store_true', help='do not decode structure data') + ap.add_argument('--overlaps', action='store_true', + help='annotate overlaps greater than 1 byte') g = ap.add_mutually_exclusive_group(required=True) g.add_argument('dump', nargs='?', help='RAM dump obtained from D2 g-code') g.add_argument('--map', action='store_true', help='dump global memory map') @@ -295,7 +301,9 @@ def main(): print_map(grefs) else: addr, data = decode_dump(args.dump) - annotate_refs(grefs, addr, data, gaps=not args.no_gaps) + annotate_refs(grefs, addr, data, + gaps=not args.no_gaps, + overlaps=args.overlaps) if __name__ == '__main__': exit(main())