Python Symbol API question/weirdness

Evan Driscoll <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAAR9PsWzg0Xpx4iVhpEMyYTqEMtosXVDPe9sYSYbw9UG=5OFJQ@mail.gmail.com>
[I wrote most of this with 7.11, but I tried again with 8.0 and still
have the same problem. See below for more.]


I've got a toy program (can send out source and/or binary if it'd be
helpful) that calls raise(SIGTRAP) in it.

At that point, I can ask for a backtrace:

(gdb) bt
#0  0x00007ffff7a43428 in __GI_raise (sig=sig@entry=5)
...

and then use 'info symbol' to get some information based on that
address, and cross-check it with the symbol name that it gives back:

(gdb) info symbol  0x00007ffff7a43428
raise + 56 in section .text of /lib/x86_64-linux-gnu/libc.so.6
(gdb) info symbol raise
raise in section .text of /lib/x86_64-linux-gnu/libc.so.6
(gdb) python print(gdb.parse_and_eval("raise"))
{<text variable, no debug info>} 0x7ffff7a433f0 <__GI_raise>

I'm not sure the following is relevant, but just in case:

(gdb) print &raise
$2 = (<text variable, no debug info> *) 0x7ffff7a433f0 <__GI_raise>
(gdb) print &__GI_raise
$3 = (int (*)(int)) 0x7ffff7a433f0 <__GI_raise>


However, I can't look up that symbol in Python using lookup_global_symbol:

(gdb) python print(gdb.lookup_symbol("raise"))
(None, False)
(gdb) python print(gdb.lookup_global_symbol("raise"))
None

Setting a domain doesn't seem to help:

>>> ds = [gdb.SYMBOL_UNDEF_DOMAIN,
...       gdb.SYMBOL_VAR_DOMAIN,
...       gdb.SYMBOL_STRUCT_DOMAIN,
...       gdb.SYMBOL_LABEL_DOMAIN,
...       gdb.SYMBOL_VARIABLES_DOMAIN,
...       gdb.SYMBOL_FUNCTIONS_DOMAIN,
...       gdb.SYMBOL_TYPES_DOMAIN,
...       ]
>>> for d in ds: print(gdb.lookup_global_symbol("raise", d))
None
None
None
None
None
None
None

Does anyone have any idea what might be going on? I think I don't
actually need this to work, but I am curious what is going on. Maybe
something with symbol aliases?

With GDB 8.0 instead of 7.11, things change slightly but remain
largely the same. __GI_raise never shows up -- the backtrace just says
"raise" instead, and 'print __GI_raise' and 'info symbol __GI_raise'
both produce errors.

Thanks,
Evan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.