Спровоцируйте длительные вызовы функций __aeabi_fxxx с помощью G CC на руке. - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь вызвать длинные вызовы функции __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-вызовы в флагах компилятора. Но если я делаю это, все функции используют длинные вызовы, а это не то, что мне нужно.

...