From: John Steele Scott <toojays@toojays.net>
To: gdb-patches@sourceware.org
Subject: [patch] PR symtab/13277: Resolving opaque structures in ICC generated binaries.
Date: Sun, 16 Oct 2011 07:58:00 -0000 [thread overview]
Message-ID: <4E9A6897.6030900@toojays.net> (raw)
ICC does not set DW_AT_declaration on opaque structure declarations, so
gdb will show such structures as "<no data fields>" unless executing
code within the compilation unit which contains the complete declaration.
However, ICC does set DW_AT_byte_size to zero on opaque declarations.
This patch adds a check for DW_AT_byte_size == 0 with producer == ICC to
allow gdb to resolve opaque structures in binaries which were built with
ICC.
See http://sourceware.org/bugzilla/show_bug.cgi?id=13277 for more
details, including an example.
Changelog:
2011-10-16 John Steele Scott <toojays@toojays.net>
PR symtab/13277: Resolving opaque structures in ICC generated binaries.
* symtab.c (producer_is_icc): New function.
* symtab.h (producer_is_icc): Declare.
* dwarf2read.c (read_structure_type): Set TYPE_STUB on structures
with a byte size of zero, if the binary was produced by ICC.
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -7636,6 +7636,11 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
/* RealView does not output the required DW_AT_declaration
on incomplete types. */
TYPE_STUB (type) = 1;
+ else if (attr != NULL&& die->child == NULL&& TYPE_LENGTH (type) == 0
+ && producer_is_icc (cu->producer))
+ /* ICC does not output the required DW_AT_declaration
+ on incomplete types, but gives them a size of zero. */
+ TYPE_STUB (type) = 1;
/* We need to add the type field to the die immediately so we don't
infinitely recurse when dealing with pointers to the structure
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 9447bd9..ffaa035 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -4806,6 +4806,20 @@ producer_is_realview (const char *producer)
return 0;
}
+int
+producer_is_icc (const char *producer)
+{
+ static const char *const icc_ident = "Intel(R) C Intel(R) 64 Compiler XE";
+
+ if (producer == NULL)
+ return 0;
+
+ if (strncmp (producer, icc_ident, strlen (icc_ident)) == 0)
+ return 1;
+
+ return 0;
+}
+
void
_initialize_symtab (void)
{
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 90a6fe4..987f199 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1302,6 +1302,10 @@ extern struct symtabs_and_lines expand_line_sal (struct symtab_and_line sal);
compiler (armcc). */
int producer_is_realview (const char *producer);
+/* Return 1 if the supplied producer string matches the Intel C/C++
+ compiler (icc). */
+int producer_is_icc (const char *producer);
+
void fixup_section (struct general_symbol_info *ginfo,
CORE_ADDR addr, struct objfile *objfile);
next reply other threads:[~2011-10-16 7:58 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-16 7:58 John Steele Scott [this message]
2011-10-16 8:03 John Steele Scott
2011-10-19 9:01 ` Jan Kratochvil
2011-10-19 13:54 ` Jan Kratochvil
2011-10-23 18:29 ` John Steele Scott
2011-10-24 0:13 ` Joel Brobecker
2011-10-27 19:57 ` Tom Tromey
2011-10-23 10:26 ` John Steele Scott
2011-10-26 23:09 ` Jan Kratochvil
2011-11-13 12:13 ` John Steele Scott
2011-11-15 17:19 ` Tom Tromey
2011-11-15 23:58 ` Jan Kratochvil
2012-05-05 2:32 ` John Steele Scott
2012-05-12 18:37 ` Jan Kratochvil
2012-05-14 13:55 ` John Steele Scott
[not found] ` <20120518144642.GA19690@host2.jankratochvil.net>
2012-05-20 12:34 ` John Steele Scott
[not found] ` <20120520130919.GA6990@host2.jankratochvil.net>
2012-05-20 13:17 ` Jan Kratochvil
2012-05-20 13:44 ` John Steele Scott
2012-05-23 23:29 ` John Steele Scott
2012-05-24 15:16 ` Pedro Alves
2012-05-21 0:12 ` Doug Evans
2012-05-20 13:17 ` Jan Kratochvil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E9A6897.6030900@toojays.net \
--to=toojays@toojays.net \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox