This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Patch for handling of DW_AT_byte_size in DW_TAG_string_type and a some FORTRAN support
- To: gdb-patches at sources dot redhat dot com
- Subject: Patch for handling of DW_AT_byte_size in DW_TAG_string_type and a some FORTRAN support
- From: Petr Sorfa <petrs at caldera dot com>
- Date: Wed, 07 Nov 2001 14:28:09 -0500
- Organization: Caldera
- Reply-To: petrs at caldera dot com
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: