GCC15.1にすると、Newlibのビルドが失敗する問題なのだが、バージョンを落としてGCC14.3ならば正しくビルドできることが分かった。
これがなぜなのか理由が良く分からない。正直GCCのリビジョンの違いを追いかけるほどの技量はないのだが、問題をはっきりさせたいので、ChatGPTに聞きつつ頑張って追いかけてみることにした。
GCC14.3は、targetのhelpで以下のようなmarchを出力した。
$ riscv64-unknown-elf-gcc -Q --help=target | grep march --print-supported-extensions -march=help -march= rv64imafdc_zicsr_zifencei -march=help [disabled] -print-supported-extensions -march=help
一方GCC15.1では、targetのhelpで以下のようなmarchを出力した。
$ riscv64-unknown-elf-gcc -Q --help=target | grep march --print-supported-extensions -march=help -march= rv64imafdc_zicsr_zifencei_zmmul_zca_zcd -march=help [disabled] -print-supported-extensions -march=help
しかも最後に、GCC15.1では、以下のエラーメッセージが表示されているのが気になる:
Assembler messages: Error: rv64imafdc_zicsr_zifencei_zmmul_zca_zcd: unknown prefixed ISA extension `zca'
これは、binutilsがzcaオプションをサポートしていないということか?Binutilsは2.40を使っていたので、最新版の2.44にバージョンアップしてみると、うまくいった。
つまり、これはbinutilsを最新版にする必要があったということか。