Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

riscv-toolsのビルドが失敗する(その2) #9

Closed
mitoneko opened this issue Aug 7, 2022 · 7 comments
Closed

riscv-toolsのビルドが失敗する(その2) #9

mitoneko opened this issue Aug 7, 2022 · 7 comments

Comments

@mitoneko
Copy link

mitoneko commented Aug 7, 2022

#6 にて、riscv-isa-simの単独ビルドなら成立とのことでしたが、ubuntu22.04で実行すると、これも失敗します。やむなく、いくつかのパッチをあてて、コンパイルは成立させました。
パッチは、以下の通り。

まずは、riscv-isa-simの中で・・・

diff --git a/fesvr/dtm.cc b/fesvr/dtm.cc
index 5409321a..3f5b03b7 100644
--- a/fesvr/dtm.cc
+++ b/fesvr/dtm.cc
@@ -6,6 +6,7 @@
 #include <string.h>
 #include <assert.h>
 #include <pthread.h>
+#include <stdexcept>
 
 #define RV_X(x, s, n) \
   (((x) >> (s)) & ((1 << (n)) - 1))

diff --git a/riscv/devices.h b/riscv/devices.h
index 4e4d27ff..eedde95d 100644
--- a/riscv/devices.h
+++ b/riscv/devices.h
@@ -6,6 +6,7 @@
 #include <string>
 #include <map>
 #include <vector>
+#include <stdexcept>
 
 class processor_t;

次に、riscv-pkの中で

diff --git a/pk/pk.c b/pk/pk.c
index a149a42..0357b95 100644
--- a/pk/pk.c
+++ b/pk/pk.c
@@ -6,6 +6,7 @@
 #include "elf.h"
 #include "mtrap.h"
 #include "frontend.h"
+#include "flush_icache.h"
 #include <stdbool.h>
 
 elf_info current;
@@ -136,7 +137,8 @@ static void run_loaded_program(size_t argc, char** argv, uintptr_t kstack_top)
 
   trapframe_t tf;
   init_tf(&tf, current.entry, stack_top);
-  __clear_cache(0, 0);
+//  __clear_cache(0, 0);
+  __riscv_flush_icache();
   write_csr(sscratch, kstack_top);
   start_user(&tf);
 }

及び、ファイルを新規に作成

$ cat machine/flush_icache.h
#ifndef _RISCV_FLUSH_ICACHE_H
#define _RISCV_FLUSH_ICACHE_H

void __riscv_flush_icache(void);

#endif /* _RISCV_FLUSH_ICACHE_H */

この修正を加えた後、riscv-toolsディレクトリにて、

$ ./build-spike-pk.sh

で、spikeとpkのビルドができます。
ただし、コンパイルエラーを修正しただけなので、挙動は未確認です。

@mrasu
Copy link

mrasu commented Aug 7, 2022

同じくubuntu22.04ですが、riscv-toolsが使用しているriscv-isa-sim@2710fe5等ではなく、各サブモジュール内でmasterを使ってビルドすると動きました。
その後のページに出てくる riscv64-unknown-elf-objdumpspike pkも動いたので多分masterで大丈夫だと思います。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 22.04.1 LTS
Release:	22.04
Codename:	jammy

@mitoneko
Copy link
Author

mitoneko commented Aug 8, 2022

mrasuさんの方法、追試してみました。
サブモジュールにすべてgit checkout masterを適用すると、riscv-isa-sim及びriscv-pkの単独ビルドは成功しました。ただし、riscv-testsは、残念ながらコンパイルエラーの結果でした。

riscv-tools/riscv-tests/build/../isa/../env/v/vm.c:159:3: error: both arguments to '__builtin___clear_cache' must be pointers
  159 |   __builtin___clear_cache(0,0);

spikeの起動も確認できました。
この状態で、進めてみようと思います。
mrasuさん、ありがとうございました。

@mrasu
Copy link

mrasu commented Aug 8, 2022

なるほど。
riscv-testsがだめでしたか。
何かが違うのですね・・・

@mitoneko
Copy link
Author

mitoneko commented Aug 8, 2022

このエラー、同じパターンのをpk.cのときにも・・・。ちなみに、pk.cのときには、0を(void *)0に変えても、NULLにかえてもだめでした。同じエラーになるんですよね。一体全体どんな型を指定しているのだか。まだ、問題の関数本体のソースを見つけられていないのです。が、どうやら、やってることは、__riscv_flush_icache()と同じらしく。こっちは、関数本体のソースは発見済みです。(それがなければ、ヘッダファイル作れませんから。)これも、同じ手で行けそうな気がしてるのですが、ちょっと探索が必要です。ちなみに、masterにcheckoutした後のpk.cを確認したら、私の上記のコメントと同じ手でパッチが当てられていました。おそらく、私が見たイシューの対策案がマージされているものと推測します。ここからすると、riscv-testsも同じパターンのイシューがありそうなものなのですが・・・これは、まだみつけられていません。

@msyksphinz-self
Copy link
Owner

いろいろ調査ありがとうございます。riscv-toolsがもう使い物にならなくなっていることを最近把握しました...申し訳ありません。
READMEに記述した「riscv-toolsの各サブモジュールを最新版にアップデートする」では最新版になり切らないようです。READMEを更新し、個別のツールをリンク先を追記しております(これらについてはツールセットのインストール方法をまとめておく必要がありそうです)。

@msyksphinz-self
Copy link
Owner

msyksphinz-self commented Aug 10, 2022

riscv-testsに関しまして、Ubuntu-22.04 LTSをDocker上に構築しビルドテストを行いましたが、私の環境ではうまくいっているようです。参考までにリビジョンを示しておきます。

$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (g5964b5cd727) 11.1.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

@mitoneko
Copy link
Author

README修正、ありがとうございます。
さて、修正されたREADMEのツールでビルドした所、全て正常に終了しました。
うーん。testsが失敗した理由が今一つよくわからないです。
とりあえず、これで作業を進めます。
これにて、一旦クローズします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants