部屋を掃除したら漫画が沢山出てきたので書く日記

漫画とか合唱とかUNIXとかLinuxとかについて書く日記です。

LD_BIND_NOW

仕事で扱っているSolaris 8で稼動しているアプリケーションがこういうバグを踏んでいる事が判明、調査をしています。

「libthreadにリンクしているアプリケーションが、ハングしたり異常終了する事がある」

というものですが、わたくしlibthreadが何なのかすら判らない有様でしたので調べてみました。

libthread・・・Solarisに実装されている、threadに関するライブラリ
で、これの不具合なのかな。

根本解決はパッチ適用なんですが、暫定対策として
アプリケーション実行前に

LD_BIND_NOW=1

という環境変数を設定する、というものがあるのでこれを実施したところ、問題は一応解決しました。

ただし
LD_BIND_NOW=1によって何が改善されたのかが不明なので、調べる事にしました。

Sunの「Linker and Libraries Guide」やらman ld.so.1によると、
runtime linker(Solarisだとld.so.1)がlazy binding(遅延BIND?遅延バインド?)をするのではなく、値と関数の呼び出しをアプリケーション実行前に行うようになる、
との事です。うーん直訳ですが何となく意味はわかった様な。つまり、

関数を必要になったら都度呼び出す(遅延BIND)
プログラム実行に必要な関数を始めに全て呼び出す

の違いか?

ただし、これを施すとなぜlibthreadの不具合が解消されるのかはわからんなー。
bshに

#!/bin/sh
<略>
exec truss -l -f プログラム名 >> ログ

みたいな実行をしてみてトレースしてみるか・・・。

ではー。