仅供注意,我已经阅读了the questions和blog 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
过渡到landingpad
和resume
编辑:仅供参考,我将在Windows上对生成的代码执行JITting。
发布于 2014-11-21 06:20:13
简短的答案是,LLVM有效地硬编码了它想要支持的每一个EH ARM、安腾、SEH等等。因此,尽管landingpad
的东西在理论上可能有些抽象,但它实际上根本不是抽象的,而且是紧密耦合的,因为你需要做的另一半事情必须由你需要显式完成的安腾ABI EH支持库来完成。
LLVM生成几乎所有的EH实现细节,但您还必须在运行时链接到Itanium EH支持库。除此之外,IR实际上就是它所显示的--不需要代表程序员做任何额外的工作。
我想,如果你想使用非Itanium,事情会变得更加棘手。
https://stackoverflow.com/questions/20027156
复制相似问题