Попытка перекомпиляции linux-0.12 в Ubuntu 18.04 (звучит очень глупо?) После изменения чего-то в оригинальном коде linux-0.12 (слишком много, чтобы перечислить здесь, что изменилось).Наконец, все это может быть успешно скомпилировано и связано вчера.Проблема теперь в том, что после входа в режим защиты, похоже, что адрес подпрограммы setupidt
идет не так!Вот картинка: (при отладке с помощью Bochs) Вот фрагмент кода: неправильная адресация при call setupidt
Я полагаю, причина в том, что опция gcc или опция компоновщика?Спасибо!
startup_32:
movl $0x10,%eax
mov %ax,%ds
mov %ax,%es
mov %ax,%fs
mov %ax,%gs
lss stack_start,%esp
call setupidt
call setupgdt
movl $0x10,%eax # reload all the segment registers
Ubuntu 18.04, gcc 7.4.0 ld 2.3 часть Makefile:
AS =as --32
LD =ld
CFLAGS = -m32 -Wall -fstrength-reduce -fomit-frame-pointer \
-g3 -gdwarf-4 -O0 -fno-stack-protector -fno-builtin #-g3 -gdwarf-2 -m32
# -fno-defer-pop for fs
# -finline-functions for kernel and 3 sub folder, and lib and mm
LDFLAGS = -m elf_i386 -Ttext 0 -e startup_32#-s -x -M
Для всего Makefile и всего, смотрите https://github.com/meetjoy/exploring_cs/tree/master/0.0
Программа корректно входит в режим защиты.Параметры линкера или gcc?