Exception tables are necessary to handle exceptions thrown by functions in high-level languages such as C++. Unwind tables contain debug frame information which are also necessary for the handling of such exceptions. An exception can only propagate through a function with an unwind table.
Functions written in C++ have unwind information by default.
However, for assembly language functions (code encased by
that are called from C++ code, you must ensure that there are exception
tables and unwind tables to enable the exceptions
to propagate through them.
An exception cannot propagate through a function with a nounwind table. The exception handling runtime environment terminates the program if it encounters a nounwind table during exception processing.
armasm can generate nounwind table
entries for all functions and non-functions. It can generate an unwind table
for a function only if the function contains sufficient
to describe the use of the stack within the function. To be able
to create an unwind table for a function, each
must be followed by a
FRAME POP or
FRAME PUSH directive
respectively. Functions must conform to the conditions set out in
the Exception Handling ABI for the ARM Architecture (EHABI),
section 9.1 Constraints on Use. If
generate an unwind table it generates a nounwind table.