From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gateway21.websitewelcome.com (gateway21.websitewelcome.com [192.185.46.113]) by sourceware.org (Postfix) with ESMTPS id 3506A387701F for ; Wed, 25 Mar 2020 20:07:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3506A387701F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=tom@tromey.com Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7]) by gateway21.websitewelcome.com (Postfix) with ESMTP id C7A51400D1261 for ; Wed, 25 Mar 2020 15:07:18 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id HCJ4jXWG0XVkQHCJ4jnaVv; Wed, 25 Mar 2020 15:07:18 -0500 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Xm/G2Db+uXOKITlcHnFmcj4Q5Mh1cMiRCSxvl7m3HA4=; b=IkRMvncCS/Qr4SqiVRKjJKtYw6 Vy311pkXPdl4kG/j6OPjkzeG+7YRc4NUCqXVhUx4YJ9LrSDNcT38zSWORdyqgOCjQhkrX5uTSAlxo 2C2TGiaWTVu4bYfGenA2RkmjS; Received: from 97-118-117-21.hlrn.qwest.net ([97.118.117.21]:38026 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92) (envelope-from ) id 1jHCJ4-001VYp-Il; Wed, 25 Mar 2020 14:07:18 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 07/10] Don't call compute_and_set_names for partial symbols Date: Wed, 25 Mar 2020 14:07:12 -0600 Message-Id: <20200325200715.12947-8-tom@tromey.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20200325200715.12947-1-tom@tromey.com> References: <20200325200715.12947-1-tom@tromey.com> X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 97.118.117.21 X-Source-L: No X-Exim-ID: 1jHCJ4-001VYp-Il X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 97-118-117-21.hlrn.qwest.net (bapiya.Home) [97.118.117.21]:38026 X-Source-Auth: tom+tromey.com X-Email-Count: 8 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-23.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, JMQ_SPF_NEUTRAL, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_ABUSEAT, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 25 Mar 2020 20:07:22 -0000 As mentioned in another thread, there's currently no need to call compute_and_set_names for partial symbols. Because the DWARF partial symbol reader constructs demangled names, this call can only demangle a name by mistake. So, this patch changes the DWARF reader to simply set the linkage name on the new symbol. This is equivalent to what was done before. There should be no user-visible change from this patch, aside from gdb speeding up a bit. ... there *should* be, but this regressed dw2-namespaceless-anonymous.exp. However, upon examination, I think that test is incorrect. It puts a mangled name into DW_AT_name, and it puts the variable at the top level, not in a namespace. This isn't what C++ compilers ought to do. So, this patch also updates the test case. gdb/ChangeLog 2020-03-25 Tom Tromey * dwarf2/read.c (add_partial_symbol): Do not call compute_and_set_names. gdb/testsuite/ChangeLog 2020-03-25 Tom Tromey * gdb.dwarf2/dw2-namespaceless-anonymous.S: Remove. * gdb.dwarf2/dw2-namespaceless-anonymous.c: New file. * gdb.dwarf2/dw2-namespaceless-anonymous.exp: Use DWARF assembler. --- gdb/ChangeLog | 5 + gdb/dwarf2/read.c | 6 +- gdb/testsuite/ChangeLog | 7 ++ .../gdb.dwarf2/dw2-namespaceless-anonymous.S | 93 ------------------- .../gdb.dwarf2/dw2-namespaceless-anonymous.c | 22 +++++ .../dw2-namespaceless-anonymous.exp | 44 +++++++-- 6 files changed, 75 insertions(+), 102 deletions(-) delete mode 100644 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S create mode 100644 gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index c3723684386..2bc7b521f2e 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -8368,9 +8368,9 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) if (where.has_value ()) { - psymbol.ginfo.compute_and_set_names (actual_name, - built_actual_name != nullptr, - objfile->per_bfd); + if (built_actual_name != nullptr) + actual_name = objfile->intern (actual_name); + psymbol.ginfo.set_linkage_name (actual_name); add_psymbol_to_list (psymbol, *where, objfile); } } diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S deleted file mode 100644 index e5b1d66bb3a..00000000000 --- a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.S +++ /dev/null @@ -1,93 +0,0 @@ -/* This testcase is part of GDB, the GNU debugger. - - Copyright 2012-2020 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 . */ - - .data -var: .4byte 1 - - .section .debug_info -.Lcu1_begin: - /* CU header */ - .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ -.Lcu1_start: - .2byte 2 /* DWARF Version */ - .4byte .Labbrev1_begin /* Offset into abbrev section */ - .byte 4 /* Pointer size */ - - /* CU die */ - .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ - .ascii "file1.txt\0" /* DW_AT_name */ - .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ - .byte 4 /* DW_LANG_C_plus_plus (C++) */ - -.Ltype_myint: - .uleb128 2 /* Abbrev: DW_TAG_base_type */ - .ascii "myint\0" /* DW_AT_name */ - .byte 4 /* DW_AT_byte_size */ - .byte 5 /* DW_AT_encoding */ - - .uleb128 7 /* Abbrev: DW_TAG_variable (location) */ - .ascii "_ZN12_GLOBAL__N_11vE\0" /* DW_AT_name = "(anonymous namespace)::v" */ - .byte 2f - 1f /* DW_AT_location */ -1: .byte 3 /* DW_OP_addr */ - .4byte var /* */ -2: .4byte .Ltype_myint-.Lcu1_begin /* DW_AT_type */ - - .byte 0 /* End of children of CU */ - -.Lcu1_end: - -/* Abbrev table */ - .section .debug_abbrev -.Labbrev1_begin: - .uleb128 1 /* Abbrev code */ - .uleb128 0x11 /* DW_TAG_compile_unit */ - .byte 1 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x25 /* DW_AT_producer */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x13 /* DW_AT_language */ - .uleb128 0xb /* DW_FORM_data1 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .uleb128 2 /* Abbrev code */ - .uleb128 0x24 /* DW_TAG_base_type */ - .byte 0 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0xb /* DW_AT_byte_size */ - .uleb128 0xb /* DW_FORM_data1 */ - .uleb128 0x3e /* DW_AT_encoding */ - .uleb128 0xb /* DW_FORM_data1 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .uleb128 7 /* Abbrev code (location) */ - .uleb128 0x34 /* DW_TAG_variable */ - .byte 0 /* has_children */ - .uleb128 0x3 /* DW_AT_name */ - .uleb128 0x8 /* DW_FORM_string */ - .uleb128 0x2 /* DW_AT_location */ - .uleb128 0xa /* DW_FORM_block1 */ - .uleb128 0x49 /* DW_AT_type */ - .uleb128 0x13 /* DW_FORM_ref4 */ - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ - - .byte 0x0 /* Terminator */ - .byte 0x0 /* Terminator */ diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c new file mode 100644 index 00000000000..3c5e258090c --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 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 . */ + +char _ZN12_GLOBAL__N_11vE = 1; + +int main () +{ +} diff --git a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp index 1edc468d62f..5b61a6ba928 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-namespaceless-anonymous.exp @@ -14,19 +14,51 @@ # along with this program. If not, see . load_lib dwarf.exp +load_lib dwarf.exp + # This test can only be run on targets which support DWARF-2 and use gas. if {![dwarf2_support]} { return 0 } -standard_testfile .S +standard_testfile dw2-namespaceless-anonymous.c dw2-namespaceless-anonymous.S -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" $binfile \ - object {nodebug}] != "" } { - return -1 +set asm_file [standard_output_file $srcfile2] +Dwarf::assemble $asm_file { + global srcdir subdir srcfile + + cu {} { + DW_TAG_compile_unit { + {DW_AT_language @DW_LANG_C_plus_plus} + {DW_AT_name dw2-namespaceless-anonymous.c} + {DW_AT_comp_dir /tmp} + } { + declare_labels myint + + myint: DW_TAG_base_type { + {DW_AT_byte_size 1 DW_FORM_sdata} + {DW_AT_encoding @DW_ATE_signed} + {DW_AT_name myint} + } + + DW_TAG_namespace {} { + DW_TAG_variable { + {DW_AT_name v} + {DW_AT_linkage_name _ZN12_GLOBAL__N_11vE} + {DW_AT_location { + DW_OP_addr [gdb_target_symbol _ZN12_GLOBAL__N_11vE] + } SPECIAL_expr} + {DW_AT_type :$myint} + } + } + } + } } -clean_restart $testfile +if {[prepare_for_testing ${testfile}.exp ${testfile} \ + [list $srcfile $asm_file] {nodebug}] } { + return -1 +} gdb_test "ptype '(anonymous namespace)::v'" "type = myint" -gdb_test "p '(anonymous namespace)::v'" " = 1" +gdb_test "p/d '(anonymous namespace)::v'" " = 1" -- 2.17.2