2010年01月

2010年01月28日

前回試してうまくいかなかったDebianのnetinstallはやはり古いインストーラを使っていたためでした。

新しいものでうまくいったので、その手順を紹介します。

続きを読む

2010年01月26日

QEMUはAndroidのSDKのエミュレータにも使われています。

QEMUのARMのシステムエミュレータをソースからビルドして、その上でDebianを動かしてみたので、その方法を紹介します。

(最近0.12.2がリリースされましたが、私の環境ではうまくうごかなかったので、0.12.1でのビルド手順を紹介します。)

続きを読む

2010年01月22日

GCC のソースツリー中の gcc/config/arm/ 以下には、OCaml という関数型(プログラミングを支援する)言語 ML (Meta-Language) の方言で書かれたプログラムが存在しています。

NEON 命令のためのヘッダ、テストケース、ドキュメントなどを生成するために O'Caml プログラムが使われているようです。

Contents of /trunk/gcc/config/arm/neon-gen.ml
Contents of /trunk/gcc/config/arm/neon-schedgen.ml/a>
Contents of /trunk/gcc/config/arm/neon-testgen.ml
Contents of /trunk/gcc/config/arm/neon.ml
Contents of /trunk/gcc/config/arm/neon-docgen.ml

OCaml は言語処理系の開発によく使用される言語なのですが、まさか GCC の内部でも使われている(直接は関わっていないのですが。生成済みのヘッダが trunk に commit されているので、GCC のビルドの際には O'Caml 処理系は必要ありません。)とは思ってなかったので意外でした。(佐藤先輩に教えていただきました。)

参考リンク:

Modern Compiler Implementation in ML

有名なタイガーブックです。ML の他にも、Java と C による同内容の本が出ていて、Java が一番いろいろなところで参考文献として挙げられている気がします。

Fail-Safe C: 安全なC言語コンパイラ

O'Caml で書かれた C コンパイラです。

CIL (C Intermediate Language)

C のソースコードを解析して、解析が容易な形 (中間言語) に変換する O'Caml のライブラリです。ANSI C だけではなく、GNU 拡張や MS 拡張 (の一部) までサポートしているそうです。ソースコード解析系の研究で、比較的よく使われているような印象です。

2010年01月20日

前回の記事で少し触れた、Linux で使われているソースコード解析ツールである sparse は、Linux Kernel 以外のソースコードに対しても有益そうです。

Sparse - a Semantic Parser for C

MinGW 環境で試してみたところ、ちゃんと GNU C のソースコードを解析することができました。

続きを読む

2010年01月18日

前の2回にひきつづきqemuのソースを追いかけたときのメモを置いておきます。

メモなのでわかりやすくはありませんが、もしかしたらどなたかの役に立つこともあるかもしれないので。

QEMU TCG

続きを読む

2010年01月14日

前回に続きqemuのソースを追いかけたときのメモ。

qemu メインループ

続きを読む

2010年01月12日

Linux のソースコードでは、ユーザ空間とカーネル空間のポインタを区別するために、__user や __iomem などのマクロを変数に付けています。これは最終的には noderef や address_space(n) などの attribute に落ちて、sparse チェッカーというプログラムによってチェックされます。

参考: sparseチェッカー

これと同じように、異なるアドレス空間を指すポインタ変数に、アドレス空間ごとに任意の名前を付け、静的チェックや自動的に適切なコードを生成してくれるようなしくみがコンパイラにあれば、メモリが複数領域に分かれているような環境でのプログラミング時に便利です。これが名前付きアドレス空間サポートです。

時系列は追いきれてないのですが、2008 年 4 月に RFC が GCC の ML に提案されたようです。

RFC: named address space support

named-addr-spaces-branch という branch が存在し、更新はメインラインにマージされるそうです。
今のところは CELL/spu ターゲット限定のようです。

3.17.37 SPU Options

この方の記事が詳しいです。PIC や AVR などのプロセッサでは、ROM/RAM/FLASH というようにメモリ領域が分かれているため、名前付きアドレス空間のサポートが必要になってくるそうです。

ARMにはまった: GCCの名前つきアドレス空間サポート
ARMにはまった: まだまだねばるPIC用GCC、別アドレス空間の話

2010年01月08日

GCC 4.5 から、libstdc++ のみをスタティックリンクするための -static-libstdc++ オプションが追加されたそうです。

「PATCH RFA: Add -static-libstdc++ option to g++」
http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html

g++ は、過去のバージョンアップで何度か ABI が変わっています(2.95、3.1、3.3、4.0 で互換性が失われているそうです)し、これからも変わる可能性があります。

そのため、場合によっては適切な libstdc++ がダイナミックリンクできなくて、プログラムが動かなくなる可能性があります。
例えば上記の patch の説明では、gcc 自身を g++ でブートストラップする場合などが挙げられています。ビルドプロセスの途中で ABI が異なる g++ が複数動くことになると、ダイナミックリンクでは当然上手く動きません。

注意点として、libstdc++ をダイナミックリンクする C++ コードを dlopen() などを経由して使うことができなくなるようです。

「Re: -static-libgcc, static libstdc++.a and dynamicly loaded so files」
http://gcc.gnu.org/ml/gcc-help/2009-12/msg00186.html

2010年01月06日

少し前にqemuのソースを追いかけたときのメモを放出します。

TCG

qemuは高速に実行するためにインタプリタでなくJITのようにターゲットのCPU命令列をホストのCPU列に変換して実行する。 version 0.10の頃からこの部分が従来のトランスレータからTCG(Tiny Code Generator)と呼ばれるものに置き換えられた。

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード