从另一个 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 获取函数声明 的相关文章

  • 在 CMake 中设置 Clang 库的路径

    我从 git 构建 llvm 并希望在项目中使用这些库 尤其是 libclang makefiles 是通过 CMake 生成的 对于 LLVM 部分 我找到了设置LLVM DIR重新路由 llvm 库的路径 但对于 Clang 我找不到这
  • LLVM IR 指令和源代码行之间的映射

    如果使用 llvm gcc 或 Dragonegg 我如何存储 LLVM IR 指令和源代码行之间的映射 内部 LLVM IR 调试信息应用于此目的 看http llvm org docs SourceLevelDebugging html
  • Clang 项目的 AST

    我使用 Clang python 绑定来提取 c c 文件的 AST 它非常适合我编写的一个简单程序 问题是当我想将它用于像 openssl 这样的大项目时 我可以为项目的任何单个文件运行 clang 但 clang 似乎错过了项目的一些标
  • Xcode“来自调试器的消息:对 k 数据包收到意外响应:正常”

    在模拟器上测试我的应用程序时收到此消息 来自调试器的消息 对 k 数据包收到意外响应 正常 这是什么意思 我的应用程序是否存在任何危险 使用 Xcode 6 4 和 7 2 如果你看一下文件进程GDBRemote cpp http llvm
  • 如何在 LLVM 中将 genericValue 转换为 Value?

    我从事口译工作 我在内存中有一个变量的地址 我设法从它中获取实际值 并使用 LoadValueFromMemory 函数将其放入 genericValue 中 现在我需要创建一个 StoreInst 并希望将获得的值放入 Value 对象中
  • 有 libclang 的教程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一些易于理解的 libclang 指南 我在这里或其他论坛上看到了一些帖子 但唯一推荐的信
  • 我可以使用 LLVM(低级虚拟机)为哪些平台编译二进制文件?

    我对使用 LLVM 的 Clang 编译器感兴趣 LLVM 声称是跨平台的 但尚不清楚可以针对哪些平台 我对此做了很多谷歌搜索 但似乎没有太多关于 LLVM 支持的平台的信息 我唯一发现的是 this http llvm org docs
  • 一个 XSD、两个代码生成工具、两个命名空间

    我有一个 XSD 文件 我还想从中生成 C 和 Java 类 我首先根据类所在的 C 命名空间在 XSD 中设置命名空间 生成 使用 Microsoft 工具 运行良好 序列化也运行良好 我可以根据 XSD 验证它们 完美 现在我想使用 J
  • 使用 LLVM 将 x86 代码重新编译为更快的 x86

    是否可以输入 x86 32 位代码来运行 LLVM 编译器 有一个巨大的算法 我没有源代码 我想让它在相同的硬件上运行得更快 我可以通过优化将其从 x86 转换回 x86 吗 这段代码运行时间很长 所以我想对其进行静态重新编译 另外 我可以
  • badref 是什么意思?

    IR线是什么意思 define i32
  • llvm OCaml 绑定

    我正在研究 llvm OCaml 绑定 我通过 opam 安装了 llvm 包 opam install llvm 当我在 utop 中使用 llvm 时 出现以下错误 require llvm Error The external fun
  • 从源代码构建 Clang 时什么时候需要 libc++ 源代码?

    我多年来一直在 Linux 和 OS X 上构建 Clang LLVM 下载页面 http llvm org releases download html 我一直使用以下来源 LLVM LLVM 源 编译器前端 Clang 源 编译器 RT
  • 如何嵌入LLVM?

    LLVM 核心项目包括 编译器 将源代码转换为 LLVM IR VM 执行编译后的IR代码 如何将 VM 嵌入到 C 应用程序中 LLVM 实际上是一个可以链接到的库的集合 因此嵌入起来非常容易 更多时候 LLVM 会获取您生成的 IR 并
  • 如何在 CMake 项目中使用 LLVM 的 libcxx 和 libcxxabi?

    目前我正在跑步Debian 9 https en wikipedia org wiki Debian version history Debian 9 Stretch 拉伸 用系统默认的编译器GCC 6 3 0 但我有一个使用 CMake
  • LLVM 尾调用优化

    以下是我对事情的理解 当函数 f 调用自身是其最后一个动作时 它是尾递归的 通过形成循环而不是再次调用函数 可以显着优化尾递归 函数的参数已就地更新 并且函数体再次运行 这称为递归尾调用优化 LLVM 在使用 fastcc GHC 或 Hi
  • 识别 IR 中的阵列类型

    我一直在尝试使用以下代码来识别 IR 中的数组访问 for BasicBlock iterator ii BB gt begin ii2 ii BB gt end ii Instruction I ii if GetElementPtrIn
  • 从什么时候起 Xcode 不再需要前向方法声明,为什么?

    我注意到 Xcode 或更准确地说是 Apple LLVM 编译器 不再需要前向方法声明 换句话说 构建以下代码时不会发出警告 implementation Foo void foo self bar void bar end 这曾经发出警
  • NSManagedObject 的 Xcode 9 构建问题:Date 与 NSDate

    Xcode 9 生成不同的代码Date模拟器与设备中实体的类型属性 我有codegen功能下Class set to category extension在核心数据中 直到 Xcode 8 3 最新 一切都工作正常 NSDate总是 下面是
  • Xcode 3.1.4 中内置分析器

    我想知道 Xcode 3 1 4 中内置的分析器是否使得单独使用 LLVM Clang 静态分析器变得多余 请参考这里的原文 使用 LLVM Clang 静态分析器查找内存泄漏 http www fruitstandsoftware com
  • 如何从 LLVM 指令获取文件名和目录?

    我需要在 llvm 过程中提取目录和文件名 当前版本的 llvm 已移动getFilename and getDirectory from DebugLoc to DebugInfoMetadata 我找不到班级成员getFilename直

随机推荐

  • 使用 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 并