From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id D1D82385E02D for ; Sat, 26 Jun 2021 02:50:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D1D82385E02D Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 15Q2oNrS028638 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Jun 2021 22:50:28 -0400 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 15Q2oNrS028638 Received: from [10.0.0.11] (192-222-157-6.qc.cable.ebox.net [192.222.157.6]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 4889B1E01F; Fri, 25 Jun 2021 22:50:23 -0400 (EDT) Subject: Re: gdb unable to print alias variable To: kamlesh kumar , gdb@sourceware.org References: From: Simon Marchi Message-ID: Date: Fri, 25 Jun 2021 22:50:22 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Sat, 26 Jun 2021 02:50:23 +0000 X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_PASS, SPF_PASS, 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@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Jun 2021 02:50:31 -0000 On 2021-06-23 8:34 p.m., kamlesh kumar via Gdb wrote: > Hi Devs, > Currently clang does not produce debug info for alias variables, I am > working on this feature, by having DW_TAG_imported_declaration for > alias variable but gdb does not work with this. > below is demonstration > > consider this testcase, > ----------- > int oldname = 1; > extern int newname attribute((alias("oldname"))); > int main(){} > --------------------- > $clang test.c -g > $gdb a.out > (gdb) pt oldname > type = int > (gdb) pt newname > type = > (gdb) p newname > 'newname' has unknown type; cast it to its declared type > > Here is debug info in ./a.out by clang > dumped debug info (using llvm-dwarfdump) > test.o: file format elf64-x86-64 > > .debug_info contents: > 0x00000000: Compile Unit: length = 0x00000067, format = DWARF32, > version = 0x0004, abbr_offset = 0x0000, addr_size = 0x08 (next unit at > 0x0000006b) > > 0x0000000b: DW_TAG_compile_unit > DW_AT_producer ("clang version 13.0.0 > (git@github.com:llvm/llvm-project.git > 4cd7169f5517167ef456e82c6dcae669bde6c725)") > DW_AT_language (DW_LANG_C99) > DW_AT_name ("test.c") > DW_AT_stmt_list (0x00000000) > DW_AT_comp_dir ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin") > DW_AT_low_pc (0x0000000000000000) > DW_AT_high_pc (0x0000000000000008) > > 0x0000002a: DW_TAG_variable > DW_AT_name ("oldname") > DW_AT_type (0x0000003f "int") > DW_AT_external (true) > DW_AT_decl_file > ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c") > DW_AT_decl_line (1) > DW_AT_location (DW_OP_addr 0x0) > > 0x0000003f: DW_TAG_base_type > DW_AT_name ("int") > DW_AT_encoding (DW_ATE_signed) > DW_AT_byte_size (0x04) > > 0x00000046: DW_TAG_imported_declaration > DW_AT_decl_file > ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c") > DW_AT_decl_line (2) > DW_AT_import (0x0000002a) > DW_AT_name ("newname") > > 0x00000051: DW_TAG_subprogram > DW_AT_low_pc (0x0000000000000000) > DW_AT_high_pc (0x0000000000000008) > DW_AT_frame_base (DW_OP_reg6 RBP) > DW_AT_name ("main") > DW_AT_decl_file > ("/folk/kkumar/tcllvm/llvm-build-lldb-rel/bin/test.c") > DW_AT_decl_line (3) > DW_AT_type (0x0000003f "int") > DW_AT_external (true) > > 0x0000006a: NULL > > Even though the newname has desired info, gdb is unable to print the > value or type of the newname. > I would like to know whether this is a bug in gdb, or debug info > itself is wrong(because of DW_TAG_imported_declaration for newname)? > Any other viable path to address alias variable debugging will be appreciated. My intuition, from looking at where DW_TAG_imported_declaration can be found in dwarf2/read.c, is that support for DW_TAG_imported_declaration was done with namespace imports in mind. For example, with this code: namespace foo { int x = 11; }; namespace bar = foo; int main() { return bar::x; } we get: 0x0000002a: DW_TAG_namespace DW_AT_name [DW_FORM_strp] ("foo") ... 0x00000050: DW_TAG_imported_declaration DW_AT_decl_file [DW_FORM_data1] ("/home/simark/build/binutils-gdb/gdb/test.cpp") DW_AT_decl_line [DW_FORM_data1] (6) DW_AT_import [DW_FORM_ref4] (0x0000002a) DW_AT_name [DW_FORM_strp] ("bar") And GDB is able to use bar: (gdb) p bar::x $1 = 11 If DW_TAG_imported_declaration is ever used to describe variable aliasing, then I don't see why that couldn't be supported in GDB, it would just be a matter of implementing it (which may or may not be difficult). Simon