Chained Unwind Info Structures

JavaScript EditorDhtml editor     Free javascript download 



Main Page

If the UNW_FLAG_CHAININFO flag is set, then an unwind info structure is a secondary one, and contains an image-relative pointer in the shared exception handler/chained info address field which points to the RUNTIME_FUNCTION entry pointing to the primary unwind info.

Chained info is useful in two situations. First, it can be used for noncontiguous code segments, like those produced by BBT. Using chained info can reduce the size of the necessary unwind info, because there is no need to duplicate the unwind codes array from the primary unwind info.

Chained info can also be used to handle shrink-wrapping of volatile register saves. The compiler may choose to delay saving some volatile registers until outside of the function entry prolog. This can be recorded by having primary unwind info for the portion of the function before the shrink-wrapped code, and then setting up chained info with a non-zero size of prolog, where the unwind codes in the chained info reflect saves of the nonvolatile registers. In that case, the unwind codes will all be instances of UWOP_SAVE_NONVOL. Shrink-wrapping that saves nonvolatile registers using a PUSH is not supported, and shrink-wrapping that modifies RSP with an additional fixed stack allocation is also not supported.

It is possible for an UNWIND_INFO item with UNW_FLAG_CHAININFO set to point to a RUNTIME_FUNCTION entry whose UNWIND_INFO item also has UNW_FLAG_CHAININFO set (multiple shrink-wrapping). Eventually, following the chained unwind info pointers will arrive at an UNWIND_INFO item with UNW_FLAG_CHAININFO cleared, which is the primary UNWIND_INFO item pointing to the actual procedure entry point.

Expand imageSee Also



JavaScript EditorDhtml editor     Free javascript download