LLVM JIT中跨平台Panic系统实现的异常处理问题
在LLVM JIT中实现Panic系统的问题
我需要在基于LLVM JIT的语言中实现一套panic系统(并非真正意义上的异常,但要求将栈回滚至指定位置并销毁局部变量)。由于仅知晓异常机制可实现该行为,因此计划基于异常机制来实现,不能直接使用abort——因为需要返回至调用的C++代码,若函数由其他线程调用,则需返回至调用线程。
我查阅了《Exception Handling in LLVM》文档,尝试了其中三种方法:
- Itanium ABI:怀疑无法在Windows上运行,因为不存在
__cxa_throw,且不清楚其他触发栈回滚的方式 - LLVM SJLj:不了解其使用方式,曾尝试循环使用jmp_buf,但在MSVC中调用longjmp时导致程序崩溃
- SEH:无法正常工作,持续提示未处理异常,获悉LLVM JIT中SEH尚未完全实现
目前我找不到在LLVM JIT中实现异常或其他panic系统的可行方案。
内容的提问来源于stack exchange,提问作者MindOfTony
相关产品推荐
相关产品推荐

