1#!/usr/bin/ruby
2
3puts "set width 0
4set height 0
5set verbose off\n\n"
6
7IO.popen("nm -S /tmp/upb-jit-code.so").each_line { |line|
8  # Input lines look like this:
9  #   000000000000575a T X.0x10.OP_CHECKDELIM
10  #
11  # For each one we want to emit a command that looks like:
12  #   b X.0x10.OP_CHECKDELIM
13  #   commands
14  #     silent
15  #     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
16  #     continue
17  #   end
18
19  parts = line.split
20  next if parts[1] != "T"
21  sym = parts[2]
22  next if sym !~ /X\./;
23  if sym =~ /OP_/ then
24    printcmd = "printf \"buf_ofs=%d data_rem=%d delim_rem=%d #{sym}\\n\", $rbx - (long)((upb_pbdecoder*)($r15))->buf, $r12 - $rbx, $rbp - $rbx"
25  elsif sym =~ /enterjit/ then
26    printcmd = "printf \"#{sym} bytes=%d\\n\", $rcx"
27  else
28    printcmd = "printf \"#{sym}\\n\""
29  end
30  puts "b #{sym}
31commands
32  silent
33  #{printcmd}
34  continue
35end\n\n"
36}
37