aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Sorfa <petrs@caldera.com>2002-01-11 16:56:04 +0000
committerPetr Sorfa <petrs@caldera.com>2002-01-11 16:56:04 +0000
commitb21b22e0688fffcd43af44aa3b234c7a5a4cd954 (patch)
treecfc13f3e3ed7cd092c464c5216ffdff64c3e4fc8
parent41ae02c9eaedd88a26c7772a54e50a03ee129f7c (diff)
downloadfsf-binutils-gdb-b21b22e0688fffcd43af44aa3b234c7a5a4cd954.zip
fsf-binutils-gdb-b21b22e0688fffcd43af44aa3b234c7a5a4cd954.tar.gz
fsf-binutils-gdb-b21b22e0688fffcd43af44aa3b234c7a5a4cd954.tar.bz2
1) Handling of the DW_AT_byte_size attribute when processing a
DW_TAG_string_type (this is acceptable under the current DWARF 2.1/3.0 standard.) 2) In read_tag_string_type(), a fix for FORTRAN that propagates the first string length to all string types. This is important as FORTRAN strings are not delimited as in C/C++. 3) Handling of the DW_LANG_Fortran95.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/dwarf2read.c25
2 files changed, 31 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3d1d2fa..b8ba9a4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2002-01-11 Petr Sorfa <petrs@caldera.com>
+
+ * MAINTAINERS (write-after-approval): Add myself.
+ * dwarf2read.c (read_tag_string_type): Handling of
+ DW_AT_byte_size.
+ (read_tag_string_type): FORTRAN fix to prevent propagation of
+ first string size.
+ (set_cu_language): Handling of DW_LANG_Fortran95
+
2002-01-11 Richard Earnshaw <rearnsha@arm.com>
* armnbsd-nat.c (fetch_inferior_registers): Change inferior_pid ->
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 28317f2..785acc2 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -2786,12 +2786,30 @@ read_tag_string_type (struct die_info *die, struct objfile *objfile)
}
else
{
- length = 1;
+ /* check for the DW_AT_byte_size attribute */
+ attr = dwarf_attr (die, DW_AT_byte_size);
+ if (attr)
+ {
+ length = DW_UNSND (attr);
+ }
+ else
+ {
+ length = 1;
+ }
}
index_type = dwarf2_fundamental_type (objfile, FT_INTEGER);
range_type = create_range_type (NULL, index_type, 1, length);
- char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
- type = create_string_type (char_type, range_type);
+ if (cu_language == language_fortran)
+ {
+ /* Need to create a unique string type for bounds
+ information */
+ type = create_string_type (0, range_type);
+ }
+ else
+ {
+ char_type = dwarf2_fundamental_type (objfile, FT_CHAR);
+ type = create_string_type (char_type, range_type);
+ }
die->type = type;
}
@@ -3797,6 +3815,7 @@ set_cu_language (unsigned int lang)
break;
case DW_LANG_Fortran77:
case DW_LANG_Fortran90:
+ case DW_LANG_Fortran95:
cu_language = language_fortran;
break;
case DW_LANG_Mips_Assembler: