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] |
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] |