LLVM  6.0.0svn
Public Member Functions | Public Attributes | List of all members
llvm::ARM::WinEH::EpilogueScope Struct Reference

ExceptionDataRecord - An entry in the table of exception data (.xdata) More...

#include "llvm/Support/ARMWinEH.h"

Collaboration diagram for llvm::ARM::WinEH::EpilogueScope:
Collaboration graph
[legend]

Public Member Functions

 EpilogueScope (const support::ulittle32_t Data)
 
uint32_t EpilogueStartOffset () const
 
uint8_t Res () const
 
uint8_t Condition () const
 
uint8_t EpilogueStartIndex () const
 

Public Attributes

const support::ulittle32_t ES
 

Detailed Description

ExceptionDataRecord - An entry in the table of exception data (.xdata)

3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +----—+------—+-+-+-+—+--------------------------------—+ | C Wrd | Epi Cnt |F|E|X|Ver| Function Length | +----—+-----—+'-'-'-'—'—+----------------------------—+ | Reserved |Ex. Code Words| (Extended Epilogue Count) | +----—+-----—+-----------—+----------------------------—+

Function Length : 18-bit field indicating the total length of the function in bytes divided by 2. If a function is larger than 512KB, then multiple pdata and xdata records must be used. Vers : 2-bit field describing the version of the remaining structure. Only version 0 is currently defined (values 1-3 are not permitted). X : 1-bit field indicating the presence of exception data E : 1-bit field indicating that the single epilogue is packed into the header F : 1-bit field indicating that the record describes a function fragment (implies that no prologue is present, and prologue processing should be skipped) Epilogue Count : 5-bit field that differs in meaning based on the E field.

             If E is set, then this field specifies the index of the
             first unwind code describing the (only) epilogue.

             Otherwise, this field indicates the number of exception
             scopes.  If more than 31 scopes exist, then this field and
             the Code Words field must both be set to 0 to indicate that
             an extension word is required.

Code Words : 4-bit field that species the number of 32-bit words needed to contain all the unwind codes. If more than 15 words (63 code bytes) are required, then this field and the Epilogue Count field must both be set to 0 to indicate that an extension word is required. Extended Epilogue Count, Extended Code Words : Valid only if Epilog Count and Code Words are both set to 0. Provides an 8-bit extended code word count and 16-bits for epilogue count

3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +-------------—+---—+—+—+----------------------------—+ | Ep Start Idx | Cond |Res| Epilogue Start Offset | +-------------—+---—+—+--------------------------------—+

If the E bit is unset in the header, the header is followed by a series of epilogue scopes, which are sorted by their offset.

Epilogue Start Offset: 18-bit field encoding the offset of epilogue relative to the start of the function in bytes divided by two Res : 2-bit field reserved for future expansion (must be set to 0) Condition : 4-bit field providing the condition under which the epilogue is executed. Unconditional epilogues should set this field to 0xe. Epilogues must be entirely conditional or unconditional, and in Thumb-2 mode. The epilogue beings with the first instruction after the IT opcode. Epilogue Start Index : 8-bit field indicating the byte index of the first unwind code describing the epilogue

3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +------------—+------------—+------------—+------------—+ | Unwind Code 3 | Unwind Code 2 | Unwind Code 1 | Unwind Code 0 | +------------—+------------—+------------—+------------—+

Following the epilogue scopes, the byte code describing the unwinding follows. This is padded to align up to word alignment. Bytes are stored in little endian.

3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +------------------------------------------------------------—+ | Exception Handler RVA (requires X = 1) | +------------------------------------------------------------—+ | (possibly followed by data required for exception handler) | +------------------------------------------------------------—+

If the X bit is set in the header, the unwind byte code is followed by the exception handler information. This constants of one Exception Handler RVA which is the address to the exception handler, followed immediately by the variable length data associated with the exception handler.

Definition at line 292 of file ARMWinEH.h.

Constructor & Destructor Documentation

◆ EpilogueScope()

llvm::ARM::WinEH::EpilogueScope::EpilogueScope ( const support::ulittle32_t  Data)
inline

Definition at line 295 of file ARMWinEH.h.

Member Function Documentation

◆ Condition()

uint8_t llvm::ARM::WinEH::EpilogueScope::Condition ( ) const
inline

Definition at line 302 of file ARMWinEH.h.

◆ EpilogueStartIndex()

uint8_t llvm::ARM::WinEH::EpilogueScope::EpilogueStartIndex ( ) const
inline

Definition at line 305 of file ARMWinEH.h.

References llvm::ARM::WinEH::HeaderWords().

◆ EpilogueStartOffset()

uint32_t llvm::ARM::WinEH::EpilogueScope::EpilogueStartOffset ( ) const
inline

Definition at line 296 of file ARMWinEH.h.

◆ Res()

uint8_t llvm::ARM::WinEH::EpilogueScope::Res ( ) const
inline

Definition at line 299 of file ARMWinEH.h.

Member Data Documentation

◆ ES

const support::ulittle32_t llvm::ARM::WinEH::EpilogueScope::ES

Definition at line 293 of file ARMWinEH.h.


The documentation for this struct was generated from the following file: