У меня есть программа, которая помещает некоторые структуры в именованный раздел, используя __attribute__ ((".sdh_ble_observers"))
а также extern mytype * ___start_sdh_ble_observers
,
Я использую следующий скрипт компоновщика
SECTIONS
{
.sdh_ble_observers :
{
PROVIDE(___start_sdh_ble_observers = .);
KEEP(*(SORT(.sdh_ble_observers*)))
PROVIDE(___stop_sdh_ble_observers = .);
}
}
INSERT AFTER .data;
Когда я использую g ++ для связи приложения, используя флаг -T для сценария компоновщика, исполняемый файл становится неисполнимым cannot execute binary file: Exec format error
,
Когда я удаляю объявления extern в коде и не использую флаг -T в g ++, исполняемый файл работает нормально.
Что может быть причиной этого? Платформа Cygwin.
Я только что нашел ответ на проблему.
Добавление оператора выравнивания в раздел .sdh_ble_observers : ALIGN(0x1000)
сделал трюк.
Других решений пока нет …