On Tuesday 18 May 2010 16:05:54 Tom Horsley wrote: > I've been looking at the frame info for a main program > compiled on ubuntu with g++ (4.4.3), and the frame description > info, both for the eh_frame CFA and the DW_AT_frame_base > attribute is totally bizarre. The frame pointer is described > as being at *(ebp - 16) (for a certain range of addresses). > > If I debug this program with gdb, it seems to get the frame > info correct, and apparently believes the frame pointer > is the ebp register (which seems to make sense if I > disassemble the code). If I look in *(ebp - 16) I see > trash. > > What the devil is gdb doing to get this right? Is it > utterly ignoring the trash generated by the compiler and > deducing the frame description by disassembling the > prologue code or something? > > gdb version: GNU gdb (GDB) 7.1-ubuntu > g++ version: gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) > architecture: i686 look at the frames sections of the gdb internals manual as it describes the algorithms gdb uses (or rather, the framework gdb has that each arch/port extends). you can also use 'set debug frame 1' to get more insight on the frame construction. -mike