Я объявил некоторые extern const
данные в моем коде C ++ и добавил атрибут раздела __attribute__((section("my_ro_data")))
,
Мой файл сценария компоновщика выглядит так:
SECTIONS
{
/* other stuff */
.rodata :
{
*(.rodata .rodata.*)
*(.gnu.linkonce.r.*)
} >CODE
. = ALIGN(4);
/* other stuff */
}
Я заметил в файле карты, этот раздел my_ro_data
раздел размещен после *(.gnu.linkonce.r.*)
и перед другими вещами. Почему это так и как знает компоновщик, поскольку в ld-скрипте не упоминается my_ro_data
?
Также я попытался удалить константный квалификатор, а затем кажется, что компоновщик помещает это в .data
Выходной раздел, описание которого также не упоминается, чтобы поместить его туда, и он не соответствует групповым символам.
Итак, я предполагаю, что компоновщик ищет атрибуты раздела и по ним решает поместить его, но это только мои предположения, и мне нужно точно знать, как и почему он работает таким образом. Заранее спасибо.
Кроме того, было бы здорово получить некоторые справочные руководства. Пытался что-то найти, но пока ничего.
Задача ещё не решена.
Других решений пока нет …