2017-04-27 2 views
1

Ich verwende einen Prozessor, der Sparc v8-Architektur verwendet. Ich möchte meine ausführbare Datei so kompilieren, dass jeder Funktionsaufruf absolute Adresse ist. Verwenden Sie die Option -fPIC, um positionsunabhängigen Code zu generieren. Gibt es eine Umkehrung dieses Flags?Positionsabhängiger Code

Antwort

1

Die meisten GCC-Optionen haben die Varianten -fxxx und -fno-xxx.

Sie können leicht testen, ob dies für fPIC der Fall ist. Nur kompilieren einigen einfachen Test:

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

mit Kommandozeile:

gcc -fPIC test.c -S 

und sucht nach PLT-Relativ Aufruf in Assembler

call [email protected] 

Nun versuchen, diese Option mit seiner Rückseite zu stornieren :

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

Sie werden sehen, dass der PLT-relative Aufruf weg ist, also funktioniert alles.

+0

Oh ich verstehe. Der Sparc v8 Befehlssatz enthält zwei Anweisungen zum Springen. "call" für relativen Sprung und "jmpl" für absoluten Sprung. Also muss es möglich sein, Code mit absoluten Sprüngen zu erzeugen. Ich habe gerade mit dem sparc gcc mit -fno-pic versucht. Obwohl der Code kompiliert wird, erzeugt er immer noch Bildcode. Muss ich dieses Flag auch an Linker übergeben? – Prakhar

+0

Nein, nur Compiler-Option. Es gibt einen Unterschied zwischen fno-PIC und fno-pic (großer und kleiner Modus). Compiler-Zeile prüfen: Die Cancel-Option soll zuletzt gehen und im selben Fall sein. –