2017-04-21 32 views
1

我正在實施一個安全相關的傳遞,因此,我將注入一個自定義基本塊作爲LLVM IR函數傳遞的一部分。避免某些基本塊上的LLVM紅外優化

有沒有辦法,標記這個基本塊,以便以後通過不優化這個基本塊?

回答

0

恐怕我沒有一個非常直接的建議。但是這裏有幾件事要考慮。

在與所需/所需優化級別相關的所有優化(例如opt -O3)應用之後,您可以應用基本塊注入嗎? (我懷疑沒有,因爲你問。)

我也不知道你想避免哪些優化(取決於你在你的基本塊做什麼)。例如,你是否介意-simplifycfg的影響?換句話說,讓注入的基本塊與前導/後繼塊合併。

如果基本塊代碼是很普通的,也許你可以考慮保持在一個單獨的功能概述了塊,併爲其提供所需的任何輸入的參數和__attribute__((noinline))標記,以避免inlining。儘管如此,您可以將該基本塊中的所有內存訪問聲明爲volatile,這會禁止優化。看看this

編輯:也有Attribute::OptimizeNone與您可以裝飾的功能,並將它被opt及相關通行證優化過程中跳過。您可以關注012xx的來源中的屬性(又名grep)。

如果這是不夠的,因爲我在的地方我不知道任何一般黑名單/白名單功能, 我只能想到一個繁重的另類,但我不敢張貼呢。