【发布时间】:2012-11-01 16:14:47
【问题描述】:
我有一个声明全局变量的 C 文件。该文件将与一些 ARM 程序集文件一起编译。
int foo;
void call_asm(void);
int main(void) {
call_asm();
return foo;
}
call_asm:
...
我尝试使用 link from the arm infocenter,但编译器 (arm-linux-gnueabi-gcc) 告诉我“导入”是未定义的指令。
我可以简单地做类似的事情吗:
LDR r0, =GLOBAL_VAR
如何在汇编中使用C文件中定义的全局变量?
【问题讨论】:
-
您应该接受您的答案或提供 cmets。
-
GAS 假定所有未声明的符号默认都是外部的。是的,您可以使用
ldr r0, =foo将地址输入r0。 (假设平台没有在 C 名称前添加_。) -
Andy Polyakov 在 OpenSSL 中有一项针对此用例的技术。查看
sha1_armv4.S(和朋友)的翻译代码,以及如何处理OPENSSL_armcap_P。 (链接的代码是 Perl 源代码;需要按照Cryptogams SHA 进行翻译)。但是,我在共享库中遇到了 "unexpected reloc type 0x03"。我需要消化OPENSSL_armcap_P。