2017-04-27 59 views
1

我正在使用使用sparc v8體系結構的處理器。我想編譯我的可執行文件,使每個函數調用都是絕對地址。使用-fPIC選項生成與位置無關的代碼,這個標誌有沒有反轉?依賴於位置的代碼

回答

1

大多數海灣合作委員會的選項都有-fxxx-fno-xxx變種。

您可以輕鬆測試fPIC是否屬於這種情況。只需編譯一些簡單的測試:

int main() { printf ("Hello, world!\n"); } 

與像命令行:

gcc -fPIC test.c -S 

,並彙編尋找PLT相對呼叫

call [email protected] 

現在嘗試取消其反向此選項:

gcc -fPIC test.c -S -fno-PIC 

你會看到,PLT相關的呼叫已經結束,所以一切正常。

+0

哦,我明白了。 sparc v8指令集有兩個跳轉指令。 「call」用於相對跳轉,「jmpl」用於絕對跳轉。所以必須有可能生成絕對跳轉的代碼。我剛剛使用帶有-fno-pic的sparc gcc。即使代碼編譯它仍然會生成圖片代碼。我是否需要將此標誌傳遞給鏈接器? – Prakhar

+0

不,只是編譯器選項。 fno-PIC和fno-pic(大和小模式)之間有區別。檢查編譯器行:取消選項應該是最後一個並且是相同的情況。 –