Die Verwendung von globalen Variablen in C deklariert, im Arm assembly

Ich habe eine C-Datei die Deklaration einer globalen Variablen. Diese Datei wird kompiliert werden, zusammen mit einigen ARM-assembly-Dateien.

int foo;

void call_asm(void);

int main(void) {
    call_asm();
    return foo;
}
call_asm:
    ...

Ich habe versucht mit der link aus dem arm infocenter aber der compiler (arm-linux-gnueabi-gcc) sagt mir, dass der "import" ist eine Undefinierte Anweisung.

Kann ich einfach so etwas wie:

LDR    r0, =GLOBAL_VAR

Wie kann ich die globalen Variablen definiert, die in die C-Datei in der Montage?

  • Sie sollten akzeptieren, Ihre Antworten oder Kommentare.
  • GAS wird davon ausgegangen, dass alle nicht deklarierten Symbole sind externe standardmäßig. Ja, Sie können einfach verwenden ldr r0, =foo um die Adresse in r0. (Vorausgesetzt, eine Plattform, die nicht voranstellen _ auf C Namen.)
  • Andy Polyakov hat eine Technik, die in OpenSSL für diesen Anwendungsfall. Kasse der übersetzte code für den sha1_armv4.S (und Freunde), und wie OPENSSL_armcap_P behandelt wird. (Die verlinkten code ist, den Perl-Quellcode; es muss übersetzt werden pro Cryptogams SHA). Allerdings war ich erlebt "unerwartete reloc-Typ 0x03" in einer gemeinsam genutzten Bibliothek. Ich musste gut OPENSSL_armcap_P.
InformationsquelleAutor de1337ed | 2012-11-01
Schreibe einen Kommentar