This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Patch for handling of DW_AT_byte_size in DW_TAG_string_type and a some FORTRAN support


Hi All,

This patch contains:

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.

2001-11-07  Petr Sorfa  <petrs@caldera.com>

        * 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

Comments?

Petr
-- 
--------------------------------------------------------
Petr Sorfa                  Senior Software Engineer
Caldera
430 Mountain Ave.           http://www.caldera.com
Murray Hill 07974
NJ, USA
--------------------------------------------------------
Disclaimer: All my comments are my own and nobody else's
----------------------------------------------------------
*** dwarf2read.c	Wed Nov  7 09:18:31 2001
--- dwarf2read.c.ps	Wed Nov  7 09:22:41 2001
*************** read_tag_string_type (struct die_info *d
*** 2743,2754 ****
      }
    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);
    die->type = type;
  }
  
--- 2743,2772 ----
      }
    else
      {
!       /* 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);
!   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;
  }
  
*************** set_cu_language (unsigned int lang)
*** 3751,3756 ****
--- 3769,3775 ----
        break;
      case DW_LANG_Fortran77:
      case DW_LANG_Fortran90:
+     case DW_LANG_Fortran95:
        cu_language = language_fortran;
        break;
      case DW_LANG_Mips_Assembler:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]