From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32108 invoked by alias); 8 Oct 2002 23:58:21 -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 32075 invoked from network); 8 Oct 2002 23:58:20 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 8 Oct 2002 23:58:20 -0000 Received: from int-mx2.corp.redhat.com (nat-pool-rdu-dmz.redhat.com [172.16.52.200]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id g98NcdX18087 for ; Tue, 8 Oct 2002 19:38:39 -0400 Received: from potter.sfbay.redhat.com (potter.sfbay.redhat.com [172.16.27.15]) by int-mx2.corp.redhat.com (8.11.6/8.11.6) with ESMTP id g98NwDl01595; Tue, 8 Oct 2002 19:58:13 -0400 Received: from redhat.com (dhcp-172-16-25-149.sfbay.redhat.com [172.16.25.149]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g98NwCN29788; Tue, 8 Oct 2002 16:58:12 -0700 Message-ID: <3DA370CE.78089D15@redhat.com> Date: Tue, 08 Oct 2002 16:58:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Adam Fedor CC: gdb-patches@sources.redhat.com Subject: Re: [PATCH] Objective-C language support. References: <3D889A97.90202@doc.com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-10/txt/msg00193.txt.bz2 Adam Fedor wrote: > > This patch adds Objective-C language support to gdb based upon a patch > provided by Apple Computer Inc from their version of gdb. Note that the > patch only contains changes to existing files. New files (objc-lang.h, > objc-lang.c, objc-exp.y) and a gdb.objc testsuite directory are located at > > ftp://ftp.gnustep.org/pub/gnustep/contrib/gdb-objc-patch.tar.gz I can approve this, but you'll have to comment out the bit that calls objc_demangle for now, until the entire patch is ready to go on line. Otherwise it'll come up undefined. > * utils.c (puts_filtered_tabular): New function. > (fprintf_symbol_filtered): Get ObjC demangled name. > * valops.c (call_function_by_hand_expecting_type): New function. > (value_of_local): New function. > (value_of_this): Use it. > Index: gdb/utils.c > =================================================================== > RCS file: /cvs/src/src/gdb/utils.c,v > retrieving revision 1.76 > diff -u -p -r1.76 utils.c > --- gdb/utils.c 1 Aug 2002 17:18:33 -0000 1.76 > +++ gdb/utils.c 17 Sep 2002 19:31:08 -0000 > @@ -152,13 +152,13 @@ int quit_flag; > > int immediate_quit; > > -/* Nonzero means that encoded C++ names should be printed out in their > - C++ form rather than raw. */ > +/* Nonzero means that encoded C++/ObjC names should be printed out in their > + C++/ObjC form rather than raw. */ > > int demangle = 1; > > -/* Nonzero means that encoded C++ names should be printed out in their > - C++ form even in assembler language displays. If this is set, but > +/* Nonzero means that encoded C++/ObjC names should be printed out in their > + C++/ObjC form even in assembler language displays. If this is set, but > DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */ > > int asm_demangle = 0; > @@ -1696,6 +1696,51 @@ wrap_here (char *indent) > } > } > > +/* Print input string to gdb_stdout, filtered, with wrap, > + arranging strings in columns of n chars. String can be > + right or left justified in the column. Never prints > + trailing spaces. String should never be longer than > + width. FIXME: this could be useful for the EXAMINE > + command, which currently doesn't tabulate very well */ > + > +void > +puts_filtered_tabular (char *string, int width, int right) > +{ > + int spaces = 0; > + int stringlen; > + char *spacebuf; > + > + gdb_assert (chars_per_line > 0); > + if (chars_per_line == UINT_MAX) > + { > + fputs_filtered (string, gdb_stdout); > + fputs_filtered ("\n", gdb_stdout); > + return; > + } > + > + if (((chars_printed - 1) / width + 2) * width >= chars_per_line) > + fputs_filtered ("\n", gdb_stdout); > + > + if (width >= chars_per_line) > + width = chars_per_line - 1; > + > + stringlen = strlen (string); > + > + if (chars_printed > 0) > + spaces = width - (chars_printed - 1) % width - 1; > + if (right) > + spaces += width - stringlen; > + > + spacebuf = alloca (spaces + 1); > + spacebuf[spaces] = '\0'; > + while (spaces--) > + spacebuf[spaces] = ' '; > + > + fputs_filtered (spacebuf, gdb_stdout); > + fputs_filtered (string, gdb_stdout); > +} > + > + > /* Ensure that whatever gets printed next, using the filtered output > commands, starts at the beginning of the line. I.E. if there is > any pending output for the current line, flush it and start a new > @@ -2123,7 +2168,7 @@ print_spaces_filtered (int n, struct ui_ > fputs_filtered (n_spaces (n), stream); > } > > -/* C++ demangler stuff. */ > +/* C++/ObjC demangler stuff. */ > > /* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language > LANG, using demangling args ARG_MODE, and print it filtered to STREAM. > @@ -2153,6 +2198,9 @@ fprintf_symbol_filtered (struct ui_file > case language_java: > demangled = cplus_demangle (name, arg_mode | DMGL_JAVA); > break; > + case language_objc: > + demangled = objc_demangle (name); > + break; > #if 0 > /* OBSOLETE case language_chill: */ > /* OBSOLETE demangled = chill_demangle (name); */ > @@ -2272,7 +2320,7 @@ initialize_utils (void) > add_show_from_set > (add_set_cmd ("demangle", class_support, var_boolean, > (char *) &demangle, > - "Set demangling of encoded C++ names when displaying symbols.", > + "Set demangling of encoded C++/ObjC names when displaying symbols.", > &setprintlist), > &showprintlist); > > @@ -2300,7 +2348,7 @@ initialize_utils (void) > add_show_from_set > (add_set_cmd ("asm-demangle", class_support, var_boolean, > (char *) &asm_demangle, > - "Set demangling of C++ names in disassembly listings.", > + "Set demangling of C++/ObjC names in disassembly listings.", > &setprintlist), > &showprintlist); > }