從GCC

2012-02-01 20 views
4

的中間文件編譯對象文件通過使用-fdump-樹形*標誌,一個可以在源代碼文件的編譯期間轉儲一些中間格式文件。我的問題是如果可以使用該中間文件作爲gcc的輸入來獲取最終的目標文件。從GCC

我問這是因爲我想添加一些代碼添加到GIMPLE格式(通過使用標誌-fdump樹-GIMPLE獲得)的中間文件。當然,我可以使用鉤子並添加自己的傳球,但我不想達到那種複雜程度。我只是想給gcc修改後的中間文件,所以它可以從那裏開始編譯並給我最終的目標文件。任何想法如何實現這一目標?

+0

(+1)沒有回答要麼,但是,有些名單要達到相同的。 – umlcat 2012-02-02 00:22:57

+1

你見過[this](http://gcc.gnu.org/wiki/GimpleFrontEnd)嗎? – 2012-02-02 00:55:48

回答

3

GIMPLE是一種二進制內部格式,很難完全轉儲並正確重新載入。與LLVM相比,LLVM IR是,設計爲,可被抽運並可重新加載到通常的文件中(這些文件的文本和二進制格式可以從每個文件完全轉換爲其他格式)。您可以運行Clang前端發出LLVMIR,然後啓動opt程序進行一些優化,然後與其他程序進行優化,並且在階段之間將會有LLVM IR位碼文件。然後,您可以從IR位代碼開始代碼生成本地代碼(甚至理論上,到不同的平臺,請參閱PNaCl項目)。

有一些GCC的傾卸/重新加載內部代表項目。我知道這個項目是爲了將gcc與商業編譯器工具集成而創建的。作者不能只將商業代碼與gcc鏈接,因爲gcc是VIRAL(它會感染任何與反商業GPL鏈接的代碼)。所以,作者寫了一個GPL的GPL翻轉器/加載程序到一些外部(xml)格式;專有工具能夠讀取這些XML並將其轉換成其他格式相同的XML,然後使用GPL工具重新加載。

在新的gcc你在GPL條款寫一個插件,它is VIRAL (23.2.1)的一個選項。插件將對程序的內存表示進行操作,並且不存在通過外部文件轉儲/重新加載GIMPLE的問題。 有一些插件可以配置/可以使用用戶提供的程序,例如MELT(Lisp)和GCC Python(Python)。 GCC插件is there

+0

我知道gcc的這個項目名爲gcc-xil,它感染了GPL(免費下載)。 //稍後我會刪除此評論。 – osgx 2012-02-02 21:52:59

+0

因此,簡而言之,您是說LLVM更易於使用? – MetallicPriest 2012-02-03 07:50:28

1

有沒有內置工具到文字GIMPLE表示翻譯回原來的GIMPLE的內部表示。

你需要使用自定義的前端(如建議GIMPLE FE),使甩GIMPLE感。