From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: gdb-patches@sourceware.org
Subject: revert+new [patch]: Re: [patch] DWARF-3+ DW_AT_accessibility defaults #2 (GCC PR debug/45124)
Date: Tue, 22 Mar 2011 10:06:00 -0000 [thread overview]
Message-ID: <20110322095904.GA29625@host1.jankratochvil.net> (raw)
In-Reply-To: <20110321154428.GA3761@host1.jankratochvil.net>
Hi,
there has been a crash regression for: gdb.dwarf2/dw4-sig-types.exp
The patch has been reverted:
http://sourceware.org/ml/gdb-cvs/2011-03/msg00264.html
Filed now GCC PR debug/48229:
DW_TAG_type_unit has no DW_AT_producer
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48229
The problem is gcc-4.5.x has wrong DWARF output (GCC PR debug/45124) and it
does not provide any DW_AT_producer. Therefore proposing GDB would assume
gcc-4.5.x when it sees no DW_AT_producer. Hopefully GCC is the only DWARF-4
DW_TAG_type_unit producer out there (is it?) and finally hopefully it is the
only DW_TAG_type_unit producer forgetting to output DW_AT_producer. It would
be probably worth to wait on the resolution of GCC PR debug/48229 before
assuming its implications.
Not sure how I missed the regression, the baseline is a bit floating with
various recent regressions.
Sorry,
Jan
gdb/
2011-03-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (producer_is_gxx_lt_4_6): New function.
(dwarf2_add_field): Fix new_field->accessibility for
cu->header.version >= 3 while verifying also producer_is_gxx_lt_4_6.
--- gdb/dwarf2read.c 22 Mar 2011 09:50:42 -0000 1.512
+++ gdb/dwarf2read.c 22 Mar 2011 09:52:44 -0000
@@ -6209,6 +6209,45 @@ dwarf2_record_block_ranges (struct die_i
}
}
+/* Check for GCC PR debug/45124 fix which is not present in any G++ version up
+ to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed
+ during 4.6.0 experimental. */
+
+static int
+producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu)
+{
+ int major, minor;
+
+ if (cu->producer == NULL)
+ {
+ if (cu->per_cu->from_debug_types)
+ {
+ /* Workaround GCC PR debug/48229 where DW_TAG_type_unit had no
+ DW_AT_producer in G++ 4.5.x. G++ 4.4.any could not produce
+ DWARF-4 (and its DW_TAG_type_unit). G++ 4.6.0 already provides
+ DW_AT_producer for DW_TAG_type_unit. */
+
+ return 1;
+ }
+
+ /* For unknown compilers expect their behavior is DWARF version
+ compliant. */
+
+ return 0;
+ }
+
+ /* Whitespaces are ignored in both PRODUCER and the format string. */
+ if (sscanf (cu->producer, "GNU C++ %d.%d", &major, &minor) != 2)
+ {
+ /* For non-GCC compilers expect their behavior is DWARF version
+ compliant. */
+
+ return 0;
+ }
+
+ return major < 4 || (major == 4 && minor < 6);
+}
+
/* Add an aggregate field to the field list. */
static void
@@ -6239,13 +6278,28 @@ dwarf2_add_field (struct field_info *fip
}
fip->nfields++;
- /* Handle accessibility and virtuality of field.
- The default accessibility for members is public, the default
- accessibility for inheritance is private. */
- if (die->tag != DW_TAG_inheritance)
- new_field->accessibility = DW_ACCESS_public;
+ if (cu->header.version < 3 || producer_is_gxx_lt_4_6 (cu))
+ {
+ /* The default DWARF 2 accessibility for members is public, the default
+ accessibility for inheritance is private. */
+
+ if (die->tag != DW_TAG_inheritance)
+ new_field->accessibility = DW_ACCESS_public;
+ else
+ new_field->accessibility = DW_ACCESS_private;
+ }
else
- new_field->accessibility = DW_ACCESS_private;
+ {
+ /* DWARF 3+ defines the default accessibility a different way - see
+ below - than DWARF 2 has defined. The same rules apply now for
+ DW_TAG_inheritance as for the members and it only depends on the
+ container kind. */
+
+ if (die->parent->tag == DW_TAG_class_type)
+ new_field->accessibility = DW_ACCESS_private;
+ else
+ new_field->accessibility = DW_ACCESS_public;
+ }
new_field->virtuality = DW_VIRTUALITY_none;
attr = dwarf2_attr (die, DW_AT_accessibility, cu);
next prev parent reply other threads:[~2011-03-22 9:59 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-21 15:47 Jan Kratochvil
2011-03-21 17:29 ` Tom Tromey
2011-03-21 20:15 ` Jan Kratochvil
2011-03-21 20:41 ` Tom Tromey
2011-03-22 10:06 ` Jan Kratochvil [this message]
2011-03-22 18:16 ` revert+new [patch]: " Tom Tromey
2011-03-22 18:32 ` Jan Kratochvil
2011-03-23 2:12 ` Dodji Seketeli
2011-03-28 12:35 ` Jan Kratochvil
2011-04-01 21:03 ` [patch] DWARF-3+ DW_AT_accessibility defaults #3 " Jan Kratochvil
2011-04-03 16:28 ` Jan Kratochvil
2011-04-09 11:21 ` [commit]+[brach commit] " 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=20110322095904.GA29625@host1.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--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