在xcode更新后缺少llvm中的调试元数据

时间:2014-11-19 17:58:30

标签: xcode clang llvm llvm-clang

我正在开发一些与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的-苹果darwin14.0.0

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

1 个答案:

答案 0 :(得分:0)

虽然我仍然不熟悉该解决方案,但我已经破解了LLVM代码并从llvm::UpgradeDebugInfo代码中移除了对BitcodeReader::MaterializeModule方法的调用。当然,如果使用一些真正不兼容的LLVM编译器,我可能会受到惩罚,但是现在它可以使用,此外不仅可以使用来自XCode的clang,而且我也可以使用来自LLVM release page的Clang "使用无效版本(0)和#34;调试信息。