1
我正在使用使用sparc v8體系結構的處理器。我想編譯我的可執行文件,使每個函數調用都是絕對地址。使用-fPIC選項生成與位置無關的代碼,這個標誌有沒有反轉?依賴於位置的代碼
我正在使用使用sparc v8體系結構的處理器。我想編譯我的可執行文件,使每個函數調用都是絕對地址。使用-fPIC選項生成與位置無關的代碼,這個標誌有沒有反轉?依賴於位置的代碼
大多數海灣合作委員會的選項都有-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相關的呼叫已經結束,所以一切正常。
哦,我明白了。 sparc v8指令集有兩個跳轉指令。 「call」用於相對跳轉,「jmpl」用於絕對跳轉。所以必須有可能生成絕對跳轉的代碼。我剛剛使用帶有-fno-pic的sparc gcc。即使代碼編譯它仍然會生成圖片代碼。我是否需要將此標誌傳遞給鏈接器? – Prakhar
不,只是編譯器選項。 fno-PIC和fno-pic(大和小模式)之間有區別。檢查編譯器行:取消選項應該是最後一個並且是相同的情況。 –