【问题标题】:Missing debug metadata in llvm after xcode updatexcode更新后llvm中缺少调试元数据
【发布时间】:2014-11-19 17:58:29
【问题描述】:

我正在开发一些适用于 llvm 字节码文件的 C/C++/Objective C 静态分析实用程序。它的基本思想很简单:
1. 实用程序使用参数“-c -emit-llvm -femit-all-decls -g”执行clang/clang++,为测试的源文件生成llvm字节码文件。
2. 如果文件被创建,它被 LLVM C 绑定读取并检查。与某些特定代码点相关的问题通过源引用报告,因为存在带有源引用的调试元数据。

我有一个运行良好的实用程序原型,但最近我将 Xcode 更新到 6.1 并且源引用丢失了。
为了解决这个问题,我尝试使用更新的编译器重建我的工具和 llvm 静态库,但它并没有解决我的问题。 我试图从 llvm 收到任何提示,我最终得到的唯一结果是:

➜ bin ./llvm-dis test.bc
警告:忽略 test.bc 中具有无效版本 (600054001) 的调试信息

所以 llvm-dis 向我显示了上面的警告并生成了 test.ll 文件,该文件被剥离了任何调试元数据属性。

这是我正在使用的简单测试源文件:

int returnFive() {
    return 5;
}

以及一些可能有用的信息:

➜ bin clang --version
Apple LLVM 6.0 版 (clang-600.0.54)(基于 LLVM 3.5svn)
目标:x86_64-apple-darwin14.0.0
线程模型:posix
➜ bin ./llvm-config --version
3.5.0
➜ bin ./llvm-config --host-target
x86_64-apple-darwin14.0.0

对我来说,这似乎非常兼容,但事实并非如此,也许有人可以就如何解决这个问题给我任何建议?

【问题讨论】:

    标签: xcode clang llvm llvm-clang


    【解决方案1】:

    虽然我仍然对解决方案不满意,但我已经破解了 LLVM 代码并从 BitcodeReader::MaterializeModule 代码中删除了对 llvm::UpgradeDebugInfo 方法的调用。当然,如果使用了一些真正不兼容的 LLVM 编译器,我可能会因此受到惩罚,但现在它可以工作,而且不仅可以使用 XCode 中的 clang,而且我也可以使用 LLVM release page 中的 Clang,这也会产生“调试版本无效的信息 (0)"。

    【讨论】:

      猜你喜欢
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多