草庐IT

llvm-objcopy

全部标签

c++ - LLVM 字符串值对象 : How can I retrieve the String from a Value?

当从现有的AST构建IR时,我的AST有一些字符串值(在编译时它们是从std::string构建的)并且我想将它们安全地设置为llvm::Value用作表达式的一部分。在这种情况下,我不需要在运行时绑定(bind)字符串,因为字符串值仅用于在编译时将内容解析为变量、函数或类(该语言不支持native字符串类型)。什么是将我的字符串内容保持为llvm::Value并且仍然能够在编译的后期阶段检索它的最佳方法(当构建嵌套表达式时)?更具体地说,如果我将llvm::Value设置为:llvm::Value*v=llvm::ConstantArray::get(llvmContext,mySt

使用 Apple 的 LLVM 编译器编译 -O 时出现 C++ 代码段错误,但使用 g++ -7.2.0 时则不会

更新:我创建了一个更多的M,但仍然是重现崩溃的CVE。摘要:删除了Base类中对Bool*bools_字段的所有使用(但它仍然必须定义,否则不会发生崩溃)。还从Base及其后代中删除了Base::Initialize()和虚方法Rule。附上新的MCVE。我已经设法为此代码创建了一个MCVE并将其发布在下方。一些描述性细节:代码使用虚基类和派生类,某些实例化的派生类具有调用从“基”类继承的非虚方法的构造函数(实际上是派生类,但在继承层次结构比我所说的“派生”类)来初始化“基”类数据。该方法调用在派生类中重写的虚方法。我意识到这是一件危险的事情,但根据我对C++的(可能有限的)理解,它似

c++ - objcopy 将目录路径名附加到符号名

我打算使用objcopy将文本文件的二进制形式包含到可执行文件中。(在运行时我需要文件作为字符串)。这工作正常,直到链接器需要从符号名称中找到引用。问题是objcopy在符号名称前加上文件的路径名。由于我正在使用GNUAutotools来发送包,这个预先设置的路径名发生了变化,我不知道在C/C++程序中使用什么外部链接器符号。nmlibtest.a|greptextfiletextfile.o:00001d21D_binary__home_git_textfile_end00001d21A_binary__home_git_textfile_size00000000D_binary__

c++ - objcopy --redefine-syms 绑定(bind)失败

先决条件第三方提供了使用共享对象libfoo.so的C++可执行文件fooapp。该库还带有一个headerfoo.hpp,因此开发人员可以构建其他应用程序:/*foo.hpp*/namespacefoo{voidbar(inta,intb);//Morecodebelowhere成功范例这是一个标准的基于LD_PRELOAD的函数插入工作流程。首先,我编写了我自己的库版本myfoo.cpp,它完全反射(reflect)了部分foo.hpp:/*myfoo.hpp*/#includenamespacefoo{voidbar(inta,intb){std::cout然后我将我的库编译成l

c++ - 将编译器从 x86 汇编移植到 LLVM

最近,为了磨练我的汇编技能,我用C++为玩具语言编写了一个非常简单的编译器。它运行单channel,并在解析阶段直接将代码发送到多个字符串流,每个字符串流代表一段代码(即一个代表section.bss,而其他代表.data和.text)。然后,将这些字符串流写入一个文件,我使用NASM和gcc来组装和链接它们。我知道这种单遍方法效率极低,但同样,这更像是一种理解代码生成阶段的练习,而不是其他任何东西。无论如何,我想修改我的代码以直接发出LLVMIL而不是原始汇编,再次作为学习练习。是否有任何关于LLVMIL的入门级指南?或者,更好的是,一个工具来确定一行汇编的等效IL代码?我看了看,只

c++ - 是否可以将 LLVM 位码文件读入 llvm::Module?

我正在使用LLVM编写编译器。每个源文件都被编译成一个LLVM位码文件。最终,链接器将所有位码文件链接并优化为一个最终的二进制文件。我需要一种方法来读取编译器中的位码文件,以便访问类型信息。LLVM文档显示了一个名为BitcodeReader的类,但它似乎是LLVM的内部类。是否有任何可公开访问的方式将位码文件读入llvm::Module? 最佳答案 我查看了llvm-dis工具的源代码,找到了我要找的功能:Module*ParseBitcodeFile(MemoryBuffer*Buffer,LLVMContext&Context

windows - 如何从 LLVM ir 创建可执行文件?

我目前正在使用llc使用命令行将.ll文件转换为.s。然后我想拿这个文件然后使用nasm从中创建可执行文件。虽然第一步似乎工作正常,但我无法让第二步工作。原始文件名为code.ll,包含以下代码:definei32@main(){reti320}现在我使用cmd通过键入以下内容来构建.s文件:llccode.ll这工作正常并创建一个包含以下代码的code.s文件:.def@feat.00;.scl3;.type0;.endef.globl@feat.00@feat.00=1.def_main;.scl2;.type32;.endef.text.globl_main.align16,0x

windows - 为什么 Windows 上的 llvm-config 不为 clang++.exe 发出正确的参数?

我不是经验丰富的LLVM用户,但我正在尝试在Windows上编译LinuxLLVM项目。该项目是GHDL。因为适用于Windows的即用型LLVM安装程序没有捆绑llvm-config,所以我需要从源代码编译LLVM和clange。该项目需要LLVM3.5。首先,我下载了llvm-3.5.2和clang-3.5.2并使用CMake将其转换为VisualStudio2013项目。然后我用VS2013编译了一下。原始makefile调用llvm-config。生成的字符串传递给clang++:clang++-c-I`/usr/lib/llvm-3.5/bin/llvm-config--in

windows - 通过 LLVM 或 GCC 以 WinRT 为目标

LLVM和GCC都支持Objective-C,我喜欢这种语言。因此,我有兴趣使用LLVM或GCC来定位WinRTnative代码,可能使用MinGW。虽然我感兴趣的问题应该很容易通过谷歌搜索,但我找不到任何重要信息:LLV​​M或GCC是否支持以WinRT为目标?英特尔有一篇关于usingIntelC++Compiler13.0withVisualStudio2012的文章其中可能包含有用的提示。还有一个nearduplicatequestion. 最佳答案 Clang现在完全支持Windows上的nativeC和C++,以及nat

windows - Windows 上 LLVM 汇编语言中的 Hello World

作为一名经验丰富的程序员,问这样一个问题我觉得很愚蠢:是否有分步教程解释如何用LLVM汇编语言编写“HelloWorld”程序,生成一个简单的“hello.exe”哪些可以在标准WindowsPC上执行?我遵循了几十个这样的教程,解释了如何检查、制作、编译llvm等。但是他们要么需要一些其他软件(这会导致另一个教程-Marathon),要么他们以一些“路径/文件/Dll”结束未找到”-错误(导致另一个教程-马拉松)。我实现了让llvm.exe执行...一次。现在Windows报告应用程序崩溃了?!现在我完全迷失在过时的教程、错误、不兼容、模拟器/虚拟机、IDE、交叉链接、32位与64位