从另一个 llvm::Module 获取函数声明

2023-12-26

在我的应用程序中,我有 2 个 LLVM 模块 - 运行时模块(其中包含void foo(int * a)函数定义)和可执行文件(我使用 LLVM C++ API 创建)。

在我的可执行模块中我创建int main(int argc, char ** argv)并想把llvm::CallInst进入它的身体,这会调用foo()来自运行时模块的函数。

这是我的代码:

Function * fooF = Function::Create(runtimeModule->getFunction("foo")->getFunctionType(),
    GlobalValue::WeakAnyLinkage, "foo", execModule);

之后,我将两个模块链接在一起:

Linker linker("blabla", execModule, false);
linker.LinkInFile("/path/to/runtime.bc", false);
execModule = linker.releaseModule();

这编译正常,但是当我在链接模块上运行 Verifier pass 时,我得到:

Global is external, but doesn't have external or dllimport or weak linkage!
void (%i32*)* @foo
invalid linkage type for function declaration
void (%i32*)* @foo

值得一提的是,运行时模块中的所有全局变量都是使用Internalize pass 内部化的。链接之后,但在运行验证程序之前,我正在运行“死亡全局消除”传递以及其他一些优化。当我这样做时dump()在生成的模块上,我明白了@foo来自运行时模块的也被删除,尽管它被使用main()。看来,LLVM认为@foo运行时定义和@foo可执行文件中的声明是不相关的。

我尝试过使用链接类型 - 没有运气。

那么,从另一个模块创建对该函数的调用的正确方法是什么?


好吧,我已经解决了,但我仍然不明白问题出在哪里。在构建运行时位码模块期间,我一直在对其应用内部化转换。所以我尝试在链接后在运行时执行此操作,它对我有帮助。

啊,我一直在使用GlobalValue::WeakAnyLinkage.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个 llvm::Module 获取函数声明 的相关文章

随机推荐

  • 使用 BeautifulSoup 选择所有 div 兄弟姐妹

    我有一个 html 文件 其结构如下 div div div div div div div div div div div div div div 我想选择所有兄弟 div 而不选择第三个和第四个块中的嵌套 div 如果我使用find a
  • 竞争条件:整数的最小和最大范围

    我最近在一次采访中被问到这个问题 给定以下代码 静态整数的最小和最大可能值是多少num import java util ArrayList import java util List public class ThreadTest pri
  • 统一选择将物品分布放入垃圾箱中

    想象一下你有n物品和m垃圾箱 所有物品都是相同的 但箱子是不同的 随机选择一批物品放入垃圾箱的最快算法是什么 例如 想象一下104是将 5 件物品放入 3 个箱子中 将 5 件物品放入 3 个箱子中 有 21 种可能的放置方式 005 01
  • 检查最近x秒内是否添加了mySQL记录

    我有一个 mySQL 数据库和一个表 在其中创建项目的新记录 创建的每个项目都有一个 项目名称 和一个事件创建日期 DATETIME 类型 可以有两个使用相同名称创建的项目 但是如果它们是由同一用户快速连续创建的 则可以安全地假设这是用户的
  • 如何将 Cucumber 测试结果保存到文件

    我有一些可以从控制台运行的黄瓜测试 rake cucumber 是否有命令行选项可以将测试结果存储到文本文件中 Either Run cucumber直接并使用 o From cucumber help o out FILE DIR Wri
  • 使用Python解析XML文件以获取所需数据并将其存储在mongodb数据库中

    我有一个 XML 文件 如下所示 我想从此文件中获取所有事件的以下信息 在类别事件下 开始日期 end date title 根据类别场地 address 地址2 city latitude 经度 name 邮政编码 然后将这些信息存储在
  • HeadersTooLargeException - 响应标头

    我在 Spring mvc 的项目中实现了文件下载 在下载文件时 它在 tomcat 7 服务器上出现以下错误 org apache coyote http11 HeadersTooLargeException An attempt was
  • Google Push-To-Deploy Pipelines - 单元测试因模块导入错误而失败

    当我尝试在 Compute Engine 中的 Google 配置的 Jenkins 服务器上执行构建时 出现以下错误 deployment 5371449468518400 1411607125060 bin sh xe tmp huds
  • 用于测试的 MQTT 代理

    尝试创建一个订阅 MQTT 代理并处理数据的 Python 脚本 然而 MQTT 代理到目前为止还没有收到任何数据 这使得测试变得困难 我发现以下脚本可以订阅主题并打印出有效负载 但我似乎无法连接到测试代理 import paho mqtt
  • ScrollViewer/StackPanel 构造内的 DataBound ListBox 和 Button,其中 Button 出现在 ListBox 内容末尾的下方

    我有以下构造 它显示了 StackPanel 内的 DataBound ListBox 和 Button 后者再次放置在 ScrollViewer 内
  • 从 mysqldump 创建的 SQL 恢复后出现错误 1465“无法在系统表上创建触发器”

    我在 amazon RDS 上运行 mysql 5 6 服务器 并设置一个只读副本 用于使用 mysqldump 创建备份 我尝试使用 all databases 选项 但是当我尝试导入 mysqldump 创建的 SQL 时 我最终从 m
  • 更新 Symfony2 上的composer.phar

    我有一个已经启动的 Symfony2 项目 我需要安装一个新捆绑 https packagist org packages doctrine mongodb odm bundle 正如我所见 我需要向我的composer json 添加一个
  • MySQLdb:操作数应包含 1 列

    我正在尝试使用 Python 和 MySQLdb 将一些数据插入 MySQL 数据库 当我在程序中执行以下函数时 MySQL 返回错误 1241 操作数应包含 1 列 用户 密码和数据库正确 表存在并且所有权限均已授予 def write
  • Pygame:无限滚动相机?

    所以我在 pygame 中编写了一个小型平台游戏 您可以在其中放置块并在它们上跳跃 但是 游戏仅限于窗口的边框 显然 那么如何添加使用 A 和 D 键滚动 相机 的方法呢 这是游戏的代码 import pygame random from
  • 在 Linq To Entities 中使用多个列连接表

    Linq to Entities 中的每个连接示例仅涉及on条款 如果我需要 2 列或更多列来制作 语法是什么join工作 如果可能的话 我还需要一个 Linq to Entities 查询表达式和基于方法的示例 下面是我需要的示例 表 1
  • PHP搜索引擎脚本

  • 哪些工具执行 IL 的编译后修改?

    最近提到 PostSharp 让我想起了这一点 去年我工作的时候 我们正在考虑使用 PostSharp 将检测注入到我们的代码中 这是在 Team Foundation Server 团队构建 持续集成环境中 考虑到这一点 我对 PostS
  • 帮助理解 javascript 全局消除技术

    来自 DailyJS 让我们构建一个 JavaScript 框架 http dailyjs com 2010 02 25 djscript part 1 structure 我不太确定以下代码 显然用作全局抑制技术 到目前为止 我的理解对
  • 使用移动设备的触摸事件模拟拖放事件

    前段时间 我在移动设备上的网络浏览器中进行拖放操作时遇到了困难 默认的 JavaScript 事件在移动设备上不起作用 您只能使用触摸事件 就我而言 我需要通过拖放来交换两个图像以及 ID 这里有一个例子 div display inlin
  • 从另一个 llvm::Module 获取函数声明

    在我的应用程序中 我有 2 个 LLVM 模块 运行时模块 其中包含void foo int a 函数定义 和可执行文件 我使用 LLVM C API 创建 在我的可执行模块中我创建int main int argc char argv 并