1) Handling of the DW_AT_byte_size attribute when processing a
authorPetr Sorfa <petrs@caldera.com>
Fri, 11 Jan 2002 16:56:04 +0000 (16:56 +0000)
committerPetr Sorfa <petrs@caldera.com>
Fri, 11 Jan 2002 16:56:04 +0000 (16:56 +0000)
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.

gdb/ChangeLog
gdb/dwarf2read.c

index 3d1d2fac0698c81e830c6ec1bc92cb49bb4d0bb1..b8ba9a48827a1ea15c91827fe4230143def8af5f 100644 (file)
@@ -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 ->
index 28317f2e7b89407d7a00797f92536716255e71f6..785acc24ca7d38c0e41d4008f6189e2b9eb1a66f 100644 (file)
@@ -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: