]> Git Repo - J-linux.git/commitdiff
perf script python: Adjust objdump start/end per map pgoff parameter
authorSteve Clevenger <[email protected]>
Fri, 8 Nov 2024 19:11:17 +0000 (12:11 -0700)
committerNamhyung Kim <[email protected]>
Sat, 9 Nov 2024 06:42:57 +0000 (22:42 -0800)
Extract map_pgoff parameter from the dictionary, and adjust start/end
range passed to objdump based on the value.

A zero start_addr is filtered to prevent output of dso address range
check failures. This script repeatedly sees a zero value passed
in for
      start_addr = cpu_data[str(cpu) + 'addr']

These zero values are not a new problem. The start_addr/stop_addr warning
clutters the instruction trace output, hence this change.

Signed-off-by: Steve Clevenger <[email protected]>
Reviewed-by: Leo Yan <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Link: https://lore.kernel.org/r/21ccdd22e664bdeccb878672d4b2c0518873c1e5.1731027120.git.scclevenger@os.amperecomputing.com
Signed-off-by: Namhyung Kim <[email protected]>
tools/perf/scripts/python/arm-cs-trace-disasm.py

index 1128d259b4f4716b8adaf15e04696175f3b97965..ba208c90d63110480e429a5e8b19470a4d441cc7 100755 (executable)
@@ -251,6 +251,10 @@ def process_event(param_dict):
        dso_start = get_optional(param_dict, "dso_map_start")
        dso_end = get_optional(param_dict, "dso_map_end")
        symbol = get_optional(param_dict, "symbol")
+       map_pgoff = get_optional(param_dict, "map_pgoff")
+       # check for valid map offset
+       if (str(map_pgoff) == '[unknown]'):
+               map_pgoff = 0
 
        cpu = sample["cpu"]
        ip = sample["ip"]
@@ -318,9 +322,10 @@ def process_event(param_dict):
        # Record for previous sample packet
        cpu_data[str(cpu) + 'addr'] = addr
 
-       # Handle CS_ETM_TRACE_ON packet if start_addr=0 and stop_addr=4
-       if (start_addr == 0 and stop_addr == 4):
-               print("CPU%d: CS_ETM_TRACE_ON packet is inserted" % cpu)
+       # Filter out zero start_address. Optionally identify CS_ETM_TRACE_ON packet
+       if (start_addr == 0):
+               if ((stop_addr == 4) and (options.verbose == True)):
+                       print("CPU%d: CS_ETM_TRACE_ON packet is inserted" % cpu)
                return
 
        if (start_addr < int(dso_start) or start_addr > int(dso_end)):
@@ -337,13 +342,14 @@ def process_event(param_dict):
                # vm_start to zero.
                if (dso == "[kernel.kallsyms]" or dso_start == 0x400000):
                        dso_vm_start = 0
+                       map_pgoff = 0
                else:
                        dso_vm_start = int(dso_start)
 
                dso_fname = get_dso_file_path(dso, dso_bid)
                if path.exists(dso_fname):
-                       print_disam(dso_fname, dso_vm_start, start_addr, stop_addr)
+                       print_disam(dso_fname, dso_vm_start, start_addr + map_pgoff, stop_addr + map_pgoff)
                else:
-                       print("Failed to find dso %s for address range [ 0x%x .. 0x%x ]" % (dso, start_addr, stop_addr))
+                       print("Failed to find dso %s for address range [ 0x%x .. 0x%x ]" % (dso, start_addr + map_pgoff, stop_addr + map_pgoff))
 
        print_srccode(comm, param_dict, sample, symbol, dso)
This page took 0.054134 seconds and 4 git commands to generate.