RCray 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба Для GNU есть ли возможность указать в какое место положить функции run-time library? Сейчас, если хочу, чтобы операция выполнялась из "быстрой" памяти, приходиться ручками писать такую же функцию и задавать ей необходимые атрибуты. Проблема в том, что не всегда получается также оптимально написать функцию на C, а в асм лезть не хочу. Для примера - деление ___udivsi3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aaron 1 29 июля, 2015 Опубликовано 29 июля, 2015 (изменено) · Жалоба Точно не скажу, ибо не знаю, но навскидку я бы пошёл таким путём: - можно настроить компилятор/линковщик, чтобы содержимое каждого файла было в своей секии (по имени файла) - настроить линковку проекта так, чтобы нужные файлы/секции располагались в ram Изменено 29 июля, 2015 пользователем Aaron Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RCray 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба линкер файл положит, куда вы ему скажете, а используемую при этом функцию 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> В исходниках ничего менять не надо. Как и писать свои функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться