我必須爲某些目的而測試gcc。目標是能夠跟蹤在特別編譯期間調用哪些GCC函數。不幸的是,我對GCC的體系結構並不熟悉,所以我需要一點幫助。我嘗試了以下步驟:如何儀器gcc?
1)攻擊gcc/Makefile.in並向T_CFLAGS添加「-finstrument-functions」標誌。
2)我有一個已經實施和測試的版本start_test和end_test函數。它們在調用toplev_main()之前和之後從gcc/main.c中調用。包含文件鏈接到gcc(該對象被添加到OBJS-common,並且依賴關係稍後在gcc/Makefile.in中定義)
3)使用contrib/download_prerequisites下載先決條件。
4)執行從一個乾淨的構建目錄中的配置(與源目錄相同的級別):./../gcc-4.6.2/configure --prefix="/opt/gcc-4.6.2/" --enable-languages="c,c++"
5)以「讓所有」
這樣,我拼命地跑出來的內存開始構建,雖然我有28G。
接下來,我嘗試從Makefile中刪除T_CFLAGS設置,併爲make命令提供-finstrument-functions:make CFLAGS="-finstrument-functions"
。這種構建是成功的,但是當我試圖編譯一些東西時,它會產生空的輸出文件。 (理論上end_test本應將其結果寫入給定文件。)
我該怎麼做出錯? 在此先感謝!
你想在編譯GCC的內部函數時跟蹤嗎?或者你在編譯什麼? –