Konqere 0 30 ноября, 2010 Опубликовано 30 ноября, 2010 (изменено) · Жалоба Сергей Вам говорит не о "инициализации регистров процессора", а о инициализации "С, С++ контекста" - это совершенно разные понятия. C++ контекст в моем случае не используется, С контекст - будем прописывать сами. Как я уже говорил, этот дополнительный код компилятора может вызвать необрабатываемое прерывание, поэтому он мне не нужен. Насколько я понял, он берется из файла "crt0.o". Как запретить компилятору или линкеру его использовать? К сожелению, вышеуказанный способ избавления от секций ("-R ._init -R .fini", например) у меня почему-то не работает. P.S. Компилятор mips-kgp-elf, спасибо Klen-у Изменено 30 ноября, 2010 пользователем Konkere Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба Насколько я понял, он берется из файла "crt0.o". Как запретить компилятору или линкеру его использовать? Ключ линкера -nostartfiles. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 ноября, 2010 Опубликовано 30 ноября, 2010 · Жалоба С контекст - будем прописывать сами. Как я уже говорил, этот дополнительный код компилятора может вызвать необрабатываемое прерывание, поэтому он мне не нужен.В таких случаях обычно пишется функция с названием типа low_level_init() и вызывается из стартапа до инициализации. Она настраивает нужуную вам периферию, после чего возвращает управление в стартап. И уже он родным для компилятора образом подготавливает контекст и вызывает main(). Если в crt0.o не предусмотрен вызов подобной функции - никто не заставляет линковать crt0.o. Достаточно добавить его исходник в проект и в него вписать вызов нужной функции. Прописывать контекст самостоятельно - неэстетично :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться