This is the mail archive of the
mailing list for the GDB project.
Re: Assertion Fail: FDE != NULL in Cyclops64
- From: Tom Tromey <tromey at redhat dot com>
- To: Brian Heilig <bheilig at etinternational dot com>
- Cc: gdb <gdb at sourceware dot org>
- Date: Tue, 23 Nov 2010 14:12:59 -0700
- Subject: Re: Assertion Fail: FDE != NULL in Cyclops64
- References: <1290438965.1567.22.camel@random>
>>>>> "Brian" == Brian Heilig <email@example.com> writes:
Brian> I am receiving an assertion violation, "fde != NULL" on my Cyclops64
Brian> system. This occurs in the function "dwarf2_frame" in "dwarf2_frame.c"
Brian> while attempting to single step through memmove.
Brian> I found that memmove (and other functions) were not compiled with debug
Brian> information. Since these were hand optimized routines in assembly it
Brian> would be very difficult to add debugging information.
Brian> On a plain Linux test I get "Single stepping until exit from function
Brian> foo, which has no line number information." That's what my Cyclops64
Brian> system should do.
Brian> When I perform a readelf on my Cyclops64 executable there are holes in
Brian> the .debug_frame section where memmove (and the others) should be. It
Brian> looks like gdb assumes there are no holes, so I'm guessing the problem
Brian> is somewhere in my tool chain. Can someone direct me to the right spot?
I am not overly familiar with this code, but I think the logic behind
this assert is that we should only end up in dwarf2_frame_cache if a
DWARF frame was detected, and the DWARF frame sniffers use
dwarf2_frame_find_fde to decide whether this happened.
In other words, if the assert trips then that means there is some kind
of bug in gdb -- because dwarf2_frame_find_fde returned different
results for the same PC.
I would probably start by putting a breakpoint in dwarf2_frame_sniffer
to see what happens there, or maybe by finding out where the frame comes
from in dwarf2_frame_cache.