This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Internal error in GDB
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?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer