From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92468 invoked by alias); 23 Feb 2017 17:12:49 -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 92447 invoked by uid 89); 23 Feb 2017 17:12:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 23 Feb 2017 17:12:48 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 73A9AC05B1C4; Thu, 23 Feb 2017 17:12:48 +0000 (UTC) Received: from [127.0.0.1] (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id v1NHClSO015414; Thu, 23 Feb 2017 12:12:47 -0500 Subject: Re: [PATCH 3/3] Fix gdb.base/completion.exp with --target_board=dwarf4-gdb-index To: Yao Qi References: <1487775033-32699-1-git-send-email-palves@redhat.com> <1487775033-32699-4-git-send-email-palves@redhat.com> <86a89cc2u6.fsf@gmail.com> Cc: gdb-patches@sourceware.org From: Pedro Alves Message-ID: <1f393936-38be-f3ba-f8a9-6985830ce560@redhat.com> Date: Thu, 23 Feb 2017 17:12:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <86a89cc2u6.fsf@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2017-02/txt/msg00639.txt.bz2 On 02/23/2017 04:02 PM, Yao Qi wrote: > Pedro Alves writes: > > Hi Pedro, > I don't know much about symbtab, > >> - /* Find the symtab for SRCFILE (this loads it if it was not yet read >> - in). */ >> - s = lookup_symtab (srcfile); >> - if (s == NULL) >> + /* Go through symtabs for SRCFILE and check the externs and statics >> + for symbols which match. */ >> + iterate_over_symtabs (srcfile, [&] (struct symtab *symtab) >> { >> - /* Maybe they typed the file with leading directories, while the >> - symbol tables record only its basename. */ >> - const char *tail = lbasename (srcfile); >> - >> - if (tail > srcfile) >> - s = lookup_symtab (tail); > > This is removed, do we have something equivalent in iterate_over_symtabs? AFAICS, yes, though via other means. iterate_over_some_symtabs matches both the symtab name, and if that fails, tries the symtab's resolved fullname. The path actually fixes a bug related to this, it seems. Before the patch, any random absolute path would match, like: (gdb) b /silly/path/asdfasdfsdafasdfasdfsadfasdfasdfasdfasdfasdf/test.c: a foo int main() But then actually setting the breakpoint would fail: (gdb) b /silly/path/asdfasdfsdafasdfasdfsadfasdfasdfasdfasdfasdf/test.c:main No source file named /silly/path/asdfasdfsdafasdfasdfsadfasdfasdfasdfasdfasdf/test.c. Make breakpoint pending on future shared library load? (y or [n]) n While after the patch, only full paths that gdb can resolve in find_and_open_source, according to the source lookup rules, match for completion. I.e., in my quick test, completing "/home/pedro/tmp/test.c:", which is the source file's real path, matches for completion, but the silly path above does not. If I move the source file elsewhere and use the "dir" command to point GDB at it, completion now finds it there: (gdb) b /home/pedro/tmp2/test.c: #nothing (gdb) dir /home/pedro/tmp2/ Source directories searched: /home/pedro/tmp2:$cdir:$cwd (gdb) b /home/pedro/tmp2/test.c: a foo int main() (gdb) b /home/pedro/tmp/dirs/ctor.cc:main Note: breakpoint 1 also set at pc 0x4005ba. So this patch makes completion consistent with the rest of gdb, which seems like a desirable change. I'll try to come up with a test case for this. Thanks, Pedro Alves