首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LLVM异常处理实现

LLVM异常处理实现
EN

Stack Overflow用户
提问于 2013-11-17 12:21:39
回答 1查看 2.3K关注 0票数 19

仅供注意,我已经阅读了the questionsblog posts,我还引用了the ABI

我完全不明白的是,它是如何与LLVM的EH内部函数交互的。LLVM EH页面给出了一个非常模糊的概述--并不完全是“实现X,Y,Z”的清单。

LLVM EH页面直接引用Itanium ABI。这意味着LLVM只支持Itanium ABI异常。但我已经知道Clang支持ARM,并且正在开发对Microsoft ABIs的支持。那么,LLVM对Itanium ABI的EH实现到底有多具体?

当引用Itanium ABI定义的_Unwind内容时,这是必须由后端提供的,还是我必须自己实现它?

我还注意到,Clang生成的LLVM IR没有显示任何特定于语言的表、任何异常框架、异常表或任何类似的东西。在这种情况下,LLVM如何知道如何生成特定于语言的数据?

简而言之,如何准确地从LSDA、EH上下文和_Unwind_RaiseException过渡到landingpadresume

编辑:仅供参考,我将在Windows上对生成的代码执行JITting。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-21 06:20:13

简短的答案是,LLVM有效地硬编码了它想要支持的每一个EH ARM、安腾、SEH等等。因此,尽管landingpad的东西在理论上可能有些抽象,但它实际上根本不是抽象的,而且是紧密耦合的,因为你需要做的另一半事情必须由你需要显式完成的安腾ABI EH支持库来完成。

LLVM生成几乎所有的EH实现细节,但您还必须在运行时链接到Itanium EH支持库。除此之外,IR实际上就是它所显示的--不需要代表程序员做任何额外的工作。

我想,如果你想使用非Itanium,事情会变得更加棘手。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20027156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档