[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00057] {FreeBSD,OpenBSD}/sparc64, IA64
- Subject: [FDclone-users:00057] {FreeBSD,OpenBSD}/sparc64, IA64
- From: "Akinori MUSHA" <knu@iDaemons.org>
- Date: Thu, 16 Jan 2003 19:10:19 +0900
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"