Data Fields | |
const char * | m_augmentation_string |
uint64_t | m_code_alignment |
int64_t | m_data_alignment |
uint64_t | m_return_address_reg |
uint64_t | m_pointer_encoding |
uint64_t | m_lsda_encoding |
uint64_t | m_personality_encoding |
uint64_t | m_personality_function |
char * | m_initial_instructions |
Protected Member Functions | |
void | parse (char *addr) override |
void | non_virtual_parse (char *addr) |
Protected Member Functions inherited from common_entry | |
void | non_virtual_parse (char *addr) |
Additional Inherited Members | |
Protected Attributes inherited from common_entry | |
bool | m_is_cie |
char * | m_entry_start |
char * | m_entry_end |
char * | m_payload_start |
char * | m_payload_end |
eh_frame_t | m_eh_frame |
Common Information Entry
The goal of the CIE is to provide a set of DWARF instructions that are the same for all FDEs (at least this is how it is documented). What this really means is each CIE defines a different function prolog that the compiler has, and there are not many of them. The CIE also contains other information that is shared by all of the FDEs, like the personality function, and the location of the LSDA, and the different encoding types.
When parsing the .eh_frame section, it's best to actually skip over the CIEs and only look for FDEs. Once you have the FDE you want, you can use the pointer in the FDE to locate the CIE associated with that FDE.
Definition at line 360 of file eh_frame.h.
ci_entry::ci_entry | ( | ) |
|
explicit |
Constructor
Creates an invalid CIE, but stores the location of the beginning of the .eh_frame section.
Definition at line 223 of file eh_frame.cpp.
|
explicit |
Constructor
Creates a valid CIE if the addr that is provided points to a valid CIE in the .eh_frame provided
Definition at line 239 of file eh_frame.cpp.
|
overridedefault |
Destructor
|
defaultnoexcept |
Default Move Constructor
|
default |
Default Copy Constructor
|
inline |
Augmentation String
Each CIE can provide different types of information, and to provide a means to compress this information, the DWARF spec defines which fields each CIE/FDE actually provides using the augmentation string. Each character in the string defines what the next thing in the augmentation data portion of the CIE/FDE is. For more information on this, please see the specification.
Definition at line 415 of file eh_frame.h.
|
inline |
Code Alignment
Definition at line 423 of file eh_frame.h.
|
inline |
Data Alignment
Definition at line 432 of file eh_frame.h.
|
inline |
Return Address Register
Definition at line 440 of file eh_frame.h.
|
inline |
Pointer Encoding
Definition at line 449 of file eh_frame.h.
|
inline |
|
inline |
Personality Encoding
Definition at line 463 of file eh_frame.h.
|
inline |
Personality Function
Definition at line 472 of file eh_frame.h.
|
inline |
Initial Instructions
Definition at line 480 of file eh_frame.h.
|
overrideprotectedvirtual |
Implements common_entry.
Definition at line 256 of file eh_frame.cpp.
|
protected |
Definition at line 262 of file eh_frame.cpp.
const char* ci_entry::m_augmentation_string |
Definition at line 488 of file eh_frame.h.
uint64_t ci_entry::m_code_alignment |
Definition at line 489 of file eh_frame.h.
int64_t ci_entry::m_data_alignment |
Definition at line 490 of file eh_frame.h.
uint64_t ci_entry::m_return_address_reg |
Definition at line 491 of file eh_frame.h.
uint64_t ci_entry::m_pointer_encoding |
Definition at line 492 of file eh_frame.h.
uint64_t ci_entry::m_lsda_encoding |
Definition at line 493 of file eh_frame.h.
uint64_t ci_entry::m_personality_encoding |
Definition at line 494 of file eh_frame.h.
uint64_t ci_entry::m_personality_function |
Definition at line 495 of file eh_frame.h.
char* ci_entry::m_initial_instructions |
Definition at line 496 of file eh_frame.h.