This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] backtrace in mixed language applications


Hello,

when doing a backtrace in a mixed-language application, GDB should use the
appriorate language for printing the frames (in particular for printing
arguments). Not the case for now, it prints every frame with the
language of the first one.

This is quite visible in a mixed C/Ada application; for example, in
Ada, pointer to unconstrained strings can be represented with "fat pointers",
which are records containing a pointer to the bound information (P_BOUNDS)
and a pointer to the array of characters (P_ARRAY). Imagine that you have
an ada procedure lang_switch.ada_procedure, which takes an Ada string in
parameter, calling some C code. If you get a backtrace from the C code,
you'll get:

[...]
#0  c_procedure (msg=0xbfffc170 "msg") at foo.c:4
#1  0x08049b91 in lang_switch.ada_procedure (msg={P_ARRAY = 0x805524c,
    P_BOUNDS = 0x8055250}) at lang_switch.adb:14
[...]

the msg is bogus in frame #1 is bogus. you should have got:

[...]
#0  c_procedure (msg=0xbfffaa00 "msg") at foo.c:4
#1  0x08049b91 in lang_switch.ada_procedure (msg=0x805524c)
    at lang_switch.adb:14
[...]

The patch in attachment should fix that. Tested on x86-linux. The
Ada/C testcase will follow. OK to apply?

Thanks in advance,
Jerome

Attachment: stack.c.dif
Description: video/dv


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]