неправильный адрес программы при повторной компиляции древнего linux-0.12 на Ubuntu 18.04 - PullRequest
1 голос
/ 11 мая 2019

Попытка перекомпиляции linux-0.12 в Ubuntu 18.04 (звучит очень глупо?) После изменения чего-то в оригинальном коде linux-0.12 (слишком много, чтобы перечислить здесь, что изменилось).Наконец, все это может быть успешно скомпилировано и связано вчера.Проблема теперь в том, что после входа в режим защиты, похоже, что адрес подпрограммы setupidt идет не так!Вот картинка: (при отладке с помощью Bochs) error Вот фрагмент кода: неправильная адресация при 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?

...