[opensuse] procinfo crash: How can I definitely relate a library call to a library file?
Hi, my procinfo on openSUSE 10.3 crashes with a "[Floating point exception]". "ldd procinfo -f" shows me the following dynamic link libraries: linux-gate.so.1 => (0xffffe000) libncurses.so.5 => /lib/libncurses.so.5 (0xb7f46000) librt.so.1 => /lib/librt.so.1 (0xb7f3d000) libc.so.6 => /lib/libc.so.6 (0xb7e0a000) libdl.so.2 => /lib/libdl.so.2 (0xb7e06000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7def000) /lib/ld-linux.so.2 (0xb7f8f000) Now I invoked "ltrace --indent 10 -o trace-indent-S.txt -Si procinfo -f" and got the lines, inter alia: ... [0xb7f08c74] SYS_open("/lib/libc.so.6", 0, 077300) = 3 [0xb7f08cf4] SYS_read(3, "\177ELF\001\001\001", 512) = 512 [0xb7f08c3e] SYS_fstat64(3, 0xbff90020, 0xb7f0eff4, 15, 0xb7f0f670) = 0 [0xb7f09273] SYS_mmap2(0, 0x1325f0, 5, 2050, 3) = 0xb7d6f000 [0xb7f08ef9] SYS_fadvise64(3, 0, 0, 0x1325f0, 3) = 0 [0xb7f09273] SYS_mmap2(0xb7e9c000, 12288, 3, 2066, 3) = 0xb7e9c000 [0xb7f09273] SYS_mmap2(0xb7e9f000, 9712, 3, 50, -1) = 0xb7e9f000 [0xb7f08cad] SYS_close(3) = 0 ... (many other lines) [0xffffe410] SYS_set_tid_address(0xb7d52708, 0xb7d67ff4, 2, 0xb7d526c0, 0) = 21774 [0xffffe410] SYS_set_robust_list(0xb7d52710, 12, 0xb7d67ff4, 0xb7d526c0, 0) = 0 [0xffffe410] SYS_rt_sigaction(32, 0xbff90568, 0, 8, 0xb7d67ff4) = 0 [0xffffe410] SYS_rt_sigaction(33, 0xbff90568, 0, 8, 0xb7d67ff4) = 0 [0xffffe410] SYS_rt_sigprocmask(1, 0xbff90820, 0, 8, 0xb7d67ff4) = 0 [0xffffe410] SYS_ugetrlimit(3, 0xbff908a8, 0xb7e9dff4, 16, 1) = 0 [0xffffe410] SYS_uname(0xbff9061c) = 0 [0x8049521] __libc_start_main(0x804da50, 2, 0xbff90954, 0x8050510, 0x8050500 <unfinished ...> The logged sequence of calls is interrupted on the indent level of __libc_start_main so it seems to be this function what crashes. Of course, the name __libc_start_main let me suggest that this call should be contained in /lib/libc.so.6. But what puzzles me is the difference of the IP before __libc_start_main and after /lib/libc.so.6. On openSUSE 10.3 there is no man page for ldd so that I assume that (0xb7e0a000) in the ldd output is the address where /lib/libc.so.6 is loaded. So I still don't know if /lib/libc.so.6 is the faulting library. Some explanations or a detailed resource are very welcome. Although the main point here is the usage of ltrace, hints to the procinfo crash are welcome too. Thanks -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org
On Tuesday 12 February 2008 23:46:00 Uwe Galle wrote:
The logged sequence of calls is interrupted on the indent level of __libc_start_main so it seems to be this function what crashes. Of course, the name __libc_start_main let me suggest that this call should be contained in /lib/libc.so.6. But what puzzles me is the difference of the IP before __libc_start_main and after /lib/libc.so.6.
__libc_start_main is the function responsible for starting your program. It will jump to the main function of the program (so you don't see it as a function call) Basically, the program crashes in its own main function, presumably because it's reading something in /proc that it didn't expect
On openSUSE 10.3 there is no man page for ldd so that I assume that (0xb7e0a000) in the ldd output is the address where /lib/libc.so.6 is loaded. So I still don't know if /lib/libc.so.6 is the faulting library.
libc is by far and away the best tested library in linux (everything on your system except the kernel and one or two other things uses it). It has been known to have bugs, but it's extremely rare. Especially in basic functions like start_main In this case, the problem is in procinfo itself If you can produce a core dump of the crash, someone might be able to take a look. If you run "ulimit -c unlimited" before running procinfo, the crash will produce a corefile in the same directory where you ran it Anders -- Madness takes its toll -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org
participants (2)
-
Anders Johansson
-
Uwe Galle