This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Internal error in GDB


Daniel Jacobowitz <drow@mvista.com> writes:

> On Thu, Nov 14, 2002 at 10:15:28AM -0500, Daniel Jacobowitz wrote:
> > On Thu, Nov 14, 2002 at 05:34:05PM +1000, Steven Johnson wrote:
> > > Im getting the error:
> > > 
> > > Internal error: pc 0x0 in read in psymtab, but not in symtab.
> > > 
> > > from a very recent CVS build of GDB (As of 11th November).
> > > 
> > > It happens when I set breakpoints in an assembler file, that has been 
> > > assembled through GCC, using the C Preprocessor (.S file, not .s file).
> > > 
> > > It does nothing wrong, except pop up all the time and hence interfere 
> > > with debugging significantly. (Im using insight and have to keep 
> > > pressing OK to continue).
> > > 
> > > I searched the code and it seems to be coming from 
> > > symtab.c:find_pc_sect_symtab (last if in the function)
> 
> Jim, I need your opinion on this... here's the problem.
> 
> 2092      /* When using the GNU linker, .gnu.linkonce. sections are used to
> 2093         eliminate duplicate copies of functions and vtables and such.
> 2094         The linker will arbitrarily choose one and discard the others.
> 2095         The AT_*_pc values for such functions refer to local labels in
> 2096         these sections.  If the section from that file was discarded, the
> 2097         labels are not in the output, so the relocs get a value of 0.
> 2098         If this is a discarded function, mark the pc bounds as invalid,
> 2099         so that GDB will ignore it.  */
> 2100      if (low == 0 && (bfd_get_file_flags (objfile->obfd) & HAS_RELOC) == 0)
> (top-gdb)
> 2101        return 0;
> 2102
> 
> 
> In Steven's asm is a .vectors section which goes over the PPC hardware
> interrupt vectors in RAM - that's actually at VMA 0.  Oops.
> 
> Since LD still doesn't edit DWARF-2 sections when discarding, and won't
> for the forseeable future (although it needs to eventually), we can't
> just drop the check.  Any ideas on what to do?

Jeez.  You'd think we would have learned by now that people like to
put things at the top and bottom of the address space...

Would it work to check that both the high and low bounds are zero?
Obviously, that's not going to handle a zero-length section at address
zero, but it'd at least be better than what we have now.

Is there *no* other way to tell whether the debug info refers to a
discarded section?  Can we add logic to BFD to tell us about this?

Could we generate custom GNU Dwarf 2 information so as to allow GDB to
detect a removed section?  That is, if we *ask* the linker to tell us,
will it?  We could make all debug info in linkonce sections children
of new DW_TAG_GNU_linkonce dies, with magic attributes that let us
detect whether they've been discarded.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]