Проблема
Я хочу выполнить системный вызов exit в ARM, используя встроенную сборку на Android-устройстве Linux, и я хочу, чтобы значение выхода считывалось из местоположения в памяти.
Пример
Без предоставления этого дополнительного аргумента макрос для вызова выглядит следующим образом:
#define ASM_EXIT() __asm__("mov %r0, #1\n\t" \
"mov %r7, #1\n\t" \
"swi #0")
Это хорошо работает. Чтобы принять аргумент, я настраиваю его на:
#define ASM_EXIT(var) __asm__("mov %r0, %0\n\t" \
"mov %r7, #1\n\t" \
"swi #0" \
: \
: "r"(var))
и я вызываю его, используя:
#define GET_STATUS() (*(int*)(some_address)) //gets an integer from an address
ASM_EXIT(GET_STATUS());
Ошибка
недействительный 'asm': номер операнда вне диапазона
Я не могу объяснить, почему я получаю эту ошибку, так как я использую одну входную переменную в приведенном выше фрагменте (% 0/var). Кроме того, я попытался с обычной переменной и по-прежнему получил ту же ошибку.