From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17695 invoked by alias); 4 May 2005 00:20:11 -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 17586 invoked from network); 4 May 2005 00:19:57 -0000 Received: from unknown (HELO priv-edtnes56.telusplanet.net) (199.185.220.220) by sourceware.org with SMTP; 4 May 2005 00:19:57 -0000 Received: from takamaka.act-europe.fr ([154.20.104.226]) by priv-edtnes56.telusplanet.net (InterMail vM.6.01.04.04 201-2131-118-104-20050224) with ESMTP id <20050504001956.XCXG13846.priv-edtnes56.telusplanet.net@takamaka.act-europe.fr> for ; Tue, 3 May 2005 18:19:56 -0600 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id ABC4F47DC4; Tue, 3 May 2005 17:19:55 -0700 (PDT) Date: Wed, 04 May 2005 00:20:00 -0000 From: Joel Brobecker To: gdb-patches@sources.redhat.com Subject: [RFC/RFA] Set current language when dumping symtab Message-ID: <20050504001955.GE2439@adacore.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="qDbXVdCdHGoSgWSk" Content-Disposition: inline User-Agent: Mutt/1.4i X-SW-Source: 2005-05/txt/msg00099.txt.bz2 --qDbXVdCdHGoSgWSk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 1355 Hello, One of our users tried to use the "maint print symbols syms" command to dump all the symbols in a text format, and that caused a crash on x86-windows. The reason for the crash is that dump_symtab() indirectly uses the current language vector to analyze the symbols and then do the printing. The symtab language may be different from the current language, so the current language needs to be temporarily adjusted during the printing. This is what the attached patch does. 2005-05-02 Joel Brobecker * symmisc.c (dump_symtab_1): Renamed from dump_symtab. (dump_symtab): New function. * Makefile.in (symmisc.o): Add dependency on ui-out.h. Tested on x86-linux, no regression. You'll notice that I formally tested the change on x86-linux, as running the testsuite on x86-windows just takes forever (I never had the patience to wait till the end), but I did verify that this fixes the problem, and that the output using the language assocated to each symtab we're printing. Also, I think we need to do the same for print_msymbols() and print_psymbols(). I'm a bit in a rush at the moment, so I'm sending this patch as is for now. I'll understand if I need to rework it later to include the minsyms and psyms. I thought it might already be useful to others as is. Just let me know. Thanks, -- Joel --qDbXVdCdHGoSgWSk Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="symmisc.c.diff" Content-length: 2248 Index: symmisc.c =================================================================== RCS file: /cvs/src/src/gdb/symmisc.c,v retrieving revision 1.38 diff -u -p -r1.38 symmisc.c --- symmisc.c 14 Feb 2005 14:37:38 -0000 1.38 +++ symmisc.c 4 May 2005 00:10:06 -0000 @@ -37,6 +37,7 @@ #include "gdb_regex.h" #include "gdb_stat.h" #include "dictionary.h" +#include "ui-out.h" #include "gdb_string.h" #include "readline/readline.h" @@ -440,8 +441,8 @@ dump_psymtab (struct objfile *objfile, s } static void -dump_symtab (struct objfile *objfile, struct symtab *symtab, - struct ui_file *outfile) +dump_symtab_1 (struct objfile *objfile, struct symtab *symtab, + struct ui_file *outfile) { int i; struct dict_iterator iter; @@ -533,6 +534,26 @@ dump_symtab (struct objfile *objfile, st } } +static void +dump_symtab (struct objfile *objfile, struct symtab *symtab, + struct ui_file *outfile) +{ + enum language saved_lang; + volatile struct gdb_exception except; + + /* Set the current language to the language of the symtab we're dumping + because certain routines used during dump_symtab() use the current + language to print an image of the symbol. We'll restore it later. */ + saved_lang = set_language (symtab->language); + + TRY_CATCH (except, RETURN_MASK_ERROR) + { + dump_symtab_1 (objfile, symtab, outfile); + } + + set_language (saved_lang); +} + void maintenance_print_symbols (char *args, int from_tty) { Index: Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/Makefile.in,v retrieving revision 1.726 diff -u -p -r1.726 Makefile.in --- Makefile.in 2 May 2005 12:05:11 -0000 1.726 +++ Makefile.in 4 May 2005 00:10:31 -0000 @@ -2643,7 +2643,7 @@ symmisc.o: symmisc.c $(defs_h) $(symtab_ $(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \ $(gdb_obstack_h) $(exceptions_h) $(language_h) $(bcache_h) \ $(block_h) $(gdb_regex_h) $(dictionary_h) $(gdb_string_h) \ - $(readline_h) + $(readline_h) $(ui_out_h) symtab.o: symtab.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(gdbcore_h) \ $(frame_h) $(target_h) $(value_h) $(symfile_h) $(objfiles_h) \ $(gdbcmd_h) $(call_cmds_h) $(gdb_regex_h) $(expression_h) \ --qDbXVdCdHGoSgWSk--