Skip to content
New issue

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

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

Already on GitHub? # 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が失敗した理由が今一つよくわからないです。
とりあえず、これで作業を進めます。
これにて、一旦クローズします。

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

No branches or pull requests

3 participants