gpt4 book ai didi

rust - 如何解析基于 LLVM MCJIT 的 JIT 中的当前进程符号?

转载 作者:行者123 更新时间:2023-11-29 08:01:07 26 4
gpt4 key购买 nike

我正在创建一个简单的基于 MCJIT 的 JIT(更准确地说是实现 Kaleidoscope tutorial in Rust)。我正在使用 SectionMemoryManager::getSymbolAddress 进行符号解析。它从库中看到符号(例如 sin 函数),但无法解析我程序中的函数(全局的,用 nm 可见,用 T 标记)。这是预期的行为吗?还是我的代码有错误?

如果这是预期的行为,我应该如何正确解析当前进程中的符号?我现在正在使用 LLVMAddSymbol 从进程中添加符号,因此分辨率开始起作用。这是正确的解决方案吗?

对于那些会阅读我的代码的人。符号的问题与名称修改无关,因为当我尝试使 SectionMemoryManager::getSymbolAddress 工作时,我使用了 no_mangle 指令,因此它们被正确命名。

最佳答案

感谢 Lang Hames,他在其他地方回答了我的问题。如果有人会和我看同样的问题,我在这里引用这个案例的答案:

在回答您的问题时:SectionMemoryManager::getSymbolAddress 最终(通过 RTDyldMemoryManager 基类)调用 llvm::sys::DynamicLibrary: :SearchForAddressOfSymbol,它在所有以前加载的动态库中搜索符号。您可以调用 llvm::sys::DynamicLibrary::LoadLibraryPermanently(nullptr) 作为 JIT 初始化的一部分(在调用 getSymbolAddress 之前)将程序的符号导入到DynamicLibrary 的符号表。

如果您真的想将程序中的所有函数公开给 JIT 代码,这是一个不错的方法。如果您只想公开一组有限的运行时函数,您可以将它们放在共享库中并加载它。

关于rust - 如何解析基于 LLVM MCJIT 的 JIT 中的当前进程符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com