Feature #18026


Add global variables for instruction information

Added by tenderlovemaking (Aaron Patterson) almost 3 years ago. Updated over 2 years ago.

Target version:


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 insn_name.x:

$ 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 x.SOMENUMBER:

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?

Thank you!

Actions #2

Updated by nobu (Nobuyoshi Nakada) over 2 years ago

  • Status changed from Open to Closed

Applied in changeset git|b44c5187b4d05d8644242e532f2243210d0b74df.

Expose instruction information for debuggers [Feature #18026]


Also available in: Atom PDF