diff mbox series

[V2] perf scripts python arm-cs-trace-disasm.py: Skip disasm of discontiguous packets

Message ID 20240809094047.319917-1-gankulkarni@os.amperecomputing.com (mailing list archive)
State New, archived
Headers show
Series [V2] perf scripts python arm-cs-trace-disasm.py: Skip disasm of discontiguous packets | expand

Commit Message

Ganapatrao Kulkarni Aug. 9, 2024, 9:40 a.m. UTC
Script uses contiguous address range of adjacent packets to generate
the tracing. When there is a continuity brake due to discontiguous
branch address, it is resulting in to a perf tool crash(segfault).
This is expected bhehaviour since the decoder is not expecting the
discontiguous packets.

Adding an option "force" to allow the decoder to continue and complete
the tracing without application crash by dropping the discontiguous
packets from decoding.

Signed-off-by: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
---

Changes since V1:
	Updated patch as per discussions[1].

[1] https://lore.kernel.org/linux-arm-kernel/ce4af204-874f-404c-a7aa-42dc6693d072@linaro.org/T/ 

 tools/perf/scripts/python/arm-cs-trace-disasm.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Leo Yan Aug. 9, 2024, 2:06 p.m. UTC | #1
On 8/9/24 10:40, Ganapatrao Kulkarni wrote:> Script uses contiguous address range of adjacent packets to generate
> the tracing. When there is a continuity brake due to discontiguous
> branch address, it is resulting in to a perf tool crash(segfault).
> This is expected bhehaviour since the decoder is not expecting the
> discontiguous packets.
> 
> Adding an option "force" to allow the decoder to continue and complete
> the tracing without application crash by dropping the discontiguous
> packets from decoding.
> 
> Signed-off-by: Ganapatrao Kulkarni <gankulkarni@os.amperecomputing.com>
> ---
> 
> Changes since V1:
>          Updated patch as per discussions[1].
> 
> [1] https://lore.kernel.org/linux-arm-kernel/ce4af204-874f-404c-a7aa-42dc6693d072@linaro.org/T/
> 
>   tools/perf/scripts/python/arm-cs-trace-disasm.py | 12 +++++++++++-
>   1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/scripts/python/arm-cs-trace-disasm.py b/tools/perf/scripts/python/arm-cs-trace-disasm.py
> index d973c2baed1c..65d59db3bcec 100755
> --- a/tools/perf/scripts/python/arm-cs-trace-disasm.py
> +++ b/tools/perf/scripts/python/arm-cs-trace-disasm.py
> @@ -36,7 +36,10 @@ option_list = [
>                      help="Set path to objdump executable file"),
>          make_option("-v", "--verbose", dest="verbose",
>                      action="store_true", default=False,
> -                   help="Enable debugging log")
> +                   help="Enable debugging log"),
> +       make_option("-f", "--force", dest="force",
> +                   action="store_true", default=False,
> +                   help="Force decoder to continue")
>   ]
> 
>   parser = OptionParser(option_list=option_list)
> @@ -257,6 +260,13 @@ def process_event(param_dict):
>                  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))
>                  return
> 
> +       if (stop_addr < start_addr):
> +               if (options.verbose or not options.force):
> +                       print("Packet Discontinuity detected [stop_add:0x%x start_addr:0x%x ] for dso %s" % (stop_addr, start_addr, dso))
> +                       print("Use option '-f' following the script for force mode")
> +               if (options.force):
> +                               return

A redundant indentation? After fix it:

Reviewed-by: Leo Yan <leo.yan@arm.com>
  
> +
>          if (options.objdump_name != None):
>                  # It doesn't need to decrease virtual memory offset for disassembly
>                  # for kernel dso and executable file dso, so in this case we set
> --
> 2.44.0
>
diff mbox series

Patch

diff --git a/tools/perf/scripts/python/arm-cs-trace-disasm.py b/tools/perf/scripts/python/arm-cs-trace-disasm.py
index d973c2baed1c..65d59db3bcec 100755
--- a/tools/perf/scripts/python/arm-cs-trace-disasm.py
+++ b/tools/perf/scripts/python/arm-cs-trace-disasm.py
@@ -36,7 +36,10 @@  option_list = [
 		    help="Set path to objdump executable file"),
 	make_option("-v", "--verbose", dest="verbose",
 		    action="store_true", default=False,
-		    help="Enable debugging log")
+		    help="Enable debugging log"),
+	make_option("-f", "--force", dest="force",
+		    action="store_true", default=False,
+		    help="Force decoder to continue")
 ]
 
 parser = OptionParser(option_list=option_list)
@@ -257,6 +260,13 @@  def process_event(param_dict):
 		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))
 		return
 
+	if (stop_addr < start_addr):
+		if (options.verbose or not options.force):
+			print("Packet Discontinuity detected [stop_add:0x%x start_addr:0x%x ] for dso %s" % (stop_addr, start_addr, dso))
+			print("Use option '-f' following the script for force mode")
+		if (options.force):
+				return
+
 	if (options.objdump_name != None):
 		# It doesn't need to decrease virtual memory offset for disassembly
 		# for kernel dso and executable file dso, so in this case we set