提问人:Kishan Parmar 提问时间:11/15/2023 更新时间:11/15/2023 访问量:81
如果投掷块和着陆垫位于不同的部分,异常处理是否有效?
Does exception handling work if the throw block and landing pad are in diffrent section?
问:
考虑以下情况,最终崩溃并抱怨放卷机 _URC_END_OF_STACK,在_UA_SEARCH_PHASE中找不到处理程序
class array{
public:
int foo() {
throw 5;
}
};
int main() {
array a0;
try {
a0.foo();
}
catch(const int )
{}
}
对于上述情况,我的链接器将 foo 放在.text._ZN5array3fooEv部分,而其他所有内容都放在 .text 部分?LLVM ld.lld(all in .text)并非如此。
答:
-1赞
Kishan Parmar
11/21/2023
#1
main -> .text foo -> .text._ZN5array3fooEv(链接器不合并它们)
答案取决于你的展开库,在这种情况下,mylibUnwind.a 检查 .text 的边界,而 foo 不在 .text 中会导致_URC_END_OF_STACK。
评论
0赞
Jesper Juhl
11/21/2023
这一切都在同一个翻译单元中。这里不涉及展开库或链接器。
0赞
Kishan Parmar
11/25/2023
我建议您阅读一些主题,例如..1) 加载器如何处理可重定位文件。2) 不同的操作系统如何根据他们的标准修改 libunwind..等。
评论
A::foo()