From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9937 invoked by alias); 13 Jun 2016 13:35:56 -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 9912 invoked by uid 89); 13 Jun 2016 13:35:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.3 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=fly, Hx-languages-length:2076 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 (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 13 Jun 2016 13:35:53 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (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 551F57AE91; Mon, 13 Jun 2016 13:35:52 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u5DDZoGD015784; Mon, 13 Jun 2016 09:35:50 -0400 Subject: Re: [RFA 3/3] Move logic out of symbol_find_demangled_name To: Tom Tromey References: <1465051760-25840-1-git-send-email-tom@tromey.com> <1465051760-25840-4-git-send-email-tom@tromey.com> <86mvmywgj1.fsf@gmail.com> <87wpm05sw7.fsf@tromey.com> <87k2i05nv2.fsf@tromey.com> Cc: Yao Qi , gdb-patches@sourceware.org From: Pedro Alves Message-ID: <59f4d63e-baa6-cd85-4cee-c453a07f9251@redhat.com> Date: Mon, 13 Jun 2016 13:35:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.0 MIME-Version: 1.0 In-Reply-To: <87k2i05nv2.fsf@tromey.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-06/txt/msg00226.txt.bz2 On 06/08/2016 05:02 AM, Tom Tromey wrote: > * cp-support.h (gdb_sniff_from_mangled_name): Declare. > * cp-support.c (gdb_sniff_from_mangled_name): New function. I think this one would be better called cp_sniff_from_mangled_name. > +static int > +ada_sniff_from_mangled_name (const char *mangled, char **out) > +{ > + const char *demangled = ada_decode (mangled); > + > + *out = NULL; > + > + if (demangled != mangled && demangled != NULL && demangled[0] != '<') > + { > + /* Set the gsymbol language to Ada, but still return 0. This sentence needs updating. > + Two reasons for that: > + > + 1. For Ada, we prefer computing the symbol's decoded name > + on the fly rather than pre-compute it, in order to save > + memory (Ada projects are typically very large). > + > + 2. There are some areas in the definition of the GNAT > + encoding where, with a bit of bad luck, we might be able > + to decode a non-Ada symbol, generating an incorrect > + demangled name (Eg: names ending with "TB" for instance > + are identified as task bodies and so stripped from > + the decoded name returned). > + > + Returning 1, here, but not setting *DEMANGLED, helps us get a This one too: it's OUT, not DEMANGLED. > + little bit of the best of both worlds. Because we're last, > + we should not affect any of the other languages that were > + able to demangle the symbol before us; we get to correctly > + tag Ada symbols as such; and even if we incorrectly tagged a > + non-Ada symbol, which should be rare, any routing through the > + Ada language should be transparent (Ada tries to behave much > + like C/C++ with non-Ada symbols). */ > + return 1; > + } > + > + return 0; > +} > + > --- a/gdb/language.c > +++ b/gdb/language.c > @@ -663,6 +663,23 @@ language_demangle (const struct language_defn *current_language, > return NULL; > } > > +/* See langauge.h. */ Typo. > + > +int > +language_sniff_from_mangled_name (const struct language_defn *lang, > + const char *mangled, char **demangled) > +{ Thanks, Pedro Alves