From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26187 invoked by alias); 12 May 2005 13:26:00 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 24952 invoked from network); 12 May 2005 13:25:41 -0000 Received: from unknown (HELO hera.math.uni.wroc.pl) (156.17.86.1) by sourceware.org with SMTP; 12 May 2005 13:25:41 -0000 Received: from hebisch by hera.math.uni.wroc.pl with local (Exim 3.35 #1 (Debian)) id 1DWDhl-0003ag-00 for ; Thu, 12 May 2005 15:26:21 +0200 Subject: PATCH: Read Dwarf2 info from Pascal To: gdb-patches@sources.redhat.com Date: Thu, 12 May 2005 13:37:00 -0000 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII Message-Id: From: Waldek Hebisch X-SW-Source: 2005-05/txt/msg00279.txt.bz2 The patch below adds Pascal support to `dwarf2read.c': - reading Dwarf2 info about sets - recognizing the language as Pascal - allowing namespace declaration (modules) for Pascal Without the patch gdb can not be used with new versions of Gnu Pascal (at least in default mode): gpc based of gcc-3.x defaults to Dwarf2 debug info (and gdb stops working once a set is found). The patch is against gdb-6.3, but applies to cvs version (from May 7): I have tested it on Debian Woody and the patch coused no new test failures (however, unpatched cvs version had 55 unexpected test failures). The patch is an updated version of the patch I attached to PR 1477 (BTW, is anybody looking at Pascal problems?). If OK please apply, I have no CVS write access. The patch is small, so I hope it can go in without legal problems, but if needed I will fill the copyright assignment to FSF. ChangeLog: 2005-05-04 Waldek Hebisch (hebisch@math.uni.wroc.pl) * dwarf2read.c: Add Pascal support. --- gdb-6.3.orig/gdb/dwarf2read.c 2004-10-16 02:41:00.000000000 +0200 +++ gdb-6.3/gdb/dwarf2read.c 2005-05-06 20:28:41.000000000 +0200 @@ -913,6 +913,8 @@ static void read_enumeration_type (struct die_info *, struct dwarf2_cu *); +static void read_set_type (struct die_info *, struct dwarf2_cu *); + static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *); static struct type *dwarf_base_type (int, int, struct dwarf2_cu *); @@ -2648,6 +2650,9 @@ read_enumeration_type (die, cu); process_enumeration_scope (die, cu); break; + case DW_TAG_set_type: + read_set_type (die, cu); + break; /* FIXME drow/2004-03-14: These initialize die->type, but do not create a symbol or process any children. Therefore it doesn't do anything @@ -4009,6 +4014,24 @@ return new_prefix; } +static void +read_set_type (struct die_info * die, struct dwarf2_cu *cu) +{ + struct type *domain_type; + + /* Return if we've already decoded this type. */ + if (die->type) + { + return; + } + + domain_type = die_type (die, cu); + + die->type = create_set_type (NULL, domain_type); + +} + + /* Given a pointer to a die which begins an enumeration, process all the dies that define the members of the enumeration, and create the symbol for the enumeration type. @@ -6096,9 +6119,11 @@ case DW_LANG_Ada95: cu->language = language_ada; break; + case DW_LANG_Pascal83: + cu->language = language_pascal; + break; case DW_LANG_Cobol74: case DW_LANG_Cobol85: - case DW_LANG_Pascal83: case DW_LANG_Modula2: default: cu->language = language_minimal; @@ -6861,6 +6886,7 @@ case DW_TAG_structure_type: case DW_TAG_union_type: case DW_TAG_enumeration_type: + case DW_TAG_set_type: SYMBOL_CLASS (sym) = LOC_TYPEDEF; SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN; @@ -7182,6 +7208,9 @@ case DW_TAG_enumeration_type: read_enumeration_type (die, cu); break; + case DW_TAG_set_type: + read_set_type (die, cu); + break; case DW_TAG_subprogram: case DW_TAG_subroutine_type: read_subroutine_type (die, cu); @@ -7239,7 +7268,8 @@ struct die_info *parent; if (cu->language != language_cplus - && cu->language != language_java) + && cu->language != language_java + && cu->language != language_pascal) return NULL; parent = die->parent; -- Waldek Hebisch hebisch@math.uni.wroc.pl