- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 llvm 并想对我的想法进行概念证明。
基本上,我想拆分我的编译器和我的运行时。编译器会给出一个 .bc,运行时会通过 ParseBitcodeFile 加载它并使用 ExecutionEngine 来运行它。这部分正在工作。
现在,为了轻松进行系统调用,我希望能够在我的运行时 C/C++ 函数中实现所有系统调用(文件 io、stdout 打印等)。我的问题是,我怎么能从我的玩具编译器的代码中调用这些函数,它是由 llvm 在不同的步骤中编译的,并允许在执行时使用它。
最佳答案
好消息:使用 JIT 时 ExecutionEngine
,这将起作用。当 JIT-er 发现 IR 使用的外部符号在 IR 本身中找不到时,它会在 JIT-ing 进程本身中查找,因此可以调用主机程序中可见的任何符号。
这在 part 4 of the LLVM tutorial 中有直接解释:
Whoa, how does the JIT know about sin and cos? The answer is surprisingly simple: in this example, the JIT started execution of a function and got to a function call. It realized that the function was not yet JIT compiled and invoked the standard set of routines to resolve the function. In this case, there is no body defined for the function, so the JIT ended up calling “dlsym("sin")” on the Kaleidoscope process itself. Since “sin” is defined within the JIT’s address space, it simply patches up calls in the module to call the libm version of sin directly.
lib/ExecutionEngine/JIT/JIT.cpp
- 特别是它对
DynamicLibrary
的使用.
关于llvm - 从 ExecutionEngine 调用 C/C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17584752/
我正在使用 Neo4j 1.8.RC1,并尝试为图中的节点生成聚类系数。 我有以下代码,据我所知,它可以在 Linux 系统上运行,但不能在我的 Windows 计算机上运行: Map params
尝试使用找到的示例代码中的类似示例 here 我的示例函数是: void query() { String nodeResult = ""; String rows = "";
我只花了 10 分钟弄清楚为什么我针对测试数据库的单元测试需要大约 25 秒才能完成一个简单的查询。显然,原因是我忘记在 Transaction 中包装对 ExecutionEngine#execut
我在想ExecutionEngine在 java 中对 neo4j 数据库运行密码查询。 我想获取节点存在的所有关系。 我的原始密码是: MATCH (n:Phone{id:'you'}) MATCH
在 Neo4j 的 neo4j-2.2.0-M03 版本中,当我尝试导入时 import org.neo4j.cypher.javacompat.ExecutionEngine; 和 导入 org.n
我有一个使用 LLVM-C 的简单程序: #define __STDC_LIMIT_MACROS #define __STDC_CONSTANT_MACROS #include #include
我一直在研究 OCaml 的 LLVM Kaleidoscope 教程。在教程的第三部分,我已经导航到文件夹中的示例代码 OCaml-Kaleidoscope\Chapter4 编译时遇到问题 oca
我正在学习 llvm 并想对我的想法进行概念证明。 基本上,我想拆分我的编译器和我的运行时。编译器会给出一个 .bc,运行时会通过 ParseBitcodeFile 加载它并使用 ExecutionE
ExecutionEngine 实例的最佳实践是什么?我记得在 Neo4j 新闻组上看到一篇文章说应该在应用程序中共享一个实例,但我能找到的所有示例都表明并非如此。总体最佳实践是什么?这有关系吗? 最
我在运行单元测试时遇到错误。如果我调试单元测试 vstest.executionengine.x86.exe 运行,然后在测试通过时关闭。 如果我只是运行测试(即使测试就像创建一个新列表一样简单,没有
我们遇到的问题是我们的一个 C++ 单元测试导致异常 0xC0000005(来自 dmp 文件 -> 线程试图读取或写入它没有适当访问权限的虚拟地址)正在执行方法签名(甚至不执行方法的主体)。 这之后
添加运行多个 VS 版本的新单元测试后,我收到此错误: vstest.executionengine.x86.exe 已停止工作 在弹出窗口中。 最佳答案 我必须检查递归调用以解析(外键映射中的ToS
我在 OSX 上运行,使用 Clang 编译一些使用 OSX Cocoa 类的 Obj-C 代码,我试图用 LLVM JIT 编译器运行结果。我使用的是 LLVM/Clang 的最新前沿版本。 编译或
当我在 TFS 服务器上运行测试时,出现以下错误: The active Test Run was aborted because the execution process exited unexp
我正在开发 Windows 8.1 应用商店应用程序,并且我创建了单元测试。上周一切顺利,但几天后我无法构建我的单元测试项目。 每个单元测试项目都有以下两个错误: list 引用文件“vstest.e
我正在尝试加载一些数据,按特定字段过滤并将输出存储到 HDFS。我的代码如下所示: data = LOAD '$inputPath' using AvroStorage(); data = FILTE
我是一名优秀的程序员,十分优秀!