ZHCADC3B February 2019 – October 2023
FESPEC 描述符强制执行用户代码中的 throw() 声明。如果使用了抛出声明,则将为该函数创建 FESPEC 描述符,以确保仅抛出列出的那些类型。如果抛出了未列出的类型,展开器通常就会调用 std::unexpected(但也存在例外)。
描述符的第一个字由 31 位无符号整数组成,用于指定后跟 type_info 字段的数量。
如果位 D 为 1,则 type_info 列表后跟 32 位字,其中包含代码片段的 PREL31 程序地址,如果列表中没有与抛出类型相匹配的类型,则调用该代码片段。该字的位 31 设置为 0。
如果位 D 为 0,且列表中没有与抛出类型相匹配的类型,则展开代码应调用 _ _cxa_call_unexpected。如果任意描述符与该形式匹配,则 EXTAB 段必须包含至 _ _cxa_call_unexpected 的 R_C28x_none 重定位。