下面是設置:我正在使用LLVM,並且我有一個分析過程,需要將分析的某些結果提供給以後使用。這些結果需要在我生成的最終.s文件(ARM體系結構)中可見。然後,我在.s文件上運行一些腳本,這些腳本會使用這些結果進行進一步分析,但也取決於生成的ASM的實際結構(否則,我只會使用更多的LLVM傳遞)。在LLVM中,如何反映彙編文件中的元數據?
最初我以爲元數據是我想要的,我創建了一些簡單的測試函數來爲我關心的每個指令插入一些元數據。但我不知道如何使這個元數據反映在最終的.s文件中。更糟糕的是,我無法弄清楚如何製作我真正想要的元數據字符串。您將在下面看到的「5」永遠不會輸出。相反,我在輸出中看到46或47。
void addMetadata(Instruction& I) {
LLVMContext& C = I.getContext();
MDNode* N = MDNode::get(C, MDString::get(C, "5"));
I.setMetadata("alias_set", N);
std::cerr << "Instruction" << std::endl;
I.dump();
}
輸出示例:
Instruction
%30 = load i32* %29, align 4, !dbg !67, !alias_set !46
我也聽說了內聯彙編可能的工作,但我不知道這是否會允許我到一個特定的IR指令之前插入註釋或標籤。如果IR被重新排序,那麼標籤或評論將隨時隨地發送。基本上,我只想在.s文件中看到標籤或註釋,並帶有一些我想要的信息。有誰知道這是怎麼做到的嗎?謝謝!
感謝NerdPirate回來與您的解決方案:)在哪些類添加了這段代碼? – eternalStudent 2017-08-31 12:50:30