This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
[PATCH] Re: Section .debug_info in object file
- From: Elias Athanasopoulos <eathan at otenet dot gr>
- To: Pierre Habraken <Pierre dot Habraken at imag dot fr>
- Cc: binutils at sources dot redhat dot com, gdb at sources dot redhat dot com, Richard dot Earnshaw at arm dot com
- Date: Thu, 12 Sep 2002 22:03:03 +0300
- Subject: [PATCH] Re: Section .debug_info in object file
- References: <3D806189.7A45FCBA@imag.fr>
On Thu, Sep 12, 2002 at 11:42:33AM +0200, Pierre Habraken wrote:
> A few days ago I posted a message about the fact that after launching
> gdb to debug a program made of several C and Arm assembly language
> files, the command 'info sources' lists C files only.
I have attached a far from complete patch. It adds the first source file
name in the .debug_info section. This patch will not help you much, but
it solves a bug when both gcc and gas are used with dwarf2 support on. In the
latter case readelf reports garbage such as:
<0><bf>: Abbrev Number: 1 (DW_TAG_compile_unit)
DW_AT_stmt_list : 0
DW_AT_high_pc : 0x8048410 134513680
DW_AT_low_pc : 0x804841a 134513690
DW_AT_name : /home/anteater/test
DW_AT_comp_dir : GNU AS 2.11.90.0.8
DW_AT_producer : €=
DW_AT_language : 0 (Unknown: 0)
I check that with gcc 2.96.
Elias
gas/ChangeLog
2002-09-12 Elias Athanasopoulos <eathan@otenet.gr>
* dwarf2dbg.c (out_debug_abbrev): Add support for the DW_AT_name field.
(out_debug_info): Likewise.
--- dwarf2dbg.c.orig Thu Sep 12 20:05:23 2002
+++ dwarf2dbg.c Thu Sep 12 21:38:21 2002
@@ -1149,6 +1149,7 @@
out_abbrev (DW_AT_low_pc, DW_FORM_addr);
out_abbrev (DW_AT_high_pc, DW_FORM_addr);
}
+ out_abbrev (DW_AT_name, DW_FORM_string);
out_abbrev (DW_AT_comp_dir, DW_FORM_string);
out_abbrev (DW_AT_producer, DW_FORM_string);
out_abbrev (DW_AT_language, DW_FORM_data2);
@@ -1224,6 +1225,15 @@
emit_expr (&expr, sizeof_address);
}
+ /* DW_AT_name
+ * FIXME: we only store the first source
+ * file, but we should add more records to
+ * .debug_info for each source file we assemble.
+ */
+ len = strlen (files[1].filename) + 1;
+ p = frag_more (len);
+ memcpy (p, files[1].filename, len);
+
/* DW_AT_comp_dir */
comp_dir = getpwd ();
len = strlen (comp_dir) + 1;
--
http://gnewtellium.sourceforge.net MP3 is not a crime.