1

在 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
4

1 回答 1

1

问题已解决。与 GCC 链接时忘记添加“-N”参数。

据我了解,“-N”和“-Ttext 0”标志都在将编译程序加载到内存时保持4k对齐,这是xv6所要求的。

于 2016-03-21T10:47:13.717 回答