DILocationクラスを使用してllvm命令からデバッグメタデータを取得しようとしています。
ただし、命令の送信元のファイル名をDILocationに照会すると、ディレクトリが前面にタグ付けされたファイル名が取得されます。
ただし、ファイルだけが返され、getDirectory()を呼び出してディレクトリパス全体を取得する必要があります。
たとえば、XMain_0.cの代わりにpbg/XMain_0.cになります
私は次のようにビットコードをコンパイルしました:
XMain_0.o: pbg/XMain_0.c
$(CC) <snip> -c pbg/XMain_0.c
ディレクトリを含むソースを渡したという事実は、メタデータがソースファイル名を入力として保存することを意味しますか?
削減例は次のとおりです。
const llvm::Instruction* inst //passed in
MDNode *n = inst->getMetadata("dbg");
DILocation loc(n);
file = loc.getFilename().str(); // => pbg/XMain_0.c
dir = loc.getDirectory().str(); // => /projects/pbg/pbg-m/DIR
このデータを「正規化」するために呼び出すことができる呼び出しはありますか、それとも手動で行う必要がありますか?
それが重要な場合はClang3.1。