2004年3月17日の日記の3番目の記事へのコメント
■Solaris8 + xft
・・・まあ,それ以外にも色々Solaris8ではまりまくりだったわけです.まず,これは実は昨日の話なんですが,Solarisに入れるxftにこちらの日本語Bold体パッチを当てた所,gaimとかで設定ウィンドウ等の特定のウィンドウを開くとセグって落ちる問題が発生.どうもウィンドウに日本語Boldが含まれてると落ちるらしく,gdbで追っかけたところパッチの部分のコードで問題発生してることが判明.当然パッチ当てない状態では動きました.しかし,gdbで落ちている所のコードを見るかぎりでは何でこれでセグるのかまったくわかりません.ポインタの先がないのかなぁとも思ったんですが,別に普通にpで値が表示されます.
個人的にはSunなんぞ端末として使わないですし,Sunが環境整ってなくてダメダメ→利用者がいなくなる→Sunさようなら,とかもいいんじゃないとか最近密かに思ってるんですが,ここで「あのパッチ何か変」とかで済ませて投げ出したら激しくカッコワルイので,もうちょっと原因を調べてみました.で,わかったことですが,mallocで確保した領域の前半部分を1byteの配列で使用し,後半部分を1+1+4+4の10byteの構造体の配列で使用する,とかやっていて,前半の配列が終わった直後から後半の配列のデータを並べて使おうとしているのがまずいようです. 要は後半の配列の開始アドレスを(mallocした領域の値 + 前半の配列長)とかやって計算してるため,前半の配列長が4で割り切れない場合に後半部の開始アドレスがアラインしてない状態になっていまい,そこに無理矢理アクセスしようとしてセグっていたようです.後半部分は構造体になってるんで勝手にpaddingがついて12byteになって安全だったようです.うぬぬ,コードが悪いのか,gccが悪いのか,SPARCが悪いのか.まあ,とりあえず最初の1byte配列におまけつけてアドレスをアラインさせたら動くようになりました.わーい.
[コメントを書く]
2004年3月17日の日記の3番目の記事へのコメント
[コメントを書く]