From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6141 invoked by alias); 27 Nov 2013 15:56:38 -0000 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 Received: (qmail 6126 invoked by uid 89); 27 Nov 2013 15:56:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=AWL,BAYES_50,KAM_STOCKGEN,RDNS_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: mga14.intel.com Received: from Unknown (HELO mga14.intel.com) (143.182.124.37) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 27 Nov 2013 15:56:35 +0000 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by azsmga102.ch.intel.com with ESMTP; 27 Nov 2013 07:56:27 -0800 X-ExtLoop1: 1 Received: from irsmsx103.ger.corp.intel.com ([163.33.3.157]) by fmsmga001.fm.intel.com with ESMTP; 27 Nov 2013 07:56:25 -0800 Received: from irsmsx106.ger.corp.intel.com (163.33.3.31) by IRSMSX103.ger.corp.intel.com (163.33.3.157) with Microsoft SMTP Server (TLS) id 14.3.123.3; Wed, 27 Nov 2013 15:54:43 +0000 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.215]) by IRSMSX106.ger.corp.intel.com ([169.254.8.15]) with mapi id 14.03.0123.003; Wed, 27 Nov 2013 15:54:43 +0000 From: "Agovic, Sanimir" To: 'Tom Tromey' CC: "gdb-patches@sourceware.org" Subject: RE: [PATCH 02/10] type: add c99 variable length array support Date: Wed, 27 Nov 2013 17:08:00 -0000 Message-ID: <0377C58828D86C4588AEEC42FC3B85A7176BC5AD@IRSMSX105.ger.corp.intel.com> References: <1382366424-21010-1-git-send-email-sanimir.agovic@intel.com> <1382366424-21010-3-git-send-email-sanimir.agovic@intel.com> <87eh6sujea.fsf@fleche.redhat.com> <0377C58828D86C4588AEEC42FC3B85A7176B7861@IRSMSX105.ger.corp.intel.com> <874n74b41k.fsf@fleche.redhat.com> In-Reply-To: <874n74b41k.fsf@fleche.redhat.com> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2013-11/txt/msg00845.txt.bz2 > Sanimir> I will add a separate patch which implements DW_AT_count, I > Sanimir> could not test it as no compiler emits this attribute so far. >=20 > FWIW, it can be tested via the DWARF assembler. >=20 > However it is fine by me if you want to leave it out. > Thanks for your review, below you will find a testcase and a fix for a bug the test revealed. The latter patch will be squashed in v3. commit 5351ec3e002726893c42c6cf210c8b697a8e51d0 Author: Sanimir Agovic Date: Tue Nov 26 14:47:16 2013 +0000 test: cover subranges with present DW_AT_count attribute =20=20=20=20 The dwarf attribute DW_AT_count specifies the elements of a subrange. This test covers subranges with present count but absent upper bound attribute, both with static and dynamic attribute values. =20=20=20=20 2013-11-26 Sanimir Agovic Keven Boell =20=20=20=20 testsuite: * gdb.dwarf2/count.exp: New test. =20=20=20=20 Change-Id: I58868d4f82691ec3be06b55face759ebc72c930c diff --git a/gdb/testsuite/gdb.dwarf2/count.exp b/gdb/testsuite/gdb.dwarf2/= count.exp new file mode 100644 index 0000000..a524e89 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/count.exp @@ -0,0 +1,106 @@ +# Copyright 2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Tests to cover DW_AT_count attribute in subranges. + +load_lib dwarf.exp + +# Only run on targets which support dwarf and gas. +if { ![dwarf2_support] } { + return 0 +} + +standard_testfile main.c count.S + +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + cu {} { + compile_unit {{language @DW_LANG_C99}} { + declare_labels char_label array_label static_array_label + declare_labels var_label + + char_label: base_type { + {name char} + {encoding @DW_ATE_signed} + {byte_size 1 DW_FORM_sdata} + } + + array_label: array_type { + {type :$char_label} + } { + subrange_type { + {count {DW_OP_lit5} SPECIAL_expr} + {type :$char_label} + } + } + + static_array_label: array_type { + {type :$char_label} + } { + subrange_type { + {count 5 DW_FORM_sdata} + {type :$char_label} + } + } + + DW_TAG_variable { + {name array} + {type :$array_label} + {const_value hello DW_FORM_block1} + } + + DW_TAG_variable { + {name static_array} + {type :$static_array_label} + {const_value world DW_FORM_block1} + } + } + } +} + +if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile}1.o \ + object {nodebug}] !=3D "" } { + return -1 +} + +if { [gdb_compile $asm_file ${binfile}2.o object {nodebug}] !=3D "" } { + return -1 +} + +if { [gdb_compile [list ${binfile}1.o ${binfile}2.o] \ + "${binfile}" executable {}] !=3D "" } { + return -1 +} + +global GDBFLAGS +set saved_gdbflags $GDBFLAGS +set GDBFLAGS [concat $GDBFLAGS " -readnow"] +clean_restart ${testfile} +set GDBFLAGS $saved_gdbflags + +if ![runto_main] { + perror "couldn't run to main" + return -1 +} + +gdb_test "ptype array" "type =3D char \\\[5]\\\" "ptype array" +gdb_test "whatis array" "type =3D char \\\[5]\\\" "whatis array" +gdb_test "print array" "\"hello\"" "print array" +gdb_test "print sizeof array" "5" "print sizeof array" + +gdb_test "ptype static_array" "type =3D char \\\[5]\\\" "ptype static_arra= y" +gdb_test "whatis static_array" "type =3D char \\\[5]\\\" "whatis static_ar= ray" +gdb_test "print static_array" "\"world\"" "print static_array" +gdb_test "print sizeof static_array" "5" "print sizeof static_array" commit 7d44299555837bac03f2230129bc5d88ede6a307 Author: Sanimir Agovic Date: Tue Nov 26 14:35:43 2013 +0000 vla: resolve dynamic bounds if value contents is a constant byte-sequen= ce A variable location might be a constant value and therefore no inferior= memory access is needed to read the content. In this case try to resolve the t= ype bounds. 2013-11-26 Sanimir Agovic Keven Boell * findvar.c (default_read_var_value): Resolve dynamic bounds if loc= ation points to a constant blob. Change-Id: I20ed097565d27e5166a9e8ac275ae41fc6b50e8f diff --git a/gdb/findvar.c b/gdb/findvar.c index ec6afd6..c1302d8 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -468,6 +468,9 @@ default_read_var_value (struct symbol *var, struct fram= e_info *frame) return v; case LOC_CONST_BYTES: + if (is_dynamic_type (type)) + /* Value is a constant byte-sequence and needs no memory access. */ + type =3D resolve_dynamic_type (type, /* Unused address. */ 0); v =3D allocate_value (type); memcpy (value_contents_raw (v), SYMBOL_VALUE_BYTES (var), TYPE_LENGTH (type)); Intel GmbH Dornacher Strasse 1 85622 Feldkirchen/Muenchen, Deutschland Sitz der Gesellschaft: Feldkirchen bei Muenchen Geschaeftsfuehrer: Christian Lamprechter, Hannes Schwaderer, Douglas Lusk Registergericht: Muenchen HRB 47456 Ust.-IdNr./VAT Registration No.: DE129385895 Citibank Frankfurt a.M. (BLZ 502 109 00) 600119052