Hi, On Fri, 15 May 2009, Michael Eager wrote:
> Is there any documentation on the contents of .eh_frame > and the augmentations used? .eh_frame simply contains normal unwinding information, in DWARF2(34) format, you're familiar with that :) And nothing more, specifically it does _not_ contain information about try/catch blocks inside functions. This is language specific data (which the Language Specific Data Area (LSDA) pointer in .eh_frame points to). The Augmentations were already explained, and in the x86-64 ABI (http://www.x86-64.org/documentation/abi.pdf, section 3.6 "Dwarf Definition", 4.2.4 "EH_FRAME sections" and 6.2.1 "Exception Handler Framework") we have some more info, but it's not _much_ more and also deals only with the augmentations. As the description of try/catch (and finally in some languages) is language specific it's not standardized. It is only understood by the personality routine (a pointer to it is encoded in .eh_frame too, when necessary). The whole exception throwing related unwinding explained somewhat okay in the above document, sections 6.2.1. But the _format_ of the LSDA is not specified. It's really an implementation detail of the compiler/language and doesn't have to be agreed upon for mixing .o files from different compilers, as every compilation unit can have it's own personality routine. Having said that, the LSDA format that gcc uses didn't change that much over time (for C++ at least), so describing it would be nice. http://www.codesourcery.com/public/cxx-abi/exceptions.pdf seems to describe something of it, I haven't verified how current it is, though. Ciao, Michael.