在 xv6 中运行 newlib 链接程序时遇到了一些问题。(这是我使用的 newlib 端口)
我使用这个工具链来编译 newlib。编译没有任何问题,我确实得到了 libc.a、libm.a 和其他库文件。
然后我编写了一个 hello world 程序并将它与 newlib 静态链接。该程序就像这样:
#include <stdio.h>
int main()
{ printf("hello world\n");
return 0;
}
但是生成的可执行文件对于 xv6 文件系统来说太大了(这是设计的限制),所以我把它剥离了。剥离后文件大小为 53k,所以现在可以将其放入 fs.
当我运行“make qemu”时,我能够进入系统,并且其他程序运行良好。但是当我运行我的测试程序时,它卡住了几秒钟,然后它说“panic:loaduvm:addr must be page aligned”。是因为我剥离了我的程序,还是我必须对 xv6 源代码应用补丁或修改,或者其他一些原因?
PS 我使用的是来自官方 Github 存储库的最新版本的 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