Скриптер компоновщика: выделение раздела .bss

У меня есть скрипт компоновщика, как это:

OUTPUT_FORMAT(binary)
SECTIONS
{
. = 0xFFFF800000000000 ;
.startup_text : { processor.o(.text) }
.text : { *(EXCLUDE_FILE (processor.o) .text) }
.data : { *(.data) }
.rodata : { *(.rodata) }
linker_first_free_page = ALIGN(4096);
}

Кусок кода загружает исполняемый файл, сгенерированный этим сценарием, печатая следующую информацию:

size of executable (pages)    3
first free page               0xffff800000003000

И сам исполняемый файл печатает:

&(linker_first_free_page)     0xffff800000003000

Так что пока все работает хорошо. Теперь мой исполняемый файл нуждается в .bss раздел. Обратите внимание, что у меня нет загрузчика, способного загружать эльфийские файлы, поэтому мне нужен плоский двоичный файл, который можно просто прочитать и использовать со всеми разделами внутри.

Первая попытка

OUTPUT_FORMAT(binary)
SECTIONS
{
. = 0xFFFF800000000000 ;
.startup_text : { processor.o(.text) }
.text : { *(EXCLUDE_FILE (processor.o) .text) }
.data : { *(.data) }
.rodata : { *(.rodata) }
.bss : { *(.bss) }
linker_first_free_page = ALIGN(4096);
}

То есть просто добавив .bss раздел. Это вывод:

size of executable (pages)    3
first free page               0xffff800000003000
&(linker_first_free_page)     0xffff800000004000

То есть переменная компоновщика корректно обновляется, но раздел не выделяется (я думаю, это довольно нормально для .bss раздел).

Вторая попытка

OUTPUT_FORMAT(binary)
SECTIONS
{
. = 0xFFFF800000000000 ;
.startup_text : { processor.o(.text) }
.text : { *(EXCLUDE_FILE (processor.o) .text) }
.data : { *(.data) *(.bss) }
.rodata : { *(.rodata) }
linker_first_free_page = ALIGN(4096);
}

То есть положить .bss раздел внутри .data один. Это вывод:

size of executable (pages)    4
first free page               0xffff800000004000
&(linker_first_free_page)     0xffff800000003000

Это .bss выделена, но переменная компоновщика не обновляется (и я не могу понять, почему …)

Короткий вопрос

Итак, учитывая все вышесказанное, как я могу вставить .bss раздел в плоском бинарном файле, чтобы его можно было загружать в память как «стандартный» файл и использовать напрямую, без специального загрузчика?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]