SPRAC71B February 2019 – October 2023
Catch descriptors control which exceptions are caught, and when. A function may have several catch clauses which each apply to a different subset of potentially-throwing function calls. One call site can have multiple catch descriptors, each with a different type.
If the type in the catch descriptor matches the thrown type, control is transferred to the landing pad, which is just a code fragment representing a catch block. Catch blocks implement catch clauses in the user's code. These blocks are only executed when an exception actually gets thrown. These blocks are generated for a function when the rest of the function is generated, and execute in the same stack frame as the function, but may be placed in a different section.
If bit R is 1, the type of the catch clause is a reference type represented by TYPE. If bit R is 0, the type is not a reference type.
The type field is either a reference to a type_info object or one of two special values: