ZHCADC3B February 2019 – October 2023
C28x 异常处理表的格式和机制基于 ARM 处理器系列的格式和机制,而 ARM 处理器系列本身基于 IA-64 异常处理 ABI (http://www.codesourcery.com/public/cxx-abi/abi-eh.html)。本节重点介绍特定于 C28x 的部分。
TDEH 数据包括三个主要部分:EXIDX、EXTAB 以及 catch 和 cleanup 块。
异常索引表 (EXIDX) 将程序地址映射到异常操作表 (EXTAB) 中的条目。EXIDX 涵盖程序中的所有地址。
EXTAB 对指令进行编码,以说明如何回溯栈帧(通过恢复寄存器和调整栈指针)以及在传播异常时调用哪些 catch 和 cleanup 块。
catch 和 cleanup 块(统称为着陆垫)是执行异常处理任务的代码片段。cleanup 块包含对析构函数的调用。catch 块在用户代码中实现 catch 子句。这些块仅在实际引发异常时执行。当生成函数的其余部分时,会为函数生成这些块,并在与函数相同的栈帧中执行,但可能会放在不同的段中。