Для GNU есть ли возможность указать в какое место положить функции run-time library?
Сейчас, если хочу, чтобы операция выполнялась из "быстрой" памяти, приходиться ручками писать такую же функцию и задавать ей необходимые атрибуты. Проблема в том, что не всегда получается также оптимально написать функцию на C, а в асм лезть не хочу.
Для примера - деление ___udivsi3.
Точно не скажу, ибо не знаю, но навскидку я бы пошёл таким путём:
- можно настроить компилятор/линковщик, чтобы содержимое каждого файла было в своей секии (по имени файла)
- настроить линковку проекта так, чтобы нужные файлы/секции располагались в ram
линкер файл положит, куда вы ему скажете, а используемую при этом функцию run-time library (все равно) положит в .text секцию.
Хотел стандартно, а получилось так:
1. Разбираем библиотеку на отдельные объектники
<toolchain name>-ar.exe -x libgcc.a
2. Копируем все нужные файлы куда вам удобно.
3. Убираем ключ линкера -lgcc, и наоборот добавляем <path to your _new_ runtime library files>/*.o
В случае, если вы их положили просто в папку ко всём остальным объектникам, можно так ./obj/_*.o
т.к. интересующие нас файлы начинаются с подчеркивания.
4. Если, как у меня в примере, нужно жестко задать локацию только одной функции ___udivsi3,
то в описании секций вместо
*(.text)
пишем
*(EXCLUDE_FILE (./obj/_udivsi3.o) .text)
5. А в описании к целевой секции пишем
.<name of section> : ... {
...
./obj/_udivsi3.o
...
} > <name of section>
В исходниках ничего менять не надо. Как и писать свои функции.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.