В моем процессоре ОЗУ начинается с 0-го адреса, Flash начинается с адреса 0x80000000.
В самом начале ОЗУ (с адреса 0) создаю секцию ".exception", в которой находится таблица векторов прерывания. Эта таблица заполняется в коде, т.е. мне нужно, чтобы секция ".exception" только занимала место, но не была загружаемой.
Помещаю структуру в секцию следующим образом:
Код
EXCEPTION_TABLE __attribute__ ((section (".exception"))) ptrEventTable;
В скрипте линкера секция описана так:
Код
/*секция exception*/
.exception :
{
_evba = .;
*(.exception)
} >INTRAM AT>INTRAM :INTRAM_FROM_CODE
.exception :
{
_evba = .;
*(.exception)
} >INTRAM AT>INTRAM :INTRAM_FROM_CODE
Причем INTRAM_FROM_CODE я объявлял и как PT_LOAD, и как PT_NULL.
В любом случае в .elf файле секция включается с такими атрибутами:
Код
2 .exception 00000104 00000000 00000000 00000c00 2**2
CONTENTS, ALLOC, LOAD, DATA
CONTENTS, ALLOC, LOAD, DATA
И соответственно попадает в прошивку (с атрибутом PT_NULL дополнительно выдается warning: "allocated section `.exception' not in segment").
Как сделать так, чтобы секция имела только атрибут ALLOC и не попадала в прошивку? Секция .bss, описанная в скрипте линкера аналогичным образом, имеет только атрибут ALLOC, где это задано мне не понятно.