首页 \ 问答 \ 在LLVM 2.8中调用LLVM bitcode函数(Calling LLVM bitcode function in LLVM 2.8)

在LLVM 2.8中调用LLVM bitcode函数(Calling LLVM bitcode function in LLVM 2.8)

我正在尝试读取并调用从LLVM 2.8中的LLVM bitcode解析的函数。 我的一切都与实际的通话有关,这会使程序崩溃。

首先我有这个C代码:

void hello() {}

我编译了这个:

llvm-gcc -c -emit-llvm hello.c -o hello.bc

这是一个应该读取的代码的精简版本:

using namespace std;
using namespace llvm;

void callFunction(string file, string function) {
  InitializeNativeTarget();

  LLVMContext context;
  string error;

  MemoryBuffer* buff = MemoryBuffer::getFile(file);
  Module* m = getLazyBitcodeModule(buff, context, &error);

  // Check the module parsed here.
  // ...

  ExecutionEngine* engine = ExecutionEngine::create(m);

  // Check the engine started up correctly here.
  // ...

  Function* func = m->getFunction(function);

  // Check the function was found here.
  // ..

  vector<GenericValue> args(0);

  // This is what crashes.
  engine->runFunction(func, args);
}

我已经包含了大量的LLVM头文件,包括ExecutionEngine / JIT.h,以及每一步的代码检查,以确保值不为NULL。 它解析了bitcode,我检查了它发现的函数,以确认它是否符合预期。

我也尝试过自己构建一个模块和函数,它按预期工作,所以问题肯定来自于函数是由bitcode产生的。


I'm trying to read and call a function parsed from LLVM bitcode in LLVM 2.8. I have everything working apart from the actual call, which crashes the program.

First I have this C code:

void hello() {}

I've compiled this with:

llvm-gcc -c -emit-llvm hello.c -o hello.bc

Here's a trimmed down version of the code that's supposed to read it:

using namespace std;
using namespace llvm;

void callFunction(string file, string function) {
  InitializeNativeTarget();

  LLVMContext context;
  string error;

  MemoryBuffer* buff = MemoryBuffer::getFile(file);
  Module* m = getLazyBitcodeModule(buff, context, &error);

  // Check the module parsed here.
  // ...

  ExecutionEngine* engine = ExecutionEngine::create(m);

  // Check the engine started up correctly here.
  // ...

  Function* func = m->getFunction(function);

  // Check the function was found here.
  // ..

  vector<GenericValue> args(0);

  // This is what crashes.
  engine->runFunction(func, args);
}

I've included plenty of LLVM headers, including ExecutionEngine/JIT.h, and the code checks at each step to make sure values aren't NULL. It parses the bitcode, and I have examined the function it finds to confirm it was as expected.

I've also tried building a module and function myself, which works as expected, so the problem definitely arises from the fact that the function is produced by the bitcode.


原文:https://stackoverflow.com/questions/4755172
更新时间:2023-04-15 09:04

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。