[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:90063] Re: groff のSegmentation Fault について


こんにちは、小林です。

From: Fumiaki Kobayashi <fumiakik _at_ jaist.ac.jp>
Subject: [linux-users:90060] Re: groff の Segmentation Fault について
Date: Fri, 14 Dec 2001 16:44:03 +0900
Message-ID: <20011214164354T.fumiakik _at_ jaist.ac.jp>

ishioka> ええと make のときに cc(gcc) に -g をつけてコンパイルしたり,
ishioka> リンクしたりして下さい.
ishioka> 
ishioka> つぎに
ishioka> % gdb ./groff
ishioka> し,
ishioka> gdb> run -Tnippoon -mandocj hoge.1
ishioka> と実行し, 
ishioka> 
ishioka> 落ちる所を調べます. というのじゃだめなんでしょうか?

結果:
=================================================================
>gdb groff
(gdb) break main
Breakpoint 1 at 0x8000f49: file groff.cc, line 104.
(gdb) run
Starting program: /home/freesoft/groff-1.10/groff/groff 

Breakpoint 1, main (argc=1, argv=0xbffff8e4) at groff.cc:104
104       program_name = argv[0];
(gdb) step
106       setbuf(stderr, stderr_buf);
(gdb) step

Program received signal SIGSEGV, Segmentation fault.
0x400855b1 in buf.2 ()
=================================================================

groff.cc:
=================================================================
int main(int argc, char **argv)
{
  program_name = argv[0];		<-------- 104 行目
  static char stderr_buf[BUFSIZ];
  setbuf(stderr, stderr_buf);
  assert(NCOMMANDS <= MAX_COMMANDS);
  string Pargs, Largs, Fargs;
--snip--
=================================================================

よって、setbuf() 関数を実行中に
SIGSEGV シグナルを受けているようです。

From: Takashi ISHIOKA <ishioka _at_ dad.eec.toshiba.co.jp>
Subject: [linux-users:90062] Re: groff の Segmentation Fault について
Date: Fri, 14 Dec 2001 16:57:28 +0900
Message-ID: <o6gy9k6fd3u.wl _at_ eecdkah.dad.eec.toshiba.co.jp>

ishioka> % ldd `which groff`
ishioka>         libstdc++.so.2.9 => /usr/lib/libstdc++.so.2.9 (0x4001b000)
ishioka>         libm.so.6 => /lib/libm.so.6 (0x4005e000)
ishioka>         libc.so.6 => /lib/libc.so.6 (0x4007b000)
ishioka>         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

こちらの方でもやってみました。


>ldd ./groff
        libstdc++.so.26 => /usr/lib/libstdc++.so.26 (0x4000a000)
        libm.so.5 => /lib/libm.so.5 (0x4003b000)
        libc.so.5 => /lib/libc.so.5 (0x40044000)

>nm /lib/libc.so.5 | grep setbuf          
0003fc00 T _IO_default_setbuf
0003e3b0 T _IO_file_setbuf
00041560 T _IO_setbuffer
0004ad50 T setbuf
00041560 W setbuffer


で、libc.so.5 に、setbuf() が定義されていることを確認できました。
すると、libc.so.5 が悪いのかと思ったのですが、

README.jp:(groff-1.10.tar.gz 付属)
====================================================================
◎ インストール

 以下の環境でmake出来ることを確認しています。

        ☆  FreeBSD 2.1.0-RELEASE
            XFree86-3.1.2, gcc 2.6.3

        ☆  GNU/Linux 0.93R6 (Kernel 1.3.43, libc-5.2.14) ←ここ
            XFree86-3.1.2, gcc 2.7.1, libg++-2.7.1

        ☆  NEC EWS/4800/310
            SVR4.2 Release9.1 Rev.B, X11R5, gcc 2.6.0
====================================================================

libc-5 でもいいはずなんですよね…。

ちなみに、

%ls -l /lib/libc.so.5
lrwxrwxrwx   1 root     root           14 Sep  1  1997 /lib/libc.so.5 -> libc.so.5.4.23*

です。


何かアドバイスがあればお願いします。



						北陸先端大
						情報科学研究科

							小林 史陽

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: