ARM-GAS:如何加载某个c文件中定义的静态数组地址(PIC和常规代码)

ARM-GAS:如何加载某个c文件中定义的静态数组地址(PIC和常规代码),arm,gnu-assembler,Arm,Gnu Assembler,我在c-file const int data_input[1024]中定义了一些简单的静态数组;我需要从我的汇编代码中访问它。正确的方法是什么 到目前为止,我一直是这样做的: .global data_input data_input_ptr: .word data_input my_function: adr r1, data_input_ptr bx lr 好的,adr是ldr r1的伪op代表,=数据输入ptr或类似的东西 对我来说,我这样做似乎不是很正确:首

我在c-file const int data_input[1024]中定义了一些简单的静态数组;我需要从我的汇编代码中访问它。正确的方法是什么

到目前为止,我一直是这样做的:

.global data_input data_input_ptr: .word data_input my_function: adr r1, data_input_ptr bx lr 好的,adr是ldr r1的伪op代表,=数据输入ptr或类似的东西

对我来说,我这样做似乎不是很正确:首先,adr r1,数据输入可能直接使用pc相对寻址,如果它在链接时检测到这是可能的。
另一个问题是关于PIC:如果代码必须是位置独立的,该怎么办。如果数据输入值必须由加载器初始化,那么它是如何工作的?我对此是否正确?

您这样做应该是可行的,但另一种处理方法是使用数组的地址作为汇编函数的第二个参数。大概是这样的:

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

我实际上是这样做的,因为我有问题--C++ + Mulgulle我不得不使符号外部的C -静态数组将不得不重新声明为非静态等。因此,似乎最好把所有脏工作委托给编译器,并将包含指针的额外参数传递给静态数组等。