我正在編譯一個靜態庫,它利用了一些內聯彙編代碼。重新定位R_X86_64_32S針對`.text'在製作共享對象時無法使用
我注意到,當我使用標籤爲jmp
指令:
int foo(){
asm volatile
(
"mov 0x60(%r8),%r11d\n\t"
"jmp *S_401a70\n\t"
...
"S_401a70: xor %rax, %rax\n\t"
...
)
}
和編譯代碼到一個靜態庫具有以下標誌:
-Wl,--no-undefined -nostdlib -nodefaultlibs -nostartfiles -L$(SOME_LIBRARY_PATH) \
-Wl,--whole-archive -l$(SOME_Library_Name) -Wl,--no-whole-archive \
-Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \
-Wl,-pie,-eenclave_entry -Wl,--export-dynamic \
-Wl,--defsym,__ImageBase=0
我會得到一些錯誤,如:
/usr/bin/ld: Enclave/libtest.o: relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
但是,由於我正在編譯成一個sta抽象圖書館,我不認爲-fPIC
是有道理的。我試過了,但它根本不起作用。
這看起來像是gcc assembly extension
的問題,但我不確定。任何人都可以點亮這個燈光嗎?謝謝!
你是否嘗試從'jmp'指令中刪除間接('*')?這應該是一個相對跳躍,而這看起來像你想要的。 – owacoder