QUOTE (spongebob @ Apr 27 2012, 17:59)

По поводу вызова библиотечного стартап-кода. Как я понимаю, все что содержится в секциях .initN до вызова main() - это и есть стартап?

Да.
QUOTE (spongebob @ Apr 27 2012, 17:59)

Т. е., он "размазывается" по секциям .init0 ... .init9 с дальнейшей возможностью коррекции каждой из секций программистом (часть секций менять нельзя, как я понял)?
Можно и добавлять и замещать.
QUOTE (spongebob @ Apr 27 2012, 17:59)

Кстати, когда мы объявляем функцию способом типа void my_init_portb (void) __attribute__ ((naked)) __attribute__ ((section (".init3"))); то это замещает все что было помещено стартапом в эти секции? А если несколько аналогичных выше указанным объявлениям, то все что объявлено разместится в секции .init3?
Если имя не совпадает с библиотечными, то добавляется. Если имя совпадает с глобальной библиотечной меткой - то замещает:
CODE
extern "C" __attribute__((section(".init4"),__naked__)) void __do_clear_bss()
{
asm volatile ("clr R2");
}
extern "C" __attribute__((section(".init4"),__naked__)) void __abyrvalg()
{
asm volatile ("clr R3");
}
000004bc <__do_clear_bss>:
4bc: 22 24 eor r2, r2
000004be <__abyrvalg>:
4be: 33 24 eor r3, r3
000004c0 <__do_copy_data>:
4c0: 11 e0 ldi r17, 0x01; 1
4c2: a0 e0 ldi r26, 0x00; 0
4c4: b1 e0 ldi r27, 0x01; 1
4c6: e0 ea ldi r30, 0xA0; 160
4c8: f0 e1 ldi r31, 0x10; 16
4ca: 02 c0 rjmp .+4 ; 0x4d0 <__do_copy_data+0x10>
4cc: 05 90 lpm r0, Z+
4ce: 0d 92 st X+, r0
4d0: a2 30 cpi r26, 0x02; 2
4d2: b1 07 cpc r27, r17
4d4: d9 f7 brne .-10 ; 0x4cc <__do_copy_data+0xc>
................................
QUOTE (spongebob @ Apr 27 2012, 17:59)

Кстати, можете сказать что-нибудь по поводу избыточности/неизбыточности Си++ по отношению к Си и насколько оптимальным получается код для AVR, ARM?
Много копий сломано тут на эту тему. Если писать с умом - то ни байта лишнего не будет. Ровно столько же, сколько занял бы делающий то же самое код на голом Си, но при этом со всеми преимуществами, которые дают плюсы: перегрузка операторов, конструкторы-деструкторы, ссылки, инкапсуляция, наследование, шаблоны, enum как отдельный тип, константы и многое другое.
QUOTE (spongebob @ Apr 27 2012, 21:22)

Стартап является универсальным для всех контроллеров, поддерживаемых библиотекой и вся необходимая ему информация берется из macros.inc и каких-то других файлов библиотеки?
Да, на этапе компиляции библиотеки из этого файла строится куча файлов crtXXX.o, а при линковке gcc подключает нужный в зависимости от ключа -mmcu=.