From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5239 invoked by alias); 26 Apr 2012 16:10:15 -0000 Received: (qmail 5079 invoked by uid 22791); 26 Apr 2012 16:10:14 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Apr 2012 16:09:57 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q3QG9vNw009820 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 26 Apr 2012 12:09:57 -0400 Received: from host2.jankratochvil.net (ovpn-116-17.ams2.redhat.com [10.36.116.17]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q3QG9qHm011111 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Thu, 26 Apr 2012 12:09:55 -0400 Date: Thu, 26 Apr 2012 16:16:00 -0000 From: Jan Kratochvil To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [patch] Fix DW_AT_lower_bound DWARF-4+ defaults Message-ID: <20120426160952.GA18206@host2.jankratochvil.net> References: <20120426150708.GA31687@host2.jankratochvil.net> <87pqau8qan.fsf@fleche.redhat.com> <20120426153753.GA3590@host2.jankratochvil.net> <87ipgm8pnd.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87ipgm8pnd.fsf@fleche.redhat.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-04/txt/msg00931.txt.bz2 On Thu, 26 Apr 2012 17:43:34 +0200, Tom Tromey wrote: > I think the nicest thing would be to pick the DWARF 4 defaults, and > complain for other versions. OK. Thanks, Jan gdb/ 2012-04-26 Jan Kratochvil Fix DW_AT_lower_bound defaults for DWARF-4+. * dwarf2read.c (read_subrange_type): Remove initialization of low and high. New variable low_default_is_valid. Implement DWARF-4+ DW_AT_lower_bound defaults. Print complaint for DW_AT_lower_bound with no default by the DWARF standard. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index bd2d6f2..99bba9f 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -9086,8 +9086,8 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) struct type *base_type; struct type *range_type; struct attribute *attr; - LONGEST low = 0; - LONGEST high = -1; + LONGEST low, high; + int low_default_is_valid; char *name; LONGEST negative_mask; @@ -9100,10 +9100,35 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) if (range_type) return range_type; - if (cu->language == language_fortran) + /* Set LOW_DEFAULT_IS_VALID if current language and DWARF version allow + omitting DW_AT_lower_bound. */ + switch (cu->language) { - /* FORTRAN implies a lower bound of 1, if not given. */ + case language_c: + case language_cplus: + low = 0; + low_default_is_valid = 1; + break; + case language_fortran: + low = 1; + low_default_is_valid = 1; + break; + case language_d: + case language_java: + case language_objc: + low = 0; + low_default_is_valid = (cu->header.version >= 4); + break; + case language_ada: + case language_m2: + case language_pascal: low = 1; + low_default_is_valid = (cu->header.version >= 4); + break; + default: + low = 0; + low_default_is_valid = 0; + break; } /* FIXME: For variable sized arrays either of these could be @@ -9111,7 +9136,11 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu) but we don't know how to handle it. */ attr = dwarf2_attr (die, DW_AT_lower_bound, cu); if (attr) - low = dwarf2_get_attr_constant_value (attr, 0); + low = dwarf2_get_attr_constant_value (attr, low); + else if (!low_default_is_valid) + complaint (&symfile_complaints, _("Missing DW_AT_lower_bound " + "- DIE at 0x%x [in module %s]"), + die->offset.sect_off, cu->objfile->name); attr = dwarf2_attr (die, DW_AT_upper_bound, cu); if (attr)