Ralf Baechle wrote:
On Wed, Aug 06, 2008 at 11:57:32AM -0700, David Daney wrote:
In the trace below, is "epc" the program counter at the time of the
timer interrupt? How does "ra" fit into this, given that the
function whose address it contains isn't seen in the stack trace
until quite a ways down?
$LBB378 is an internal symbol. The value of RA may not be very informative
if it was overwritten by a random subroutine call.
I have thought about eliminating these internal labels when the module's symbols are read. Would this make any sense?
I think so. Maybe that could even be done when the module is linked. I
don't think there are ever any relocations against these local symbols.
Thiemo?
I take it back. Most of the $LC... symbols (typically string constants) are needed for relocations. Currently I cannot find in my builds any $LB... symbols. I wonder if gcc-4.3 eliminates these.
I think the reason they show up in stack traces is that they are data pointers that have been stored on the stack that are misinterpreted as function return addresses.
I wonder what would happen if we compiled all the code with -funwind-tables and had a small DWARF2 unwinder ala GCC's C++ exception handling mechanism. That would allow exact stack traces with no runtime overhead.
David Daney