Отчаявшись, я перечитал эту тему с целью ещё разок перепробовать все идеи. В частности, я попробовал последовать совету
Pavia об отказе от intel-синтаксиса промежуточного ассемблерного листинга... И, о чудо, все заработало. Аж страшно. У gcc явно какие-то проблемы, это конечно не баг, но и явно не фича. :)
В общем, достаточно убрать опцию -masm=intel. Для настройки стека подойдет такая заглушка в начале исходника ядра:
Код:
__asm__
(
".code16gcc\n"
".align 4\n"
"mov $(stack + 0x1000), %esp\n"
"jmp _start\n"
"stack: .space 0x1000"
);
У меня ещё вопрос теперь возник насчет выравнивания. Я вот на всякий случай написал
.align 4, насколько это критично?
2
kuragaМожете сообщить в открытой вами на другом ресурсе ветке об успешном "решении" проблемы (хорошо было бы post factum разобраться, откуда такие пироги с gcc).