我正在开发一个运行 JIT 来为每个线程提供请求的服务。每个线程都有一个独立的 MCJIT 实例,使用它自己的内存管理器、解析器等。
我发现没有锁,MCJIT 可以生成不正确的 EH_FRAME 用于异常处理。当一个请求抛出并展开时,展开器无法正确通过调用堆栈。我正在使用默认的 libgcc undwinder,我可以看到 unwind 的搜索短语有时在并发性很高时会失败。
谁能指出为什么会发生这种情况?我可以看到 MCJIT finalizeObject() 正在做很多事情,但我发现很难看出哪里需要并发?(符号解析,重定位?)。
我正在使用 LLVM 7.0。
谢谢。小号