From 1cc38acc914214e96d543522aae2ab465331c4b0 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Thu, 6 Mar 2025 15:07:12 -0600 Subject: [PATCH] scripts: Strip compiler suffixes in result scripts This can be explicitly disabled with -x/--no-strip in the relevant scripts, but stripping by default seems to be more useful for composing results in higher-level scripts. It's better for the result names to be consistent, even if they don't match the .o symbols exactly. Note some scripts are unaffected: - cov.py - gcov doesn't seem to have an option for getting the unstripped symbols, so we only output the stripped names. - structs.py - structs.py deals with struct names, which are notably not symbols. --- scripts/code.py | 12 +++++++++++- scripts/ctx.py | 12 +++++++++++- scripts/data.py | 12 +++++++++++- scripts/perf.py | 9 +++++++++ scripts/perfbd.py | 13 +++++++++++++ scripts/stack.py | 9 +++++++++ 6 files changed, 64 insertions(+), 3 deletions(-) diff --git a/scripts/code.py b/scripts/code.py index f4a124ee..735483fb 100755 --- a/scripts/code.py +++ b/scripts/code.py @@ -453,6 +453,7 @@ def collect_dwarf_info(obj_path, tags=None, *, def collect_code(obj_paths, *, everything=False, + no_strip=False, **args): results = [] for obj_path in obj_paths: @@ -493,7 +494,12 @@ def collect_code(obj_paths, *, if not everything and sym.name.startswith('__'): continue - results.append(CodeResult(file, sym.name, sym.size)) + # strip compiler suffixes + name = sym.name + if not no_strip: + name = name.split('.', 1)[0] + + results.append(CodeResult(file, name, sym.size)) return results @@ -1188,6 +1194,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '--objdump-path', type=lambda x: x.split(), diff --git a/scripts/ctx.py b/scripts/ctx.py index 36e62660..a318aaa6 100755 --- a/scripts/ctx.py +++ b/scripts/ctx.py @@ -458,6 +458,7 @@ def collect_dwarf_info(obj_path, tags=None, *, def collect_ctx(obj_paths, *, everything=False, + no_strip=False, depth=1, **args): results = [] @@ -693,9 +694,14 @@ def collect_ctx(obj_paths, *, children=children_, notes=notes_)) + # strip compiler suffixes + name = sym.name + if not no_strip: + name = name.split('.', 1)[0] + # context = sum of params - name = entry.name size = sum((param.size for param in params), start=RInt(0)) + results.append(CtxResult( 0, 0, file, name, 0, size, children=params)) @@ -1507,6 +1513,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '--objdump-path', type=lambda x: x.split(), diff --git a/scripts/data.py b/scripts/data.py index 639be0bb..e6202654 100755 --- a/scripts/data.py +++ b/scripts/data.py @@ -453,6 +453,7 @@ def collect_dwarf_info(obj_path, tags=None, *, def collect_data(obj_paths, *, everything=False, + no_strip=False, **args): results = [] for obj_path in obj_paths: @@ -493,7 +494,12 @@ def collect_data(obj_paths, *, if not everything and sym.name.startswith('__'): continue - results.append(DataResult(file, sym.name, sym.size)) + # strip compiler suffixes + name = sym.name + if not no_strip: + name = name.split('.', 1)[0] + + results.append(DataResult(file, name, sym.size)) return results @@ -1188,6 +1194,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '--objdump-path', type=lambda x: x.split(), diff --git a/scripts/perf.py b/scripts/perf.py index 4b54b04f..48619402 100755 --- a/scripts/perf.py +++ b/scripts/perf.py @@ -576,6 +576,7 @@ def collect_decompressed(path, *, perf_path=PERF_PATH, sources=None, everything=False, + no_strip=False, propagate=0, depth=1, **args): @@ -742,6 +743,10 @@ def collect_decompressed(path, *, else: file, line = re.sub('(\.o)?$', '.c', dso, 1), 0 + # strip compiler suffixes + if not no_strip: + sym = sym.split('.', 1)[0] + last_stack.append((file, sym, line)) # stop propogating? @@ -1766,6 +1771,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '--branches', action='store_true', diff --git a/scripts/perfbd.py b/scripts/perfbd.py index ac7075a7..43fa9f66 100755 --- a/scripts/perfbd.py +++ b/scripts/perfbd.py @@ -485,6 +485,7 @@ def collect_dwarf_lines(obj_path, *, def collect_job(path, start, stop, syms, lines, *, sources=None, everything=False, + no_strip=False, propagate=0, depth=1, **args): @@ -551,6 +552,10 @@ def collect_job(path, start, stop, syms, lines, *, else: file = os.path.abspath(file) + # strip compiler suffixes + if not no_strip: + sym = sym.split('.', 1)[0] + results[(file, sym, line)] = ( last_readed, last_proged, @@ -705,6 +710,10 @@ def collect_job(path, start, stop, syms, lines, *, at_cache[addr] = file, sym, line + # strip compiler suffixes + if not no_strip: + sym = sym.split('.', 1)[0] + last_stack.append((file, sym, line)) # stop propagating? @@ -1763,6 +1772,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '-A', '--annotate', action='store_true', diff --git a/scripts/stack.py b/scripts/stack.py index 27e3c05a..ff9ea845 100755 --- a/scripts/stack.py +++ b/scripts/stack.py @@ -323,6 +323,7 @@ def collect_callgraph(ci_path, def collect_stack(ci_paths, *, everything=False, + no_strip=False, depth=1, **args): # parse the callgraphs @@ -351,6 +352,10 @@ def collect_stack(ci_paths, *, else: file = os.path.abspath(file) + # strip compiler suffixes + if not no_strip: + name = name.split('.', 1)[0] + nameof.cache[node.name] = name, file return name, file @@ -1254,6 +1259,10 @@ if __name__ == "__main__": '--everything', action='store_true', help="Include builtin and libc specific symbols.") + parser.add_argument( + '-x', '--no-strip', + action='store_true', + help="Don't strip compiler optimization suffixes from symbols.") parser.add_argument( '-e', '--error-on-recursion', action='store_true',