| |||
| Home > C and C++ Implementation Details > C++ implementation details > C++ exception handling | |||
The ARM compilation tools fully support C++ exception handling.
However, the compiler does not support this by default. You must
enable C++ exception handling with the --exceptions option.
See --exceptions, --no_exceptions for more
information.
The Rogue Wave Standard C++ Library is provided with C++ exceptions enabled.
You can exercise limited control over exception table generation.
By default, functions compiled with --exceptions can
be unwound at runtime. See --exceptions, --no_exceptions for more information. Function
unwinding includes destroying C++ automatic variables,
and restoring register values saved in the stack frame. Function unwinding
is implemented by emitting an exception table describing the operations
to be performed.
You can enable or disable unwinding for specific functions
with the pragmas #pragma exceptions_unwind and #pragma
no_exceptions_unwind, see Pragmas for more information. The --exceptions_unwind option
sets the initial value of this pragma.
Disabling function unwinding for a function has the following effects:
Exceptions cannot be thrown
through that function at runtime, and no stack unwinding occurs
for that throw. If the throwing language is C++, then std::terminate is
called.
A very compact exception table representation can be used to describe the function, that assists smart linkers with table optimization.
Function inlining is restricted, because the caller and callee must interact correctly.
Therefore, #pragma no_exceptions_unwind can
be used to forcibly prevent unwinding in a way that requires no
additional source decoration.
By contrast, in C++ an empty function exception specification
permits unwinding as far as the protected function, then calls std::unexpected() in
accordance with the ISO C++ Standard.