This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
frame theory, was pointer madness
Lets see if I have this right.
Assuming a linked list with 5 frames, they should look like this
level description
-1 sentinal frame(virtual)
0 youngest frame (the deepest function call and current frame)
1 older
2 even older
3 oldest
And the list should look like this
prev->frame->next
NULL->3->2->1->0->-1->-1->-1........
I think, and I have yet to successfully verify this, that the highest level
frame should have an id of zero, or at least should.
Normal gdb appears to work by caching the frame of the highest level to a NULL
prev value, which appears to be happening somewhere when the frame first
enters existance. In the case of a gdbremote connection this should be on
connection to the remote server. When frame 0 is the highest and lowest real
level it will "unwind" frame zero by accessing -1. which should in turn
actually read the registers from remote device. Then ->black magic - black
magic -> gdb realizes there is no higher level frame and caches a NULL there.
Now the magic.
NZG