Большое спасибо за такой большой ответ! Занавес приоткрыт, появляется много вопросов

:
Цитата(ReAl @ May 28 2011, 18:41)

нужно не давать линкеру на линковку запускалку (gcrt)
Что такое "запускалка (gcrt)"и как ее не давать?
Цитата(ReAl @ May 28 2011, 18:41)

Если пишете на С, то библиотеки нужны.
Вероятно, будет достаточно сделать асмовый файлик с вон тем .vectors (добавить строку .global main) и добавить его в проект, в ключи линкеру добавить -lgcc -lc для подключения стандартных библиотек.
Пишу на С, иначе зачем оно мне все?

1) Куда добавить .vectors и .global main?
2) Проверил, с ключом -nostdlib пустая программа void main (void){while (1);} занимает 2 байта. Нету, как раньше, ни векторов прерываний (ура!

), ни инициализации стека и __zero_reg__ (и, вероятно, глобальных переменных, если бы были).

Значит, нужно добавить этот кусок самостоятельно в .init2, я правильно понимаю?
3) Значит ли, что с ключом -nostdlib линкер не будет проводить никаких манипуляций с секциями (.bss, .text), в том числе и __init() и _exit()?
И вообще, в каких источниках можно про это все почитать?
updО, пока я тут ковырялся,
ReAl свой пост удлиннил

Цитата(ReAL)
Не-а, соврал...
Надо ведь остальную часть запускающего кода заставить работать (обнуление __zero_reg__, инициализация статических данных, обнуление .bss, инициализация стека). Так что в .vectors надо ставить не rjmp main, а переход на нужную часть запускалки.
Лучше всего взять иcходники gcrt1.S из avr-libc (линк download в самом низу страницы) и допилить его до нужного состояния путём оставления в секции .vectors только строки XJMP __init
Если не нужно инициализировать стаические переменные, то тоже почистить ненужное.
Короче, вижу без 100 грамов здесь не разобраться. Очень не хотелось бы исходники avr-libc "пилить".
В общем, если не хотим таблицу векторов - юзаем для линковки -nostdlib и самостоятельно заботимся об .initX и .finitX. Я правильно понимаю?
Вот еще что нашел:
http://caxapa.ru/210419.html?todo=full Там тоже советуют поправить gcrt1.S.