Add global variables for instruction information
When I am debugging crashes in Ruby, sometimes it is very convenient to disassemble iseqs in a core file. For example in Bug #17984, I had a core file from a dead process. Disassembling the iseqs where the crash occurred helped me to find the cause of the crash.
However, since 72e318f118d5cfde0e66a41acd3a2070fcaf4348, YARV instruction information tables that I need to disassemble the iseqs became static, function local constants. The problem with function local statics is that the symbol names generated depend on the compiler we use. For example, this constant, the
x variable inside the
insn_name function. On clang the symbol name is
$ nm ./miniruby | grep insn_name.x 00000001002cc7c0 s _insn_name.x 00000001002ce350 s _insn_name.x 00000001002cf310 s _insn_name.x
But with gcc the symbol name is
aaron@whiteclaw ~/g/ruby (master)> nm ./miniruby | grep ' x\.' 00000000003016a0 r x.19369 00000000002f9820 r x.51289 00000000002fa520 r x.51305 00000000002ee4e0 r x.51499 00000000002ef2c0 r x.51515
Even more complicated is that we have other static variables named
x, so I have to hunt for the right symbol name via trial and error.
Can we change these symbols to be globals so that debuggers can look for a consistent name?