From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16680 invoked by alias); 29 Aug 2002 21:37:24 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 16665 invoked from network); 29 Aug 2002 21:37:23 -0000 Received: from unknown (HELO zenia.red-bean.com) (66.244.67.22) by sources.redhat.com with SMTP; 29 Aug 2002 21:37:23 -0000 Received: (from jimb@localhost) by zenia.red-bean.com (8.11.6/8.11.6) id g7TLOHN05198; Thu, 29 Aug 2002 16:24:17 -0500 To: Daniel Jacobowitz Cc: gdb-patches@sources.redhat.com Subject: Re: RFA: don't use minsym name when searching block References: <200208220526.g7M5Qp520822@zenia.red-bean.com> <20020822125030.GA27560@nevyn.them.org> From: Jim Blandy Date: Thu, 29 Aug 2002 14:41:00 -0000 In-Reply-To: <20020822125030.GA27560@nevyn.them.org> Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2.90 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-08/txt/msg01000.txt.bz2 Daniel Jacobowitz writes: > On Thu, Aug 22, 2002 at 12:26:51AM -0500, Jim Blandy wrote: > > > > I'd appreciate it if the C++ folks could check this out. I don't have > > a test case yet, but I'll try to put one together tomorrow. > > Could you describe the problem? Also... "the minsym's name might be > mangled" definitely seems like a problem; they should either be > consistently mangled or demangled... Minimal symbol names are consistently mangled, which makes sense: they're linker symbols, after all. You have to use SYMBOL_DEMANGLED_NAME to get a minsym's demangled name. But the names of real symbols (struct symbol) are always demangled. So when we pass SYMBOL_NAME (msymbol) to lookup_block_symbol, we're passing a name guaranteed to be mangled to a function that expects a demangled name. I'm working on a test case for this. The symptom is that, when you try to set a breakpoint on a method, say foo::bar, you get an error message, but if you then repeat the exact same command, it works the second time. What's going on is that, the first time we call lookup_symbol_aux, which is passed both the mangled name and the demangled name, we hit the case being patched: we find a minsym, and read the symtab whose address range contains the minsym's value. However, since we then search the global and static blocks using the mangled name, we fail. The second time we try to lookup foo::bar, the symtab has been read, and the ALL_SYMTABS loop finds the symbol. > > 2002-08-21 Jim Blandy > > > > * symtab.c (lookup_symbol_aux): In the case where we find a > > minimal symbol of an appropriate name and use its address to > > select a symtab to read and search, use `name' (as passed to us) > > as the demangled name when searching the symtab's global and > > static blocks, not the minsym's name. The minsym's name might be > > mangled. > > Style nit - a comment like this belongs in the code, not in the > changelog. Yes, you're right. Once I saw the problem, the code seemed so obviously wrong to me that I thought a comment would be redundant --- minsym names are mangled, and lookup_block_symbol expects a demangled name. But you're right: before I had worked through the problem, it wasn't obviously wrong.