This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [OB] Fix xcoffread.c build error
On Friday 20 May 2011 06:12:11, Hui Zhu wrote:
> On Thu, May 19, 2011 at 17:59, Pedro Alves <pedro@codesourcery.com> 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 <teawater@gmail.com>
> >>
> >> * 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 <pedro@codesourcery.com>
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;
}