[ 6] .text PROGBITS 00001000 001000 005ffc 00 AX 0 0 16
[ 7] .rdata PROGBITS 00007000 007000 0005ec 00 A 0 0 32
[ 6] .text PROGBITS 00001000 001000 00601c 00 AX 0 0 16
[ 7] .rdata PROGBITS 00008000 008000 00060c 00 A 0 0 32
readelf -a kernel.elf
для рабочего и нерабочего ядра Это расширение (называется VLA), но его поддерживают не все компиляторы.
Only an ordinary identifier (as defined in 6.2.3) with both block scope or function
prototype scope and no linkage shall have a variably modified type. If an identifier is
declared to be an object with static storage duration, it shall not have a variable length
array type.
Это и ежу понятно.
КАК нужно работать с этими глобальными структурами?
Я подозреваю, что не "не загружает ядро", а загружаемое ядро переписывает загрузчик (и, возможно, его стек) и поэтому всё крэшится при возврате из int 13h.
Ну что, собирай ядро в бОльшие адреса, чтобы .text начинался с 0x8000 например, или с 0x10000.