здравствуйте, не получается разместить данные строго после кода в готовом бинарном файле без формата.
Что делал:
x86_64-elf-gcc -m32 -ffreestanding -c kernel.c -o kernel.o
ld.lld -T linker.ld -o kernel --oformat binary kernel.o
скрипт линкера:
SECTIONS
{
. = 0x100200;
.text :
{
*(.text)
}
.data_kdata :
{
*(.data_kdata)
}
.data :
{
*(.data)
}
.bss :
{
*(.bss)
}
. = ALIGN(4);
}
Далее что делаю в коде на C:
Объявляю массивы вне функций вот так:
__attribute__((section(".data_kdata")))
char SCANCODES_QEMU[58] = {
'?', '?', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', '-', '=', '?', '?', 'q', 'w', 'e', 'r',
't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n', '?',
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
'\'', '`', '?', '\\', 'z', 'x', 'c', 'v', 'b', 'n',
'm', ',', '.', '/', '?', '?', '?', ' '
};
Ставлю атрибут для любых глобальных данных attribute section
В самом начале пошли строки и массивы, далее пошел код и далее снова массивы
Я просмотрел сгенерированный до ассемблера файл и увидел что массивы строк устанавливаются в секцию .rodata хотя я явно указал другую секцию (.data_kdata)