ARM-GAS: how to load address of static array defined in some c-file (PIC and regular code)
我在 c 文件 (const int data_input[1024];) 中定义了一些简单的静态数组,我需要从我的汇编代码中访问它。正确的做法是什么?
到目前为止,我一直是这样做的:
1 2 3 4 5 6 7 8 | .global data_input data_input_ptr: .word data_input my_function: adr r1, data_input_ptr bx lr |
AFAIK,adr 是 ldr r1、=data_input_ptr 或类似的伪操作。
对我来说,我这样做的方式似乎不是很正确:首先,如果在链接时检测到有可能,那么 adr r1、data_input 可能会直接使用 pc 相对寻址。
另一个问题是关于 PIC:如果代码必须与位置无关怎么办。如果 data_input_ptr 的值必须由加载器初始化,它是如何工作的(我对此是否正确?)
你这样做的方式应该可行,但另一种处理方式是使用数组的地址作为汇编函数的第二个参数。像这样的东西:
1 2 3 4 5 6 7 8 9 10 | Call from c-file: my_function(original_argument, data_input); my_function.h: void my_function(void *original_argument, int *array_address); my_function.S: my_function: /* r1 already contains data_input_ptr since second argument ends up in r1 */ bx lr |