All the frame sniffing functions typically examine the code at the start of the corresponding function, to determine the state of registers. The ABI will save old values and set new values of key registers at the start of each function in what is known as the function prologue.
For any particular stack frame this data does not change, so all the standard unwinding functions, in addition to receiving a pointer to the NEXT frame as their first argument, receive a pointer to a prologue cache as their second argument. This can be used to store values associated with a particular frame, for reuse on subsequent calls involving the same frame.
It is up to the user to define the structure used (it is a
void * pointer) and arrange allocation and deallocation of
storage. However for general use, gdb provides
struct trad_frame_cache, with a set of accessor
routines. This structure holds the stack and code address of
THIS frame, the base address of the frame, a pointer to the
frame_info for the NEXT frame and details of
where the registers of the PREVIOUS frame may be found in THIS
Typically the first time any sniffer function is called with NEXT
frame, the prologue sniffer for THIS frame will be
sniffer will analyze the frame, allocate a prologue cache structure
and populate it. Subsequent calls using the same NEXT frame will
pass in this prologue cache, so the data can be returned with no