D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 2604 - DW_TAG_module and GDB
Summary: DW_TAG_module and GDB
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D1 (retired)
Hardware: x86 Linux
: P2 normal
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks: 3207
  Show dependency treegraph
 
Reported: 2009-01-22 17:05 UTC by Mihail Zenkov
Modified: 2014-02-24 15:33 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Mihail Zenkov 2009-01-22 17:05:51 UTC
I try fix GDB to support DMD 1.029 and greater. DMD set flag "has children" to DW_TAG_module and in this case GDB can't find DW_TAG_subprogram, as result we don't have psymbols. If i change flag to "no children" GDB load psymbols without problems. Is it bug DMD or GDB? Why DMD set this flag?
Comment 1 Jason House 2009-01-22 20:04:09 UTC
(In reply to comment #0)
> I try fix GDB to support DMD 1.029 and greater. DMD set flag "has children" to
> DW_TAG_module and in this case GDB can't find DW_TAG_subprogram, as result we
> don't have psymbols. If i change flag to "no children" GDB load psymbols
> without problems. Is it bug DMD or GDB? Why DMD set this flag?

For those of us waiting for this bug to get fixed, is there any relatively easy thing we can do to get gdb to work?

Comment 2 Mihail Zenkov 2009-01-23 19:07:12 UTC
>For those of us waiting for this bug to get fixed, is there any relatively easy
>thing we can do to get gdb to work?

1. Use GDC or DMD-1.028. Currently DMD specific DWARF extensions not supported. http://www.digitalmars.com/d/1.0/abi.html

2. Try patch binary before debug it.

For example we have binary crash_test. 
With next command we can see if DW_TAG_module have "has children" flag:
objdump -W crash_test 2>/dev/null | grep DW_TAG_module

 <1><138>: Abbrev Number: 2 (DW_TAG_module)
   2      DW_TAG_module    [has children]

Try patch it:
sed "s/\x1e\x01\x03\x08/\x1e\x00\x03\x08/" -i crash_test

And see again what we have:
objdump -W crash_test 2>/dev/null | grep DW_TAG_module

 <1><138>: Abbrev Number: 2 (DW_TAG_module)
   2      DW_TAG_module    [no children]
Comment 3 Jason House 2009-01-23 19:33:41 UTC
I had hoped this would be a workaround for http://d.puremagic.com/issues/show_bug.cgi?id=2575 but alas, it does not :(

For others trying the sed command, I think you need to use greedy replacement.  (add a g between the last / and ").  Without that, it did not fix all occurances of has children for me.
Comment 4 Walter Bright 2009-08-07 16:26:51 UTC
I plan on simply removing the DW_TAG_module tag, as it seems to cause problems in GDB.
Comment 5 Walter Bright 2009-09-03 13:24:42 UTC
Fixed dmd 1.047 and 2.032