diff mbox series

external/mambo: add a poor man's ftrace command

Message ID 20220907154218.3879207-1-npiggin@gmail.com
State Accepted
Headers show
Series external/mambo: add a poor man's ftrace command | expand

Checks

Context Check Description
snowpatch_ozlabs/github-Docker_builds_and_checks success Successfully ran 9 jobs.

Commit Message

Nicholas Piggin Sept. 7, 2022, 3:42 p.m. UTC
Add an ftrace command that steps instructions and prints the symbol
whenever it changes. This can be helpful for low level debugging.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 external/mambo/mambo_utils.tcl | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

Comments

Reza Arbab Sept. 20, 2022, 8:21 p.m. UTC | #1
On Thu, Sep 08, 2022 at 01:42:18AM +1000, Nicholas Piggin wrote:
>Add an ftrace command that steps instructions and prints the symbol
>whenever it changes. This can be helpful for low level debugging.

Handy! Applied to master.
diff mbox series

Patch

diff --git a/external/mambo/mambo_utils.tcl b/external/mambo/mambo_utils.tcl
index 96f8971a..6d1425a0 100644
--- a/external/mambo/mambo_utils.tcl
+++ b/external/mambo/mambo_utils.tcl
@@ -169,6 +169,32 @@  proc s { {nr 1} } {
     }
 }
 
+proc ftrace { {nr 1} } {
+    upvar #0 target_t t
+    upvar #0 target_c c
+    upvar #0 target_p p
+
+    set pc [mysim cpu $p:$c:$t display spr pc]
+    set sym [lindex [split [addr2func $pc] {+}] 0]
+    set prev_pc $pc
+
+    puts [ipc]
+    puts "$sym"
+
+    for { set i 0 } { $i < $nr } { incr i 1 } {
+        set pc [mysim cpu $p:$c:$t display spr pc]
+        set sym2 [lindex [split [addr2func $pc] {+}] 0]
+
+        if { $sym2 != $sym } {
+            puts "$sym2 \t\t(from [addr2func $prev_pc])"
+            set sym $sym2
+        }
+        set prev_pc $pc
+
+        mysim step 1
+    }
+}
+
 proc S { {nr 1} } {
     upvar #0 target_t t
     upvar #0 target_c c