2004-06-01から1ヶ月間の記事一覧

GNU Nana

C++

GNU nana: improved support for assertion checking and logging in GNU C/C++という、C/C++のデバッグライブラリがある。開発は1999年以降止まっている模様だが、「達人プログラマ」でも紹介されている、ユニークな考え方のライブラリです。日本語の解説は…

asmlinkage

asm

IRCで、Linuxのkernel source中で使われている"asmlinkage"なるキーワードはなんぞや?と聞かれたので調べ物。 asmlinkage int foo(int a, int b) { /* ... */ } のように使われているらしい。で、調べたところこのキーワードは i386ファミリ向けで、extern …

g++でのスタック使用量の動的解析

Linux Memory Overcommitment の話とも関係するが、組み込み機器向けのプログラムを設計・実装する際は、たとえターゲットがMMU/仮想記憶を利用できるモノであるとしても、使用するスタック量の見積もりくらいはしておきたいと思っている。 UNIXではsetrlimi…

カーネルの生成するトランポリンコードについて(signal)

プロセスがシグナルを受信し、処理がシグナルハンドラに移る時にもカーネルが似たような処理(トランポリン)を行います。 これについては、なんでも継続(http://www.shiro.dreamhost.com/scheme/docs/cont-j.html)の、「継続を渡して」のところの説明がまず…

gccの生成するトランポリンコードについて

asm

gccでは、次のように、関数の中で関数を定義することができます(内部に書かれた関数をnested functionなどと呼びます)。 void func(void) { int x; void inner_func(void) { printf("%d\n", x); // a. } inner_func(); // b. } ここで、nested function では…

(続き) メモリバリア

asm

(未)

アセンブラで遊ぶ時に便利なgdb設定

asm

アセンブラで遊ぶ時に便利な ~/.gdbinit を紹介します。まず ~/.gdbinit を次のように記述してください。 # # ~/.gdbinit # # .so を shlib コマンドで手動で読み込む # set auto-solib-add 0 # スレッド生成時のSIG32でブレークしない handle SIG32 nostop …

__asm__ を試してみた

asm

g++でインラインアセンブラを使ってみることにした。g++ -S でアセンブリリストを見ることは多々あったが、思えば__asm__を自分で書いたことはなかったのでした。引数の "=r(ほげほげ..)" の意味など把握しなければならないことがたくさん。 書いてみた とり…