From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9294 invoked by alias); 6 Jan 2003 15:00:57 -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 9256 invoked from network); 6 Jan 2003 15:00:48 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 6 Jan 2003 15:00:48 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h06EX4B24308 for ; Mon, 6 Jan 2003 09:33:04 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h06F0aa02885 for ; Mon, 6 Jan 2003 10:00:36 -0500 Received: from localhost.redhat.com (romulus-int.sfbay.redhat.com [172.16.27.46]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h06F0Zl00329 for ; Mon, 6 Jan 2003 10:00:35 -0500 Received: by localhost.redhat.com (Postfix, from userid 469) id EDCCBFF7A; Mon, 6 Jan 2003 10:04:58 -0500 (EST) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15897.39706.831980.258406@localhost.redhat.com> Date: Mon, 06 Jan 2003 15:00:00 -0000 To: Joel Brobecker Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA] Fix a "pc ... in psymtab but not in symtab" internal error warning In-Reply-To: <20030106113618.GV693@gnat.com> References: <20030103190722.GL693@gnat.com> <20030103191915.GA7201@nevyn.them.org> <20030106113618.GV693@gnat.com> X-SW-Source: 2003-01/txt/msg00208.txt.bz2 Yes, thanks. Elena Joel Brobecker writes: > > > 2003-01-03 J. Brobecker > > > > > > * mdebugread.c (parse_symbol): Skip stProc entries which storage > > > class is not scText. These do not define "real" procedures. > > > (parse_partial_symbols): Likewise. > > > > > > Ahem, ok to commit? > > > > Yes, I think so. Meanwhile, I recommend: > > http://www.testdrive.hp.com/os/#tru64 > > > > I imagine they've got a C++ compiler available; yeah, it's a bit of a > > nuisance to use their systems, but... > > Ok, I have tested my change in one of their machines. Announcement: I > had to install gcc + dejagnu there, so if anyone is interested: I > installed GNAT 3.16w (2.8.1 based) + dejagnu in /house/brobecke/osf/bin. > > My change did not show any regression in the C++ directory (did not run > the other tests), although as Daniel suggested, the results are rather > modest. For the record: > > # of expected passes 878 > # of unexpected failures 276 > # of expected failures 7 > # of unresolved testcases 33 > > Here is a new patch, with the comments a bit expanded, as recommended > by Elena. > > Should I check this in? > > Thanks, > -- > Joel > Index: mdebugread.c > =================================================================== > RCS file: /cvs/src/src/gdb/mdebugread.c,v > retrieving revision 1.35 > diff -c -3 -p -r1.35 mdebugread.c > *** mdebugread.c 3 Jan 2003 15:34:59 -0000 1.35 > --- mdebugread.c 6 Jan 2003 11:26:38 -0000 > *************** parse_symbol (SYMR *sh, union aux_ext *a > *** 751,756 **** > --- 751,788 ---- > > case stProc: /* Procedure, usually goes into global block */ > case stStaticProc: /* Static procedure, goes into current block */ > + /* For stProc symbol records, we need to check the storage class > + as well, as only (stProc, scText) entries represent "real" > + procedures - See the Compaq document titled "Object File / > + Symbol Table Format Specification" for more information. > + If the storage class is not scText, we discard the whole block > + of symbol records for this stProc. */ > + if (sh->st == stProc && sh->sc != scText) > + { > + char *ext_tsym = ext_sh; > + int keep_counting = 1; > + SYMR tsym; > + > + while (keep_counting) > + { > + ext_tsym += external_sym_size; > + (*swap_sym_in) (cur_bfd, ext_tsym, &tsym); > + count++; > + switch (tsym.st) > + { > + case stParam: > + break; > + case stEnd: > + keep_counting = 0; > + break; > + default: > + complaint (&symfile_complaints, > + "unknown symbol type 0x%x", sh->st); > + break; > + } > + } > + break; > + } > s = new_symbol (name); > SYMBOL_NAMESPACE (s) = VAR_NAMESPACE; > SYMBOL_CLASS (s) = LOC_BLOCK; > *************** parse_partial_symbols (struct objfile *o > *** 3323,3328 **** > --- 3355,3393 ---- > /* FALLTHROUGH */ > > case stProc: > + /* Ignore all parameter symbol records. */ > + if (sh.index >= hdr->iauxMax) > + { > + /* Should not happen, but does when cross-compiling > + with the MIPS compiler. FIXME -- pull later. */ > + index_complaint (name); > + new_sdx = cur_sdx + 1; /* Don't skip at all */ > + } > + else > + new_sdx = AUX_GET_ISYM (fh->fBigendian, > + (debug_info->external_aux > + + fh->iauxBase > + + sh.index)); > + > + if (new_sdx <= cur_sdx) > + { > + /* This should not happen either... FIXME. */ > + complaint (&symfile_complaints, > + "bad proc end in aux found from symbol %s", > + name); > + new_sdx = cur_sdx + 1; /* Don't skip backward */ > + } > + > + /* For stProc symbol records, we need to check the > + storage class as well, as only (stProc, scText) > + entries represent "real" procedures - See the > + Compaq document titled "Object File / Symbol Table > + Format Specification" for more information. If the > + storage class is not scText, we discard the whole > + block of symbol records for this stProc. */ > + if (sh.st == stProc && sh.sc != scText) > + goto skip; > + > /* Usually there is a local and a global stProc symbol > for a function. This means that the function name > has already been entered into the mimimal symbol table > *************** parse_partial_symbols (struct objfile *o > *** 3345,3373 **** > &objfile->static_psymbols, > 0, sh.value, psymtab_language, objfile); > > - /* Skip over procedure to next one. */ > - if (sh.index >= hdr->iauxMax) > - { > - /* Should not happen, but does when cross-compiling > - with the MIPS compiler. FIXME -- pull later. */ > - index_complaint (name); > - new_sdx = cur_sdx + 1; /* Don't skip at all */ > - } > - else > - new_sdx = AUX_GET_ISYM (fh->fBigendian, > - (debug_info->external_aux > - + fh->iauxBase > - + sh.index)); > procaddr = sh.value; > - > - if (new_sdx <= cur_sdx) > - { > - /* This should not happen either... FIXME. */ > - complaint (&symfile_complaints, > - "bad proc end in aux found from symbol %s", > - name); > - new_sdx = cur_sdx + 1; /* Don't skip backward */ > - } > > cur_sdx = new_sdx; > (*swap_sym_in) (cur_bfd, > --- 3410,3416 ----