[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00058] Re: {FreeBSD,OpenBSD}/sparc64, IA64
- Subject: [FDclone-users:00058] Re: {FreeBSD,OpenBSD}/sparc64, IA64
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 18 Jan 2003 01:17:04 +0900
しらいです。
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
しらい たかし