From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24750 invoked by alias); 24 May 2011 16:28:11 -0000 Received: (qmail 24734 invoked by uid 22791); 24 May 2011 16:28:08 -0000 X-SWARE-Spam-Status: No, hits=0.9 required=5.0 tests=AWL,BAYES_00,KAM_STOCKTIP,TW_FC,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 24 May 2011 16:27:53 +0000 Received: (qmail 20593 invoked from network); 24 May 2011 16:27:52 -0000 Received: from unknown (HELO scottsdale.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 24 May 2011 16:27:52 -0000 From: Pedro Alves To: Hui Zhu Subject: Re: [OB] Fix xcoffread.c build error Date: Tue, 24 May 2011 16:28:00 -0000 User-Agent: KMail/1.13.5 (Linux/2.6.35-28-generic; KDE/4.6.2; x86_64; ; ) Cc: gdb-patches@sourceware.org, Tristan Gingold References: <201105191059.02173.pedro@codesourcery.com> In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201105241727.43826.pedro@codesourcery.com> 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: 2011-05/txt/msg00571.txt.bz2 On Friday 20 May 2011 06:12:11, Hui Zhu wrote: > On Thu, May 19, 2011 at 17:59, Pedro Alves wrote: > > On Thursday 19 May 2011 07:56:00, Hui Zhu wrote: > >> gcc -g -O2 -I. -I../../src/gdb -I../../src/gdb/common > >> -I../../src/gdb/config -DLOCALEDIR="\"/usr/local/share/locale\"" > >> -DHAVE_CONFIG_H -I../../src/gdb/../include/opcode > >> -I../../src/gdb/../opcodes/.. -I../../src/gdb/../readline/.. -I../bfd > >> -I../../src/gdb/../bfd -I../../src/gdb/../include -I../libdecnumber > >> -I../../src/gdb/../libdecnumber -I../../src/gdb/gnulib -Ignulib > >> -DMI_OUT=1 -DTUI=1 -DGDBTK -Wall -Wdeclaration-after-statement > >> -Wpointer-arith -Wformat-nonliteral -Wno-pointer-sign -Wno-unused > >> -Wunused-value -Wunused-function -Wno-switch -Wno-char-subscripts > >> -Werror -c -o xcoffread.o -MT xcoffread.o -MMD -MP -MF > >> .deps/xcoffread.Tpo ../../src/gdb/xcoffread.c > >> cc1: warnings being treated as errors > >> ../../src/gdb/xcoffread.c: In function 'xcoff_psymtab_to_symtab_1': > >> ../../src/gdb/xcoffread.c:964:25: error: > >> 'fcn_aux_saved$x_sym$x_misc$x_fsize' may be used uninitialized in this > >> function > >> make[2]: *** [xcoffread.o] Error 1 > >> make[2]: Leaving directory `/home/teawater/gdb/cvs/ba/gdb' > >> make[1]: *** [all-gdb] Error 2 > >> make[1]: Leaving directory `/home/teawater/gdb/cvs/ba' > >> make: *** [all] Error 2 > >> > >> 2011-05-19 Hui Zhu > >> > >> * xcoffread.c (read_xcoff_symtab): Initialize fcn_aux_saved. > >> =================================================================== > >> RCS file: /cvs/src/src/gdb/xcoffread.c,v > >> retrieving revision 1.87 > >> retrieving revision 1.88 > >> diff -u -r1.87 -r1.88 > >> --- src/gdb/xcoffread.c 2011/04/19 14:33:09 1.87 > >> +++ src/gdb/xcoffread.c 2011/05/19 06:54:30 1.88 > >> @@ -961,7 +961,7 @@ > >> struct coff_symbol fcn_stab_saved = { 0 }; > >> > >> /* fcn_cs_saved is global because process_xcoff_symbol needs it. */ > >> - union internal_auxent fcn_aux_saved; > >> + union internal_auxent fcn_aux_saved = main_aux; > > > > Hmm? Initializing fcn_aux_saved with the also uninitialized > > main_aux makes the warning go away? > > > > This appears to be hiding a real bug. > > > >> struct context_stack *new; > >> > >> char *filestring = " _start_ "; /* Name of the current file. */ > >> > > > > -- > > Pedro Alves > > > > I am sorry that I just make it can be build but looks didn't fix it. > > I checked all of this function: > while (symnum < max_symnum) > { > if ((cs->c_sclass == C_EXT || cs->c_sclass == C_HIDEXT) > && cs->c_naux == 1) > { > bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, > 0, cs->c_naux, &main_aux); > > case XTY_LD: > case XMC_PR: > fcn_aux_saved = main_aux; > > > case C_FCN: > else if (strcmp (cs->c_name, ".ef") == 0) > finish_block (new->name, &local_symbols, new->old_blocks, > new->start_addr, > (fcn_cs_saved.c_value > + fcn_aux_saved.x_sym.x_misc.x_fsize > + ANOFFSET (objfile->section_offsets, > SECT_OFF_TEXT (objfile))), > objfile); > > > Not sure I can fixed it or not. What about add a "fcn_aux_saved = > main_aux;" after "bfd_coff_swap_aux_in"? It that were possible, then why would we need fcn_aux_saved at all? This is a bit hard to follow without a file to test with, but ISTM that fcn_aux_saved is needed because main_aux no longer contains what we need at the time time fcn_aux_saved is used (that is, we've moved to another symbol/aux). Does gcc still output a warning with this for you? Maybe Tristian can check if this doesn't break something? (I suppose fcn_aux_saved and a bunch other locals should be cleared somewhere, most likely after finish_block, or where we do the complaints.) -- Pedro Alves 2011-05-24 Pedro Alves gdb/ * xcoffread.c (read_xcoff_symtab): Don't initialize fcn_aux_saved with main_aux. New local fcn_aux_saved_p. Set it when fcn_aux_saved is set. When finishing a function block, if fcn_aux_saved_p is false, ignore the function. --- gdb/xcoffread.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) Index: src/gdb/xcoffread.c =================================================================== --- src.orig/gdb/xcoffread.c 2011-05-19 18:57:19.000000000 +0100 +++ src/gdb/xcoffread.c 2011-05-24 16:44:17.298753682 +0100 @@ -961,7 +961,8 @@ read_xcoff_symtab (struct partial_symtab struct coff_symbol fcn_stab_saved = { 0 }; /* fcn_cs_saved is global because process_xcoff_symbol needs it. */ - union internal_auxent fcn_aux_saved = main_aux; + union internal_auxent fcn_aux_saved; + int fcn_aux_saved_p = 0; struct context_stack *new; char *filestring = " _start_ "; /* Name of the current file. */ @@ -1195,6 +1196,7 @@ read_xcoff_symtab (struct partial_symtab when `.bf' is seen. */ fcn_cs_saved = *cs; fcn_aux_saved = main_aux; + fcn_aux_saved_p = 1; continue; case XMC_GL: @@ -1329,6 +1331,13 @@ read_xcoff_symtab (struct partial_symtab { ef_complaint (cs->c_symnum); within_function = 0; + break; + } + + if (!fcn_aux_saved_p) + { + ef_complaint (cs->c_symnum); + within_function = 0; break; }