Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf scripts python: Let script to be python2 compliant

The mainline kernel can be used for relative old distros, e.g. RHEL 7.
The distro doesn't upgrade from python2 to python3, this causes the
building error that the python script is not python2 compliant.

To fix the building failure, this patch changes from the python f-string
format to traditional string format.

Fixes: 12fdd6c009da0d02 ("perf scripts python: Support Arm CoreSight trace data disassembly")
Reported-by: Akemi Yagi <toracat@elrepo.org>
Signed-off-by: Leo Yan <leo.yan@linaro.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: ElRepo <contact@elrepo.org>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: https://lore.kernel.org/r/20220725104220.1106663-1-leo.yan@linaro.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Leo Yan and committed by
Arnaldo Carvalho de Melo
b2265219 553de6e1

+18 -16
+18 -16
tools/perf/scripts/python/arm-cs-trace-disasm.py
··· 61 61 62 62 def get_offset(perf_dict, field): 63 63 if field in perf_dict: 64 - return f"+0x{perf_dict[field]:x}" 64 + return "+%#x" % perf_dict[field] 65 65 return "" 66 66 67 67 def get_dso_file_path(dso_name, dso_build_id): ··· 76 76 else: 77 77 append = "/elf" 78 78 79 - dso_path = f"{os.environ['PERF_BUILDID_DIR']}/{dso_name}/{dso_build_id}{append}" 79 + dso_path = os.environ['PERF_BUILDID_DIR'] + "/" + dso_name + "/" + dso_build_id + append; 80 80 # Replace duplicate slash chars to single slash char 81 81 dso_path = dso_path.replace('//', '/', 1) 82 82 return dso_path ··· 94 94 start_addr = start_addr - dso_start; 95 95 stop_addr = stop_addr - dso_start; 96 96 disasm = [ options.objdump_name, "-d", "-z", 97 - f"--start-address=0x{start_addr:x}", 98 - f"--stop-address=0x{stop_addr:x}" ] 97 + "--start-address="+format(start_addr,"#x"), 98 + "--stop-address="+format(stop_addr,"#x") ] 99 99 disasm += [ dso_fname ] 100 100 disasm_output = check_output(disasm).decode('utf-8').split('\n') 101 101 disasm_cache[addr_range] = disasm_output ··· 109 109 m = disasm_re.search(line) 110 110 if m is None: 111 111 continue 112 - print(f"\t{line}") 112 + print("\t" + line) 113 113 114 114 def print_sample(sample): 115 - print(f"Sample = {{ cpu: {sample['cpu']:04} addr: 0x{sample['addr']:016x} " \ 116 - f"phys_addr: 0x{sample['phys_addr']:016x} ip: 0x{sample['ip']:016x} " \ 117 - f"pid: {sample['pid']} tid: {sample['tid']} period: {sample['period']} time: {sample['time']} }}") 115 + print("Sample = { cpu: %04d addr: 0x%016x phys_addr: 0x%016x ip: 0x%016x " \ 116 + "pid: %d tid: %d period: %d time: %d }" % \ 117 + (sample['cpu'], sample['addr'], sample['phys_addr'], \ 118 + sample['ip'], sample['pid'], sample['tid'], \ 119 + sample['period'], sample['time'])) 118 120 119 121 def trace_begin(): 120 122 print('ARM CoreSight Trace Data Assembler Dump') ··· 133 131 cpu = sample["cpu"] 134 132 pid = sample["pid"] 135 133 tid = sample["tid"] 136 - return f"{comm:>16} {pid:>5}/{tid:<5} [{cpu:04}] {sec:9}.{ns:09} " 134 + return "%16s %5u/%-5u [%04u] %9u.%09u " % (comm, pid, tid, cpu, sec, ns) 137 135 138 136 # This code is copied from intel-pt-events.py for printing source code 139 137 # line and symbols. ··· 173 171 glb_line_number = line_number 174 172 glb_source_file_name = source_file_name 175 173 176 - print(f"{start_str}{src_str}") 174 + print(start_str, src_str) 177 175 178 176 def process_event(param_dict): 179 177 global cache_size ··· 190 188 symbol = get_optional(param_dict, "symbol") 191 189 192 190 if (options.verbose == True): 193 - print(f"Event type: {name}") 191 + print("Event type: %s" % name) 194 192 print_sample(sample) 195 193 196 194 # If cannot find dso so cannot dump assembler, bail out ··· 199 197 200 198 # Validate dso start and end addresses 201 199 if ((dso_start == '[unknown]') or (dso_end == '[unknown]')): 202 - print(f"Failed to find valid dso map for dso {dso}") 200 + print("Failed to find valid dso map for dso %s" % dso) 203 201 return 204 202 205 203 if (name[0:12] == "instructions"): ··· 246 244 247 245 # Handle CS_ETM_TRACE_ON packet if start_addr=0 and stop_addr=4 248 246 if (start_addr == 0 and stop_addr == 4): 249 - print(f"CPU{cpu}: CS_ETM_TRACE_ON packet is inserted") 247 + print("CPU%d: CS_ETM_TRACE_ON packet is inserted" % cpu) 250 248 return 251 249 252 250 if (start_addr < int(dso_start) or start_addr > int(dso_end)): 253 - print(f"Start address 0x{start_addr:x} is out of range [ 0x{dso_start:x} .. 0x{dso_end:x} ] for dso {dso}") 251 + print("Start address 0x%x is out of range [ 0x%x .. 0x%x ] for dso %s" % (start_addr, int(dso_start), int(dso_end), dso)) 254 252 return 255 253 256 254 if (stop_addr < int(dso_start) or stop_addr > int(dso_end)): 257 - print(f"Stop address 0x{stop_addr:x} is out of range [ 0x{dso_start:x} .. 0x{dso_end:x} ] for dso {dso}") 255 + print("Stop address 0x%x is out of range [ 0x%x .. 0x%x ] for dso %s" % (stop_addr, int(dso_start), int(dso_end), dso)) 258 256 return 259 257 260 258 if (options.objdump_name != None): ··· 269 267 if path.exists(dso_fname): 270 268 print_disam(dso_fname, dso_vm_start, start_addr, stop_addr) 271 269 else: 272 - print(f"Failed to find dso {dso} for address range [ 0x{start_addr:x} .. 0x{stop_addr:x} ]") 270 + print("Failed to find dso %s for address range [ 0x%x .. 0x%x ]" % (dso, start_addr, stop_addr)) 273 271 274 272 print_srccode(comm, param_dict, sample, symbol, dso)