ARM-GAS: как загрузить адрес статического массива, определенного в некотором c-файле (PIC и обычный код) - PullRequest
0 голосов
/ 27 ноября 2011

У меня есть некоторый простой статический массив, определенный в c-файле ( const int data_input [1024]; ), и мне нужен доступ к нему из моего кода сборки.Какой правильный способ сделать это?

До сих пор я делал это следующим образом:


.global data_input

data_input_ptr:
    .word data_input

my_function:
    adr r1, data_input_ptr
    bx lr

AFAIK, adr is псевдо-оператор стоит ldr r1, = data_input_ptr иличто-то в этом роде.

Мне кажется, что то, что я делаю, не совсем корректно: во-первых, в этом случае adr r1 data_input может напрямую использовать относительную адресацию pc, если во время соединения обнаружит, что это возможно.Другая проблема связана с PIC: что если код должен быть независимым от позиции.Как тогда это работает, если значение data_input_ptr должно быть инициализировано загрузчиком (я прав в этом?)

1 Ответ

0 голосов
/ 07 декабря 2011

То, как вы это делаете, должно работать, но другим способом обработки будет использование адреса массива в качестве второго аргумента функции сборки.Как то так:

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
...