From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9778 invoked by alias); 18 Jul 2009 05:45:25 -0000 Received: (qmail 9758 invoked by uid 22791); 18 Jul 2009 05:45:24 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_24,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mx2.redhat.com (HELO mx2.redhat.com) (66.187.237.31) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 18 Jul 2009 05:45:20 +0000 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6I5j8lX029225; Sat, 18 Jul 2009 01:45:08 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n6I5j7nF032160; Sat, 18 Jul 2009 01:45:08 -0400 Received: from host0.dyn.jankratochvil.net (sebastian-int.corp.redhat.com [172.16.52.221]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n6I5j45J011227; Sat, 18 Jul 2009 01:45:07 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.3/8.14.3) with ESMTP id n6I5j15I001803; Sat, 18 Jul 2009 07:45:02 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.3/8.14.3/Submit) id n6I5it3p001752; Sat, 18 Jul 2009 07:44:55 +0200 Date: Sat, 18 Jul 2009 13:50:00 -0000 From: Jan Kratochvil To: Ian Lance Taylor Cc: gcc-patches@gcc.gnu.org, binutils@sourceware.org, gdb-patches@sourceware.org, Tom Tromey Subject: Re: [patch] libiberty: demangle_component for `global {constructors,destructors} keyed to' Message-ID: <20090718054454.GA21618@host0.dyn.jankratochvil.net> References: <20090711201940.GA7327@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) X-IsSubscribed: yes 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 X-SW-Source: 2009-07/txt/msg00446.txt.bz2 On Tue, 14 Jul 2009 16:34:01 +0200, Ian Lance Taylor wrote: > Jan Kratochvil writes: > > > include/ > > 2009-07-11 Jan Kratochvil > > > > * demangle.h > > (enum demangle_component_type ) > > (enum demangle_component_type ): > > New. > > > > libiberty/ > > 2009-07-11 Jan Kratochvil > > > > * cp-demangle.c (d_print_comp ) > > (d_print_comp > (d_make_comp ) > > (d_make_comp > (d_demangle_callback): The variable type is now declared as enum. > > Replace parser of _GLOBAL_ symbols by a d_make_comp call. > > + dc = d_make_comp (&di, type == DCT_GLOBAL_CTORS > > + ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS > > + : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS, > > + d_make_name (&di, d_str (&di), strlen (d_str (&di))), > > + NULL); > > Format as [...] > This is OK with that change. Checked in with this change by Tom Tromey. (I will post the GDB change based on it next week.) > I assume you ran the libiberty testsuite. Yes, ran, no regressions. Thanks, Jan http://gcc.gnu.org/ml/gcc-cvs/2009-07/msg00638.html http://gcc.gnu.org/viewcvs?view=rev&revision=149756 --- trunk/include/ChangeLog 2009/07/17 18:49:03 149755 +++ trunk/include/ChangeLog 2009/07/17 19:09:54 149756 @@ -1,3 +1,10 @@ +2009-07-17 Jan Kratochvil + + * demangle.h + (enum demangle_component_type ) + (enum demangle_component_type ): + New. + 2009-07-09 Jakub Jelinek * dwarf2.h (enum dwarf_location_atom): Add DW_OP_implicit_value --- trunk/include/demangle.h 2009/07/17 18:49:03 149755 +++ trunk/include/demangle.h 2009/07/17 19:09:54 149756 @@ -377,6 +377,10 @@ DEMANGLE_COMPONENT_CHARACTER, /* A decltype type. */ DEMANGLE_COMPONENT_DECLTYPE, + /* Global constructors keyed to name. */ + DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS, + /* Global destructors keyed to name. */ + DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS, /* A pack expansion. */ DEMANGLE_COMPONENT_PACK_EXPANSION }; --- trunk/libiberty/ChangeLog 2009/07/17 18:49:03 149755 +++ trunk/libiberty/ChangeLog 2009/07/17 19:09:54 149756 @@ -1,3 +1,12 @@ +2009-07-17 Jan Kratochvil + + * cp-demangle.c (d_print_comp ) + (d_print_comp ) + (d_make_comp * hashtab.c (htab_traverse): Don't call htab_expand for --- trunk/libiberty/cp-demangle.c 2009/07/17 18:49:03 149755 +++ trunk/libiberty/cp-demangle.c 2009/07/17 19:09:54 149756 @@ -819,6 +819,8 @@ case DEMANGLE_COMPONENT_JAVA_RESOURCE: case DEMANGLE_COMPONENT_DECLTYPE: case DEMANGLE_COMPONENT_PACK_EXPANSION: + case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS: + case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS: if (left == NULL) return NULL; break; @@ -4054,6 +4056,16 @@ return; } + case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS: + d_append_string (dpi, "global constructors keyed to "); + d_print_comp (dpi, dc->u.s_binary.left); + return; + + case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS: + d_append_string (dpi, "global destructors keyed to "); + d_print_comp (dpi, dc->u.s_binary.left); + return; + default: d_print_error (dpi); return; @@ -4484,33 +4496,30 @@ d_demangle_callback (const char *mangled, int options, demangle_callbackref callback, void *opaque) { - int type; + enum + { + DCT_TYPE, + DCT_MANGLED, + DCT_GLOBAL_CTORS, + DCT_GLOBAL_DTORS + } + type; struct d_info di; struct demangle_component *dc; int status; if (mangled[0] == '_' && mangled[1] == 'Z') - type = 0; + type = DCT_MANGLED; else if (strncmp (mangled, "_GLOBAL_", 8) == 0 && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$') && (mangled[9] == 'D' || mangled[9] == 'I') && mangled[10] == '_') - { - const char *intro; - - intro = (mangled[9] == 'I') - ? "global constructors keyed to " - : "global destructors keyed to "; - - callback (intro, strlen (intro), opaque); - callback (mangled + 11, strlen (mangled + 11), opaque); - return 1; - } + type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS; else { if ((options & DMGL_TYPES) == 0) return 0; - type = 1; + type = DCT_TYPE; } cplus_demangle_init_info (mangled, options, strlen (mangled), &di); @@ -4527,10 +4536,26 @@ di.subs = alloca (di.num_subs * sizeof (*di.subs)); #endif - if (type) - dc = cplus_demangle_type (&di); - else - dc = cplus_demangle_mangled_name (&di, 1); + switch (type) + { + case DCT_TYPE: + dc = cplus_demangle_type (&di); + break; + case DCT_MANGLED: + dc = cplus_demangle_mangled_name (&di, 1); + break; + case DCT_GLOBAL_CTORS: + case DCT_GLOBAL_DTORS: + d_advance (&di, 11); + dc = d_make_comp (&di, + (type == DCT_GLOBAL_CTORS + ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS + : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS), + d_make_name (&di, d_str (&di), strlen (d_str (&di))), + NULL); + d_advance (&di, strlen (d_str (&di))); + break; + } /* If DMGL_PARAMS is set, then if we didn't consume the entire mangled string, then we didn't successfully demangle it. If