FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

GCC

Cの可変長引数はどのようにしてコンパイルされるのか

GCC

xv6のcprintfに詰まってしまっているので、気分転換に可変長引数をどのようにしてGCCはコンパイルしているのかについて調査してみた。 調査対象にしたアーキテクチャはMIPSとRISC-Vだ。 msyksphinz.hatenablog.com テストプログラム テストプログラムとして…

GCC-6.1がリリースされたのでVagrantに開発環境を構築する(x86用)

GCC

前回の続き。前回はMIPS用に開発環境を構築したが、今回はx86用に開発環境を構築しよう。 msyksphinz.hatenablog.com いろいろと試行していたが、結局ライブラリ類はどのように用意すればよいのかわからなくて試行錯誤していたのだが、検索していると良いも…

GCCのインラインアセンブラの構文について調査

GCC

xv6には、以下のような記述がある。 github.com static inline void insl(int port, void *addr, int cnt) { asm volatile("cld; rep insl" : "=D" (addr), "=c" (cnt) : "d" (port), "0" (addr), "1" (cnt) : "memory", "cc"); } インラインアセンブラだが…

ISSにウォッチポイント機能を実装する

デバッグを効率的に進めるためには、ウォッチポイントの実装が不可欠だ。GDBでは、以下のウォッチポイントが実装されているようだ。 watch : 特定のメモリアドレスに対して書き込みが発生すると停止する rwatch : 特定のメモリアドレスに対して読み込みが発…

ISSとGDBを接続してxv6をデバッグ

GCC

前回、GDBの挙動を確認したので、ISSの実装に移っていこう。 ブレークポイントを設定する際、PCの位置としては、 ブレークポイントを設定した位置で停止する ただし当該命令は実行されていない という位置で止まるのだった。これを実現すれば良い。 msyksphi…

ISSとGDBを接続してxv6をデバッグ(x86のGDBで挙動確認)

GCC

今日は月曜日から飲み会になってしまい、進捗が少ない。。。 msyksphinz.hatenablog.com GDBの動きは結局どうなっているんだろうね?命令の実行前で止まるのか、そしてそのときのPCはどこを差しているのか? まあ、あれこれ文献調べるよりも、実際に試してみ…

ISSとGDBを接続してxv6をデバッグする

GCC

前回まででGDBの環境はほぼ構築したので、xv6のイメージをロードして、デバッグしてみる。 msyksphinz.hatenablog.com ISS側のロードに必要なものは、 kernel xv6.img なのだが、kernelは本当にOSが立ち上がるのに必要なカーネル部分が入っている。xv6.imgは…

GDBリモートサーバを自作ISSに実装する(レジスタ、メモリ値取得とKillコマンド)

GCC

msyksphinz.hatenablog.com ブレークポイントとステップ実行が何となく動くようになったので、データの取得のためのレジスタ値取得コマンドとメモリ設定コマンドを調整していこう。 現在対象としているアーキテクチャはMIPS64のため、これに合うように、まず…

GDBリモートデバッグサーバを自作ISSに実装する(stepの実装とパケットの注意点)

GCC

前回の実装では、continue命令を実装したのだった。次は、step操作を実装していこう。 msyksphinz.hatenablog.com step実行は、GDBの中ではどのように実装されるのだろうか? Howto: GDB Remote Serial Protocol In the RSP, the s packet indicates steppin…

GDBリモートデバッグサーバを自作ISSに実装する(continueの実装とトレース)

GCC

msyksphinz.hatenablog.com いよいよプログラムの実行に移る。GDB側からプログラムの実行として、stepかcontinueを実装していく。まずは、continueからだ。 その前に、continueで正確に停止できるように、breakpointの設定を行っていこう。 breakpointの実装…

GDBのプロトコルを読み解く(GDBのリンク確立とプログラムのダウンロード)

GCC

msyksphinz.hatenablog.com 前回までで、GDBのパケットの仕組みについて学んだ。今度は、GDBのリンク確立とプログラムのダウンロードだ。 まずは適当にGDBのフロンドエンドからパケットを受信して、どのような形式のパケットがやってくるか観察してみる。 GD…

GDBのプロトコルを読み解く(GDBクライアントからの受信パケットの解析)

GCC

前回、GDBのパケット通信の確立方法について学んだ。次は、実際にどのようなパケットが送信されているのか、観察してみることにしよう。 msyksphinz.hatenablog.com https://github.com/msyksphinz/swimmer_iss/tree/feature/gdb_implgithub.com GDBリモート…

