diff options
author | Søren Sandmann Pedersen <ssp@l3000.localdomain> | 2009-10-13 13:43:46 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@l3000.localdomain> | 2009-10-13 13:43:49 -0400 |
commit | f922d1f612cc99af7436f37245dd8d02a07c3258 (patch) | |
tree | 358be1d2b85314733267fa8661e6d30460d939d9 | |
parent | c733863d5d617d9234b28d954905b67a53b83553 (diff) |
Add unwind-info.txtunwind
-rw-r--r-- | unwind-info.txt | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/unwind-info.txt b/unwind-info.txt new file mode 100644 index 0000000..62bf4ac --- /dev/null +++ b/unwind-info.txt @@ -0,0 +1,45 @@ +Unwind information is defined in two very similar, but subtly +different formats. One is the eh_frame format, then other is the +debug_frame format. + +Both formats have the concept of CIEs and FDEs. These can be +dynamically distinguished. + + +.eh_frame + +The .eh_frame section is organized as a CIE followed by one or more +FDEs. + +In this format, the CIE pointer/FDE is always 4 bytes, whereas in the +debug_frame version it is 8 bytes if the initial length indicated a 64 +bit description. + + + .eh_frame DWARF 2 DWARF 3 +header: .eh_frame_hdr not used not used + +CIE: + +Length 32+ext 32 bits 32+ext +CIE id 32 bits [=0] 32 bits [=-1] 32/64 d.o. ext [=-1] +version 32 bits [=1] ubyte [=1] ubyte [=3] +augstring string string string + +eh data 32/64 do arch n/a n/a + only if eh in + aug + +code alignf uleb128 uleb128 uleb128 +data alignf sleb128 sleb128 sleb128 +return register ? ubyte uleb128 + +aug length if z in aug, n/a n/a + uleb128 +aug data block + +instructions variable variable variable +padding nops nops nops + + +FDE |