- the frame state consists of the following:

	- ip	current instruction pointer
	- sp	current stack pointer value
	- bsp	current backing store pointer
	- cfm	current frame mask

  these are derived from the next younger (more deeply nested) frame
  as follows:

	- ip  == saved return-link (may be b0 or an alternate branch-reg)
	- sp  == if younger frame has a fixed-sized frame, sp + size-of-frame,
		 else saved sp
	- cfm == saved ar.pfs
	- bsp == if ar.bsp has been saved, saved ar.bsp, otherwise,
		 ar.bsp \ominus saved ar.pfs.pfm.sol

The unwind cursor should represent the machine state as it existed at
the address contained in register ip.  This state consists of the
*current* frame state and the save locations in the next younger
frame.

An unwind script current takes the old save locations and updates them
for the next older frame.  With the new setup, we need to update the
frame state first, without updating the other save locations.  For this
to work, we need the following info:

	- save location of return-link
	- save location of ar.pfs
	- save location of bsp (if it has been saved)
	- size of stack frame (fixed case) or save location of sp


setup:

  func:   ...
	  ...
	  ...
	  br.call foo	<-- call site
	  ...		<-- ip
	  ...

initial state:

	The unwind cursor represents the (preserved) machine state
	as it existed at "ip".

	Evaluating the unwind descriptors for "ip" yields the following
	info:

		- frame size at call site (or previous sp)
		- what registers where saved where by func before
		  the call site was reached


	Note that there is some procedure info that needs to be obtained
	for the new "ip" which is contained in the unwind descriptors.
	Specifically, the following is needed:

			- procedure's start address
			- personality address
			- pointer to language-specific data area

	This info is stored in a separate proc_info structure and needs
	to be obtained right after running the unwind script for func.
