Я пытаюсь вызвать длинные вызовы функции __aeabi_fmul из файла foo. c. Я не использую libg cc, во время компоновки я передаю файл символов с адресом __aeabi_fmul.
В foo. c Я вижу, что компилятор собрал вызов в инструкцию:
BL address_of_aeabi_function
Это нормально, но я хотел бы спровоцировать длинный вызов, когда 32-битный адрес функции будет в разделе .got, и компилятор в конечном итоге выполнит BL, используя 32-битный регистр, следовательно, делает длинный вызов.
Я могу вызывать длинные вызовы своих собственных функций, используя атрибут:
float my_func(float) __attribute__((long_call));
, но
float __aeabi_fmul(float, float) __attribute__((long_call));
не работает ...
Я также могу вызывать длинные вызовы на __aeabi_fmul, если я укажу -mlong-вызовы в флагах компилятора. Но если я делаю это, все функции используют длинные вызовы, а это не то, что мне нужно.