aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-03-08 17:54:44 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-03-08 17:54:44 +0000
commit421d5c74b4d65edd0a3963db1352c01a230e6bcd (patch)
tree471d9b19758c04f120f7a096bee73974b53833ad /gdb
parent63154eca7b36effea83973fe140981e5b7f83428 (diff)
downloadgdb-421d5c74b4d65edd0a3963db1352c01a230e6bcd.zip
gdb-421d5c74b4d65edd0a3963db1352c01a230e6bcd.tar.gz
gdb-421d5c74b4d65edd0a3963db1352c01a230e6bcd.tar.bz2
gdb/
Fix DWARF-3+ DW_AT_accessibility default assumption. * dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for cu->header.version >= 3.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/dwarf2read.c24
2 files changed, 24 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 05d8314..930fb94 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix DWARF-3+ DW_AT_accessibility default assumption.
+ * dwarf2read.c (dwarf2_add_field): Fix new_field->accessibility for
+ cu->header.version >= 3.
+
2011-03-08 Pedro Alves <pedro@codesourcery.com>
* remote.c (remote_check_symbols): Skip if the target has no
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 2a47c7d..ba5680f 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -6238,13 +6238,25 @@ dwarf2_add_field (struct field_info *fip, struct die_info *die,
}
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)
+ {
+ /* 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 specifies the default accessibility explicitly. */
+
+ 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);