[Fwd: Strange Segmentation fault (core dumped)]

From: fil (lists@internyc.net)
Date: Fri Jan 03 2003 - 00:02:32 EST


Thanks to: Casper Dick
            Matt Hariss

Thank you guys for some debugging and file consistency tips.(pkgchk
tools) The problem turned out to be a 64 bit version of gcc-3.2 and
stock dbm version on Solaris 8 don't get along. Once I moved back to 32
bit version of compiler or used GDBM with 64 bit version the core dumps
went away. So there is somewhere a problem in dcalchash () call in
/lib/sparcv9/libc.so.1 or in gcc.

thanks
fil

-------- Original Message --------
Subject: Strange Segmentation fault (core dumped)
Date: Thu, 26 Dec 2002 21:57:57 -0500 (EST)
From: lists@internyc.net
To: sunmanagers@sunmanagers.org

Hi,

Lately I am getting strange Seg Faults, on all code which use ndbm calls
from the default SUN distribution. This is a SUN X1 server running Solaris
8 with the latest recommended patch set. I use this simple C piece of code
to test ndbm library and it core dumps on this machine. I tried the same
code on my other Solaris 8 and 9 machines and it works fine. I tried
figuring out why it core dumps but it looks like either libc or libc_psr
are corrupt. I tried looking through truss and gdb output but nothing
obvious shows up.

Please help, I am not looking forward to re-installation of this machine.
Is there a way of re-installing only the libraries or checking if they are
corrupt or not?

Thanks and Happy Holidays
Fil

P.S.
I am including the C code, truss output and gdb output

Here is my test code:
---------------------

#include <stdio.h>
#include <ndbm.h>
#include <fcntl.h>

int main(int argc, char* argv[])
{
         datum key_data;
         datum data_data;
         datum return_data;
         char key_line[500];
         char data_line[1000];
         strcpy (key_line, "1");
         strcpy (data_line, "a");
         DBM *dbm_file;
         char *file_name;
         file_name = "junkndbm";
         data_data.dptr = data_line;
         dbm_file = dbm_open (file_name, O_RDWR|O_CREAT, 00664);
         if (dbm_file == NULL)
         {
                 printf ("dbm_open failed.\n");
                 exit (2);
         }
         key_data.dptr = key_line;
         key_data.dsize = strlen (key_line)+1;
         data_data.dsize = strlen (data_line)+1;
         if (dbm_store (dbm_file, key_data, data_data, DBM_REPLACE) != 0)
             printf ("Item not inserted. \n");
         printf ("\nhere\n");
         dbm_close (dbm_file);
         exit(0);
}

here is the output of truss:
----------------------------

truss ./blah
execve("blah", 0xFFFFFFFF7FFFF4B8, 0xFFFFFFFF7FFFF4C8) argc = 1
mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7F500000
resolvepath("/usr/lib/sparcv9/ld.so.1", "/usr/lib/sparcv9/ld.so.1", 1023)
= 24
open("/var/ld/64/ld.config", O_RDONLY) = 3
fstat(3, 0xFFFFFFFF7FFFEB10) = 0
mmap(0x00000000, 524, PROT_READ, MAP_SHARED, 3, 0) = 0xFFFFFFFF7F400000
close(3) = 0
stat("/lib/sparcv9/libc.so.1", 0xFFFFFFFF7FFFE890) = 0
open("/lib/sparcv9/libc.so.1", O_RDONLY) = 3
fstat(3, 0xFFFFFFFF7FFFE890) = 0
mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0xFFFFFFFF7F300000
mmap(0x00000000, 1851392, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0xFFFFFFFF7F100000
mmap(0xFFFFFFFF7F2B4000, 52632, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED, 3, 737280) = 0xFFFFFFFF7F2B4000
mmap(0xFFFFFFFF7F2C2000, 3260, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_FIXED|MAP_ANON, -1, 0) = 0xFFFFFFFF7F2C2000
munmap(0xFFFFFFFF7F1B4000, 1048576) = 0
memcntl(0xFFFFFFFF7F100000, 157304, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
close(3) = 0
mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFFFFFFFF7F000000
stat("/lib/sparcv9/libdl.so.1", 0xFFFFFFFF7FFFE890) = 0
open("/lib/sparcv9/libdl.so.1", O_RDONLY) = 3
fstat(3, 0xFFFFFFFF7FFFE890) = 0
mmap(0xFFFFFFFF7F300000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED,
3, 0) = 0xFFFFFFFF7F300000
close(3) = 0
stat("/usr/platform/SUNW,UltraAX-i2/lib/sparcv9/libc_psr.so.1",
0xFFFFFFFF7FFFE550) = 0
open("/usr/platform/SUNW,UltraAX-i2/lib/sparcv9/libc_psr.so.1", O_RDONLY)
= 3
fstat(3, 0xFFFFFFFF7FFFE550) = 0
mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0xFFFFFFFF7EF00000
mmap(0x00000000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0xFFFFFFFF7EE00000
close(3) = 0
munmap(0xFFFFFFFF7EF00000, 8192) = 0
brk(0x100101230) = 0
brk(0x100105230) = 0
open("junkndbm.pag", O_RDWR|O_CREAT, 0664) = 3
open("junkndbm.dir", O_RDWR|O_CREAT, 0664) = 4
fstat(4, 0xFFFFFFFF7FFFEC90) = 0
     Incurred fault #6, FLTBOUNDS %pc = 0xFFFFFFFF7F14D644
       siginfo: SIGSEGV SEGV_MAPERR addr=0xFFFFFFFF80000000
     Received signal #11, SIGSEGV [default]
       siginfo: SIGSEGV SEGV_MAPERR addr=0xFFFFFFFF80000000
         *** process killed ***

here is the output of gdb:
-------------------------
gdb ./blah -c core
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "sparcv9-sun-solaris2.8"...
Core was generated by `./blah'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/sparcv9/libc.so.1...done.
Loaded symbols for /lib/sparcv9/libc.so.1
Reading symbols from /lib/sparcv9/libdl.so.1...done.
Loaded symbols for /lib/sparcv9/libdl.so.1
Reading symbols from
/usr/platform/SUNW,UltraAX-i2/lib/sparcv9/libc_psr.so.1...done.
Loaded symbols for /usr/platform/SUNW,UltraAX-i2/lib/sparcv9/libc_psr.so.1
#0 0xffffffff7f14d644 in dcalchash () from /lib/sparcv9/libc.so.1
(gdb)
_______________________________________________
sunmanagers mailing list
sunmanagers@sunmanagers.org
http://www.sunmanagers.org/mailman/listinfo/sunmanagers
_______________________________________________
sunmanagers mailing list
sunmanagers@sunmanagers.org
http://www.sunmanagers.org/mailman/listinfo/sunmanagers



This archive was generated by hypermail 2.1.7 : Wed Apr 09 2008 - 23:25:32 EDT