Keil Logo

C++ exception handling in ARM C++

10.11 C++ exception handling in ARM C++

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.

Note

The Rogue Wave Standard C++ Library is provided with C++ exceptions enabled.
You can exercise limited control over exception table generation.

Function unwinding at runtime

By default, functions compiled with --exceptions can be unwound at runtime. 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. 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.
  • The exception table representation that describes the function is very compact. This assists smart linkers with table optimization.
  • Function inlining is restricted, because the caller and callee must interact correctly.
Therefore, #pragma no_exceptions_unwind lets you 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.
Non-ConfidentialPDF file icon PDF versionARM DUI0375H
Copyright © 2007, 2008, 2011, 2012, 2014-2016 ARM. All rights reserved. 
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.