2016-06-01から1ヶ月間の記事一覧
xv6をRISC-Vに移植する作業を進めているが、cprintfが上手く表示できずにずっと止まっている。 前回、怪しいと思ったのはここだ。 msyksphinz.hatenablog.com 80100600 <cprintf>: 80100600: fa010113 addi sp,sp,-96 80100604: 02112e23 sw ra,60(sp) 80100608: 0281</cprintf>…
Unix考古学 Truth of the Legend作者: 藤田昭人出版社/メーカー: KADOKAWA発売日: 2016/04/28メディア: 単行本この商品を含むブログ (3件) を見る Amazonのおすすめにちょいちょい上がってきていたので買ってみた。 正直こんなUnixの歴史を語る本だとは思っ…
github.com https://pdos.csail.mit.edu/6.828/2014/xv6/book-rev8.pdf xv6の移植を続けていて、ググっているとよく自分自身の文献にぶつかったりするのだが、その時の誤字脱字の多さに絶望するため多少リファクタリングを行った。 xv6の翻訳についてはまだ1…
RISC-Vに移植したxv6のデバッグを引き続き行っているのだが、どうやら表示系の調子がおかしい。 cpu-4096,33554432: init start コア数が多すぎる(笑)。 デバッグしているのだが、ついでなのでxv6の表示系はどのように構成されているのか見ていく。 xv6のUAR…
xv6のブートプロセスにおいて、mpinitという関数があり、予想ではマルチプロセッサ関係の初期化を行っている。 その中で、EBDAやBDAというBIOS関連のアクセスに入る部分があるので、具体的に何をしているのかを調べてみた。 void mpinit(void) { ... bcpu = …
xv6のブートをRISC-VのISSで再現させている。途中までうまくいっているのだがどこで止まっているのかわからない。そのときは階層トレース機能を使ってどの関数まで飛んできたかをチェックする。 <FunctionCall 183795: main(0x80104ec8)> <FunctionCall 183803: kinit1(0x80103a98)> <FunctionCall 183814: initlock(0x80106d2c)> <Return: initlock> <FunctionCall 183836: freerange(0x80103b38)> </functioncall></return:></functioncall></functioncall></functioncall>
前回の続き。MicrosoftのC言語拡張 "Checked-C" のLLVM環境が公開されているので、ビルドに挑戦してみる。 msyksphinz.hatenablog.com 使用したのはVagrant上で構築されたUbuntu-14.04だ。ちなみにメモリは8GB程度必要になる。LLVMエグいな! github.com リ…
Microsoftが、C言語を拡張した独自言語「Checked-C」の仕様をオープンソース化した。 developers.srad.jp Checked CはC言語にポインタの境界チェック機能を追加したことが名前の由来となっている。チェックに対応する新しい種類の配列型やポインタ型が追加さ…
僕の自宅環境は基本的にすべてVagrantで管理されており、さまざまツールのインストールはChefを使って自動化している。 しかし環境がWindowsなものだから、Vagrantを利用するためにMingWをインストールしたり、Windows用のChefをインストールしたりしていた…
自作ISSで少しずつxv6が起動してきた。 最初に実行されるのはmain.cのmain()だが、これはどのようにして起動しているのか少し見て行こう。 そういえば自分でxv6の教科書を翻訳していたのだった。これを参考に進めて行く。 github.com int main(void) { kinit…
RISC-Vのオペコードは、取り揃えはおそらくMIPSをベースにしているが、その命令フォーマットはMIPSのそれとは異なっている。 一応、彼らの言い分としてはデコードのしやすさを基準に設計してあるらしいが、それが本当に有用かどうかは正直分からない。 特に…
しばらくxv6のRISC-Vへの移植で、ブートアップが上手くいかずに悩んでいた。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com どの部分でコケていたかというと、bootmain.cでロードイメージの判定をして、ブートアップをす…
とりとめのない記事だが、とりあえず日記なので書いておく。 RISC-Vアーキテクチャでコンパイルしたxv6を動作させるためにISSを利用して、シミュレーションを行っている。 現在、最初のHDDからカーネルのロードまでは終わっているが、そこから先でmainまで飛…
自作ISSのバグでしばらくハマっていた。32ビットモードでxv6やCoremarkなどのベンチマークを動かすと、ちゃんと動作してくれず、トレースモードが正常出力されない。 しばらく追いかけていたのだが、32ビットモードと64ビットモードの混在環境での詰めの甘さ…
ISSでプログラムを実行して解析していると、ISSの妙な動作に遭遇することがある。プログラムの挙動が怪しい時は、解析をしていくのだが、どうやら未初期化の領域を参照しているらしい。 こういうときには、Valgrindで不正メモリアクセスをチェックするのが効…
Bazelで自作ISSをビルドしようとしているが、いろいろと詰まっている。なかなかうまくいかないらしい。 これはC++のソースコードの記述を、Bazelに合わせるべきなので、Bazelの設定をがんばってC++に合わせるべきか。。。 includeファイルの指定方法 include…
RISC-Vのユーザレベル命令セットの改版Ver.2.1が公開された。 http://www.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-118.pdf 64ビットよりも大きいデータを扱う命令において、RDフィールドが移動しないためのフォーマット変更 CSR命令を整数命令の章…
Bazelをひたすら試行して、Bazelの小難しい環境がなんとなく分かってきた。特に注意しなければならないのは、Bazelに含まれるBUILDファイルとWORKSPACEファイルの関係性だ。ここを理解するのには、かなり時間がかかった。 例として、以下のようなプロジェク…
Bazelでは一般的にどのような構成のプロジェクトディレクトリを作ればいいのかいろいろ調査していたのだが、日本語でうまいこと説明してくれている文章が見つからない。 クックパッドのブログは、実際の運用とビルドのトライアルの面でかなり役に立つものだ…
msyksphinz.hatenablog.com msyksphinz.hatenablog.com msyksphinz.hatenablog.com おおよそ2か月前から実施していた、AMDのOpteronアーキテクチャの詳細を示した文章、"Understanding the detailed Architecture of AMD's 64bit Core"の翻訳が完了した。 ht…