【问题标题】:LLVM segmentation fault with opt command使用 opt 命令的 LLVM 分段错误
【发布时间】:2014-08-10 16:28:16
【问题描述】:

当我尝试在文件 XX.c 上运行 llvm 中给出的非常简单的(Hello world)传递(我的文件是传递 Hello.cpp)时 (X64 操作系统) 选择命令

opt -load ../../../Release+Asserts/lib/Hello.so -hello vv.bc > vv.txt

给出这个错误

0  libLLVM-3.2svn.so 0x00007f314b0f1e52
1  libLLVM-3.2svn.so 0x00007f314b0f22b3

2  libpthread.so.0   0x00007f314a0c7340

3  libstdc++.so.6    0x00007f31499645cb std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&) + 11

4  libLLVM-3.2svn.so 0x00007f314aadef1d llvm::createPrintFunctionPass(std::string const&, llvm::raw_ostream*, bool) + 77

5  libLLVM-3.2svn.so 0x00007f314aad1585 llvm::PMTopLevelManager::schedulePass(llvm::Pass*) + 37

6  opt               0x0000000000413e4f main + 4767

7  libc.so.6         0x00007f31492eeec5 __libc_start_main + 245

8 opt 0x000000000040dfca 堆栈转储:

0.  Program arguments: opt -load ../../../Release+Asserts/lib/Hello.so -hello vv.bc 

分段错误(核心转储)

任何建议都将是可观的。我是 Linux 和 llvm 的新手

【问题讨论】:

    标签: llvm


    【解决方案1】:

    我发现非常有用的是使用verifier pass

    首先,确保基本的opt 流程按预期工作,并且输入文件是合法的:

    opt -verify vv.bc -o out.bc
    

    然后确保您的通行证生成合法模块:

    opt -load ../../../Release+Asserts/lib/Hello.so -hello -verify vv.bc -o out.bc
    

    如果这仍然没有帮助,我会启动调试器。

    【讨论】:

    • opt -verify vv.bc -o out.bc 工作正常,但 opt -load ../../../Release+Asserts/lib/Hello.so -hello -verify vv.bc -o out.bc 给出同样的错误
    • @techcomp 无赖。我会打开一个调试器并尝试找出问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多