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