hello-minimum - libcを使わずに hello world
目的
BINARY HACKS "HACK #26, glibcを使わないで Hello World を書く" のARM版を作りたい。
できるならサイズはとことん削りたい。
結果
ARM命令版で174バイト、Thumb-2命令版で154バイトの Hello World を作った。
ポイントは以下:
- system call を直接呼出し
- エントリポイントをmain()に変更
- 不要セクションとセクションヘッダを削除
fifo-nonwait - FIFO をプロセス間の同期目的で使いたい
目的
Linux上のプロセスの同期待合せ処理として、処理がシンプルなFIFO(名前付きパイプ)を使いたい。
やりたいことは、μuITRONのイベントフラグ相当の処理。
外部仕様を書くと、
- 書込み側はいつでも書き込め、読み出し側のopenを待たずに次の処理を続ける
- 読み出し側(待つ側)は書き込み側よりも前にopenしても良い
- 書き込みデータがロストしない
結果
- FIFO作成後、一旦ダミーでO_NONBLOCKフラグを付けてopen()しておく(openしっぱなし)
- 書き込み側は O_RDWR|O_NONBLOCK の flag でopen()してwrite()する
- 読み込みは、普通にopen()してread()する
という役割分担にすれば良い。
find-extlib - 外部関数の呼び出しをリストアップする
目的
あるプログラムからの、外部ライブラリの関数呼び出しをチェックしたい。
たとえば、自作プログラムが多数のオブジェクトから出来ているとして、その中で libc なり libm なりを参照している。
これらをリストアップして、依存を減らしたり、省サイズ化のために置き換えできないかを検討する材料にしたい。
結果
nmを呼び出すスクリプトを作成した。
例)
% find . -name '*.[oa]' | NM=nm xargs find-extlib ./dln.o: __xstat64 dlclose dlerror dlopen dlsym fprintf free fwrite getenv memcpy snprintf stderr strchr strcpy ./version.o: exit fflush puts snprintf stdout ...