首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本编译的LLVM-IR导致分段错误

基本编译的LLVM-IR导致分段错误
EN

Stack Overflow用户
提问于 2020-08-04 07:16:41
回答 1查看 93关注 0票数 1

我试着熟悉LLVM-IR,但不幸的是,我在尝试编译时总是遇到段错误。我特别测试过这个:

代码语言:javascript
复制
define void @main() {
entry:
  ret void
}

根据我所知道的,它在与lli一起使用时应该可以工作,并且确实不会导致错误(我还测试了一个'hello world‘,我找到了类似的结果,在lli中可以工作,但在编译时不能)

我一直在使用llclld进行编译,我使用的是ubuntu linux (嗯,bedrock linux,不过是ubuntu内核)。版本是一致的(LLVM10),我使用gnu链接器而不是lld进行了测试,结果是一样的。我已尝试将目标三元组显式设置为无结果。我还尝试重新安装LLVM和相关工具,同样没有用。我通过WSL在windows机器上得到了相同的结果。我有一些使用NASM的基本经验,据我所知,您需要进行适当的syscall才能优雅地退出汇编程序,LLVM-IR是否也是如此?我只能假设我正在做一些非常错误的事情,但我不能弄清楚它是什么。

我正在运行命令llc test.ll --filetype=obj && ld.lld test.o && ./a.out进行编译(如上所述,我已经尝试了不同的参数)。

对这里可能发生的事情有什么建议吗?

编辑:

我试着用一个调试器进入它,我在main上设置了一个断点,有趣的是,它在命中这个断点之前出现了一些错误。调试器的结果是:

代码语言:javascript
复制
* thread #1, name = 'a.out', stop reason = signal SIGSEGV: invalid address (fault address: 0x1)
    frame #0: 0x0000000000000001
error: memory read failed for 0x0

除了“进程已启动”和“进程已停止”位之外,这是调试器的唯一输出。

EN

回答 1

Stack Overflow用户

发布于 2020-08-05 17:29:31

您可以尝试使用gnu ld吗?由于错误显示为error: memory read failed for 0x0,我假设链接器正在扰乱起始地址。请提供objdump -D a.out的输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63238177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档