summaryrefslogtreecommitdiff
path: root/upb/pb/make-gdb-script.rb
diff options
context:
space:
mode:
Diffstat (limited to 'upb/pb/make-gdb-script.rb')
-rwxr-xr-xupb/pb/make-gdb-script.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/upb/pb/make-gdb-script.rb b/upb/pb/make-gdb-script.rb
new file mode 100755
index 0000000..3895597
--- /dev/null
+++ b/upb/pb/make-gdb-script.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/ruby
+
+puts "set width 0
+set height 0
+set verbose off\n\n"
+
+IO.popen("nm -S /tmp/upb-jit-code.so").each_line { |line|
+ # Input lines look like this:
+ # 000000000000575a T X.0x10.OP_CHECKDELIM
+ #
+ # For each one we want to emit a command that looks like:
+ # b X.0x10.OP_CHECKDELIM
+ # commands
+ # silent
+ # printf "buf_ofs=%d data_rem=%d delim_rem=%d X.0x10.OP_CHECKDELIM\n", $rbx - (long)((upb_pbdecoder*)($r15))->buf, $r12 - $rbx, $rbp - $rbx
+ # continue
+ # end
+
+ parts = line.split
+ next if parts[1] != "T"
+ sym = parts[2]
+ next if sym !~ /X\./;
+ if sym =~ /OP_/ then
+ printcmd = "printf \"buf_ofs=%d data_rem=%d delim_rem=%d #{sym}\\n\", $rbx - (long)((upb_pbdecoder*)($r15))->buf, $r12 - $rbx, $rbp - $rbx"
+ elsif sym =~ /enterjit/ then
+ printcmd = "printf \"#{sym} bytes=%d\\n\", $rcx"
+ else
+ printcmd = "printf \"#{sym}\\n\""
+ end
+ puts "b #{sym}
+commands
+ silent
+ #{printcmd}
+ continue
+end\n\n"
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback