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 pagealigned」と表示されます。プログラムを削除したためか、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