[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00057] {FreeBSD,OpenBSD}/sparc64, IA64



 FreeBSD/sparc64 や OpenBSD/sparc64 で FDclone 2.02a をビルド
して実行すると、

$ ./fd
[1] + Stopped (tty input)  ./fd 
$ ./fdsh
[2] + Stopped (tty input)  ./fd 

のようにバックグラウンドに回されてしまいます。(fdbsh は動いた)

 i386 や alpha ではこうならず、またOS側に端末周りなどの基本的な
部分で arch 間の差があるとも考えにくいので、 FDclone 側に何か
原因がある気がしています。


 残念ながら上記の問題の原因ではなかったですが、コンパイラの警告
から見つけた(潜在的な)バグの例を挙げます。posixsh.c で time2()、
term.c で read() などを暗黙の宣言のもとで呼び出している点です。

 これらの関数の返り値の型は環境によっては int より大きいわけ
ですが、 IA64 環境などは返り値の型のサイズに敏感なため、然るべき
ヘッダを#include して宣言を取り込んでやる必要があります。(gcc
では -Wimplicit で暗黙の宣言への依存を発見できる)

 試しに、以下のコードを IA64 環境で走らせてみました。

file1.c:
char *foo()
{
	return (char *)0x10000000000;
}
file2.c:
main()
{
	char *value = foo();
	printf("%p\n", value);
}

結果は、 "00000000" (HP-UX), "(nil)" (Linux) , "0x0" (FreeBSD)
とそろって 0 となりました。(出力がバラバラなのは %p の仕様..)
暗黙の宣言で int foo(); と見なされ、 0x10000000000 の下位 32bit
しか value に格納されなかったためです。


 FDclone を警告オプション付きでコンパイルしてみると、ほかにも
いろいろ警告が出ます。順に見ていけば何か見つかるかもしれません。


P.S.
 cygwin で FDclone を動かす作業をされている方はいますか?

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"It went right by me -- At the time it went over my head
   I was looking out the window.. I should have looked at your face instead"