在xv6中运行newlib链接程序时遇到了一些问题。 (This是我使用的newlib端口)
我使用this toolchain来编译newlib。编译时没有任何问题,我会得到libc.a,libm.a和其他库文件。
然后我写了一个hello world程序并将其静态链接到newlib。该计划就像这样:
#include <stdio.h>
int main()
{ printf("hello world\n");
return 0;
}
但是生成的可执行文件对于xv6文件系统来说太大了(这是设计的限制),所以我剥离了它。剥离后文件大小为53k,现在可以将其放入fs。
当我跑步&#34;制作qemu&#34;我能够进入系统,其他程序工作正常。但是,当我运行我的测试程序时,它会停留几秒钟,然后它会说“恐慌:loaduvm:addr必须是页面对齐的”#34;。是因为我剥离了我的程序,还是有补丁或修改我必须应用于xv6源代码,或其他一些原因?
P.S。我从它的正式Github repo中使用了最新版本的xv6,下面是我用来编译测试程序的标志:
cc -fno-pic -static -fno-strict-aliasing -fvar-tracking -fvar-tracking-assignments -static-libgcc -nostartfiles -nostdlib -ffreestanding -nodefaultlibs -fno-builtin -m32 -Wall -MD -gdwarf-2 -fno-omit-frame-pointer -fno-stack-protector -I../include/newlib -o build/_test test.c -L../lib/newlib/ -L../lib/libnosys -e main -Ttext 0 -lc -lm -lnosys
答案 0 :(得分:1)
问题已经解决了。我忘记在与GCC链接时添加“-N”参数。
根据我的理解,“ - N”和“-Ttext 0”标志都会使编译后的程序在加载到内存中时保持4k对齐,这是xv6所需的。