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

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



 しらいです。

In Message-Id <8665sp9zhw.wl@archon.local.idaemons.org>
        "Akinori MUSHA" <knu@iDaemons.org>さんwrites:
>  FreeBSD/sparc64 や OpenBSD/sparc64 で FDclone 2.02a をビルド
> して実行すると、
> 
> $ ./fd
> [1] + Stopped (tty input)  ./fd 
> $ ./fdsh
> [2] + Stopped (tty input)  ./fd 

 SIGTTIN ですか。tcsetpgrp() 関連が怪しそうですね。


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

 fdbsh は Bourne shell に忠実に端末制御を廃していますから、
SIGTTIN は生じ得ないと思います。
 fdsh を作る時に、config.h 辺りで「#define JOBVERBOSE」して
おくと job control や terminal control の様子を制御端末に吐
いてくれますので、ちょっとは状況が追えるかも知れません。
 多分 initialize 段階で落ちているんだと思いますから、printf
debug でも割と楽に trace 出来るんじゃないかと思います。

# system.c の initshell() の中のどこか?


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

 term.c は <unistd.h> を include し忘れていました。posixsh.c
の方は system.c から分離させたものなので、分離作業が十分じゃ
なかったんだと思います。
 この二つは以下の patch で解消されると思うので確認してみて
下さい。

---- Cut Here ----
diff -u ../old/FD-2.02a/posixsh.c ./posixsh.c
--- ../old/FD-2.02a/posixsh.c	Wed Dec 25 00:00:00 2002
+++ ./posixsh.c	Fri Jan 17 12:51:31 2003
@@ -85,6 +85,7 @@
 extern char *strncpy2 __P_((char *, char *, int));
 extern char *ascnumeric __P_((char *, long, int, int));
 extern int setenv2 __P_((char *, char *));
+extern time_t time2 __P_((VOID_A));
 
 #if	!MSDOS && !defined (NOJOB)
 static char *NEAR headstree __P_((syntaxtree *));
diff -u ../old/FD-2.02a/term.c ./term.c
--- ../old/FD-2.02a/term.c	Wed Dec 25 00:00:00 2002
+++ ./term.c	Fri Jan 17 08:22:58 2003
@@ -127,6 +127,10 @@
 #endif
 #endif	/* !MSDOS */
 
+#ifndef	NOUNISTDH
+#include <unistd.h>
+#endif
+
 #ifndef	NOSTDLIBH
 #include <stdlib.h>
 #endif
---- Cut Here ----


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

 両者とも今回の SIGTTIN とは関係ないんじゃないかと思います。
initialize 段階で呼ばれるような箇所ではない筈なので。


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

 -Wuninitialize で沢山出てきますけど、どれも gcc が条件分岐
を論理的に判断出来ていないためのもので、特に実害は無いと思い
ます。
 あとは -Wparentheses でしょうか。「if (c = getchar())」と
書くと「== じゃないの?」と言ってくれるヤツですね。お節介な
だけなので「if ((c = getchar()))」と一段余計に () で括ると出
なくなりますが、どっちの記述でも結果的に吐くコードは同じ筈で
す。
 ということで、-Wall しても先の二点以外は全部無視して構わな
いと思います。まぁ気になるなら、-Wuninitilize を黙らせるため
の compile option を次期 version で採用しておきましょう。


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

 google ってみると幾つか引っかかるようですよ。
	http://www.netlaputa.ne.jp/~kuno/cygwinmain.html#label:32

 多分、そんなにややこしく考えなくても make config で作成さ
れた config.h をベースにして TECHKNOW を参考に幾つか compile
option を追加/削除すれば普通に動くようになると思います。
 Cygwin 以外にもりなざうとか PSLinux とか Linux の仲間達に
対する porting の request は幾つか挙がってきているんですが、
Linux 関連ばかりにかまけてる訳にもいかないし、第一実機が無い
ので未だ手を出していません。
 remote 環境で構わないので誰か貸してくれるようなら porting
してみても構わないんですが。

# remote 環境と言わず SL-C700 くれ :-) >SHARP

                                               しらい たかし