Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 在ubuntu 18.04上重新编译古老的linux-0.12时,例程地址错误_Gcc_Assembly_Linux Kernel_Ld - Fatal编程技术网

Gcc 在ubuntu 18.04上重新编译古老的linux-0.12时,例程地址错误

Gcc 在ubuntu 18.04上重新编译古老的linux-0.12时,例程地址错误,gcc,assembly,linux-kernel,ld,Gcc,Assembly,Linux Kernel,Ld,试图在Ubuntu 18.04上重新编译linux-0.12(听起来很傻?) 在修改了linux-0.12的一些原始代码之后(太多了,无法在此列出更改的内容)。最后,昨天可以成功地编译和链接整个内容。现在的问题是进入保护模式后,例程setupidt的地址似乎出错了! 下图:(使用Bochs进行调试时) 下面是代码片段:在调用setupidt 我想原因是gcc选项还是链接器选项?谢谢 startup_32: movl $0x10,%eax mov %ax,%ds mov %

试图在Ubuntu 18.04上重新编译linux-0.12(听起来很傻?) 在修改了linux-0.12的一些原始代码之后(太多了,无法在此列出更改的内容)。最后,昨天可以成功地编译和链接整个内容。现在的问题是进入保护模式后,例程
setupidt
的地址似乎出错了! 下图:(使用Bochs进行调试时) 下面是代码片段:在
调用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 生成文件的一部分:

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和所有内容,请参见


程序正确进入保护模式。链接器或gcc选项?

这里的
-fno pie-no pie
重要吗?编写代码和构建脚本时,当前默认的
-fpie-pie
不存在,因此它们可能不会对此进行解释。谢谢你,彼得。在将-fno饼图添加到CC、将-no饼图添加到LD后,此问题已修复。最后我进入了主通道()。我今天遇到的下一个寻址错误(:>)是调用printk()时,它是在printk.c中的文件夹内核下定义的。我会努力解决自己的问题。如果我不能,我会向你们求助。谢谢。
-fno pie-no pie
在这里重要吗?编写代码和构建脚本时,当前默认的
-fpie-pie
不存在,因此它们可能不会对此进行解释。谢谢你,彼得。在将-fno饼图添加到CC、将-no饼图添加到LD后,此问题已修复。最后我进入了主通道()。我今天遇到的下一个寻址错误(:>)是调用printk()时,它是在printk.c中的文件夹内核下定义的。我会努力解决自己的问题。如果我不能,我会向你们求助。谢谢