GDBリモートデバッグサーバを自作ISSに実装する

GCC

さて、前回でGDBのリモートデバッグプロトコルについて分かってきた。 今度は、これを実装していこう。 基本的には、OpenRISCのISSであるor1ksimの実装を参考にする。 といっても、or1ksimはC言語で実装してあるので、必要な部分はC++に置き換えていく必要が…

ISSとGDBを接続してリモートデバッグを実現するための調査

GCC

これまで、自作ISSに様々な機能を組み込んできた。Luaのインタフェースを使ってインタラクティブなデバッガを実現したり、elfを読み込むことで関数トレースや、関数フローを表示できるような改良を施してきた。 ベンチマークを実行したときに、関数をどのよ…

今どきのGCCは再帰を書いても再帰を出さない (exponentialだとどうなる?)

GCC

「その数式、プログラムできますか?」→「その数式、どのようにコンパイルされますか?」になってしまっている。っていうか再帰一個で立ち止まりすぎだろ! その数式、プログラムできますか?作者: Alexander A. Stepanov,Daniel E. Rose,株式会社クイープ出…

今どきのGCCは再帰を書いても再帰を出さない(GCDの計算)

GCC

その数式、プログラムできますか?作者: Alexander A. Stepanov,Daniel E. Rose,株式会社クイープ出版社/メーカー: 翔泳社発売日: 2015/05/19メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る またこの本の話である。次に出てくるのは、…

今どきのGCCは再帰を書いても再帰を出さない (gcc-5.1で実験)

GCC

この本おもしろい!途中から数学チックになって難しいが、時間をかけて読み込んでいきたい。 その数式、プログラムできますか?作者: Alexander A. Stepanov,Daniel E. Rose,株式会社クイープ出版社/メーカー: 翔泳社発売日: 2015/05/19メディア: 単行本(ソ…

MIPS用 GCC5.1 をビルド環境をVagrantで自動的に構築できるようにした

GCC

Vagrantfile と Chef ファイルを置いておいた。 msyksphinz/vagrant-mips51github.com git clone https://github.com/msyksphinz/vagrant-mips51 --recursive # 中でsubmoduleとしてChefのリポジトリを読んでいるので--recursiveが必要 cd vagrant-mips51 va…

binutilsでmips32r5 を使えるように無理矢理改造した話 (あっているのかどうか本当に分からない)

GCC

GCC 5.1でmips32r5とか、mips32r6とかがサポートになったとしても、何故だかコンパイルはできても、リンクが出来ない。 unrecognised emulation mode : -ips32 (詳細メモしておくの忘れた...) どうやら、binutilsがちゃんとこれらのオプションをサポートして…

GCC 5.1でMIPS Release 6がサポートされている!

GCC

GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project - Free Software Foundation (FSF) GCC5.1 で MIPS Release6がサポートされている!早速使ってみなければ! とは言っても、まだコマンドラインオプションだけサポートとか、実験的な…

Interfaceのコンパイラ入門のビルドをやってみた(memsetで文句を言われたときの対処法)

GCC

以前MIPSのコンパイラでCoremarkをコンパイルしようとしたときに、-O3を使うと何故かmemsetが登場してリンク時エラーになる件について、 いろいろ試していたら、以下のオプションで消えるようになった。 -fno-tree-loop-distribute-patterns これを追加する…

Interfaceのコンパイラ入門のビルドをやってみた(MIPS: 成功編)

GCC

こちらはMIPS。手修正なしでビルドできる。 Binutilsのインストール: ../binutils-2.24/configure --target=mipsel-unknown-elf --disable-nls --enable-gold --prefix=/home/masayuki/gcc_mips make make install GCCのインストール(1回目) ../gcc-4.9.2/co…

Interfaceのコンパイラ入門のビルドをやってみた(ARM: 成功編)

GCC

Interface (インターフェース) 2015年 03月号作者: -,インターフェース編集部出版社/メーカー: CQ出版発売日: 2015/01/24メディア: 雑誌この商品を含むブログを見る 前回、コンパイルできなかったのはBinutilsとGCCのインストール位置が違っていたからだった…

Interfaceのコンパイラ入門のビルドをやってみた(途中)

GCC

Interface (インターフェース) 2015年 03月号作者: -,インターフェース編集部出版社/メーカー: CQ出版発売日: 2015/01/24メディア: 雑誌この商品を含むブログを見る 2015年3月号が発売されたのはずいぶん前な気がする。まあ、買ったのもずいぶん前なんだけど…