Project

General

Profile

Actions

Feature #18026

open

Add global variables for instruction information

Added by tenderlovemaking (Aaron Patterson) 3 months ago. Updated 3 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:104526]

Description

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

Also available in: Atom PDF