From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id AFC5D385E009 for ; Sat, 28 Mar 2020 16:32:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org AFC5D385E009 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.11] (unknown [192.222.164.54]) (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 000491E5F9; Sat, 28 Mar 2020 12:32:47 -0400 (EDT) Subject: Re: [PATCH][gdb] Fix missing symtab includes To: Tom de Vries , gdb-patches@sourceware.org Cc: Tom Tromey References: <20200327204948.GA23365@delia> From: Simon Marchi Message-ID: Date: Sat, 28 Mar 2020 12:32:47 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200327204948.GA23365@delia> Content-Type: text/plain; charset=utf-8 Content-Language: en-US-large Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, 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-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: Sat, 28 Mar 2020 16:32:51 -0000 On 2020-03-27 4:49 p.m., Tom de Vries wrote: > Hi, > > Consider hello.h: > ... > inline static const char* > foo (void) > { > return "foo"; > } > ... > and hello.c: > ... > #include > #include "hello.h" > > int > main (void) > { > printf ("hello: %s\n", foo ()); > return 0; > } > ... > compiled with -g, and dwz-compressed: > ... > $ gcc -g hello.c > $ dwz a.out > ... > > When breaking on foo and printing the symbol tables, we have two includes for > the hello.c compunit_symtab, representing two imported partial units: > ... > $ gdb -iex "set language c" -batch a.out -ex "b foo" -ex "maint info symtabs" > Breakpoint 1 at 0x40050b: file hello.h, line 4. > ... > { ((struct compunit_symtab *) 0x38fa890) > debugformat DWARF 2 > producer GNU C11 7.5.0 -mtune=generic -march=x86-64 -g > dirname /data/gdb_versions/devel > blockvector ((struct blockvector *) 0x39af9f0) > user ((struct compunit_symtab *) (null)) > ( includes > ((struct compunit_symtab *) 0x39afb10) > ((struct compunit_symtab *) 0x39b00c0) > ) > { symtab hello.c ((struct symtab *) 0x38fa940) > fullname (null) > linetable ((struct linetable *) 0x39afa80) > } > ... I am not able to reproduce this. In both cases, I don't get the `includes`. What transformation is dwz expected to do on the binary? Here, it looks like it just compressed the debug info a little bit, changing the addresses, but the general structure was untouched. I'm using the latest git version of dwz (commit b7111689a2ccec2f57343f1051ec8f1df5e89e5c). Simon