Re: [sqlite] Seg fault/core dump solaris 8 - sqlite 2.8.15 in attach2-3.1

2005-01-07 Thread John P. Rouillard

In message <[EMAIL PROTECTED]>,
"John P. Rouillard" writes:
>I am trying to compile sqlite-2.8.15 on a Solaris 8 machine using
>gcc-3.4.1 and tcl-8.4.9. The compile goes cleanly, but when I run
>"make test" (with the appropriate LD_LIBRARY_PATH), I get a
>segmentation fault in the attach2-3.1. Since the testfixture isn't
>compiled with debugging symbols, gdb's backtrace is kind of useless.

I have narrowed it down a bit more. The crash occurs at:

   set rc [catch {sqlite_compile $DB "ATTACH 'test2.db' AS t2" TAIL} VM]

in attach2-3.1 since the puts before is printed, but not the puts
after.  I tried to replicate it using sqlite using the following
sequence of commands:

  sqlite test.db  .exit

  sqlite test2.db  .exit

  sqlite test.db
 attach "test2.db" as t2

no core dump or other indication of a problem after the attach.
Is this a valid test?

>The tcl install passed all regressions tests. The same compiler was
>used for both builds.

Tcl was compiled with -O2 to turn on some optimizations.

>I did have to modify the sqlite configure generated Makefile because the 
>ifeq preprocessors weren't being executed. I turned
>
>  ifeq (${INMEMORYDB},0)
>  INCOREFLAGS += -DSQLITE_OMIT_INMEMORYDB=1
>  endif
> and
>
>  # Only build the in-core DB if it is required.
>  ifeq (${INMEMORYDB},1)
>  LIBOBJ += btree_rb.lo
>  endif
>
>into
>
>  LIBOBJ += btree_rb.lo
>
>since INMEMORYDB = 1.

Also, I forgot to mention that configure didn't set up the tcl library
info correctly. I ran configure with:

 configure --prefix=/tools/sqlite-2.8.15 --with-tcl=/tools/tcl-8.4.9

and got:

 TCL_FLAGS = -I/tools/tcl-8.4.9/generic -I/tools/tcl-8.4.9/unix

and

 LIBTCL = /tools/tcl-8.4.9/unix/libtcl8*.a -ldl -lm

which don't exist. So I changed them to

 TCL_FLAGS = -I/tools/tcl-8.4.9/include -L/tools/tcl-8.4.9/lib \
 -R/tools/tcl-8.4.9/lib
and

 LIBTCL = -ltcl8.4 -ldl -lm

Could the dynamic linking of libtcl be causing the crash?

Also at this point I am compiling sqlite without optimization (no -O
flag), and also using -DSQLITE_TEST=1 to try to detect memory issues.

>Also as soon as the segfault occurs, all tests stop running. How do I
>disable just one test when running the testsuite? I assume I have to
>run the testfixture manually rather then through the Makefile.

I have been adding modules to the EXCLUDE list in all.tests. At this
point I have coredumps in the following tests:

  attach2-3.1...
  bind-1.1
  capi2-1.1
  format3-10.1
  func-8.1
  pragma-2.1

The bind-1.1 crash occurs at the line:

 set VM [sqlite_compile $DB {INSERT INTO t1 VALUES(?,?,?)} TAIL]

Does this series of crashes ring any bells for people? Anything in
common that these share that may give me a clue as to what to fix?

Sqlite version 3 compiles and tests fine under this environment. Sadly
the tool I am trying to build (bacula) needs version 2 of sqlite.

>So has anybody seen this before on Solaris? Any idea where to start debugging?

I know that sqlite is developed on linux, has anybody actually gotten
a full passing test suite on Solaris?  If so what were your tcl
version and compiler?

-- rouilj
John Rouillard
===
My employers don't acknowledge my existence much less my opinions.


[sqlite] Seg fault/core dump solaris 8 - sqlite 2.8.15 in attach2-3.1

2005-01-05 Thread John P. Rouillard

Hi all:

I am trying to compile sqlite-2.8.15 on a Solaris 8 machine using
gcc-3.4.1 and tcl-8.4.9. The compile goes cleanly, but when I run
"make test" (with the appropriate LD_LIBRARY_PATH), I get a
segmentation fault in the attach2-3.1. Since the testfixture isn't
compiled with debugging symbols, gdb's backtrace is kind of useless.

The tcl install passed all regressions tests. The same compiler was
used for both builds.

I did have to modify the sqlite configure generated Makefile because the 
ifeq preprocessors weren't being executed. I turned

  ifeq (${INMEMORYDB},0)
  INCOREFLAGS += -DSQLITE_OMIT_INMEMORYDB=1
  endif
 and

  # Only build the in-core DB if it is required.
  ifeq (${INMEMORYDB},1)
  LIBOBJ += btree_rb.lo
  endif

into

  LIBOBJ += btree_rb.lo

since INMEMORYDB = 1.

Also as soon as the segfault occurs, all tests stop running. How do I
disable just one test when running the testsuite? I assume I have to
run the testfixture manually rather then through the Makefile.

So has anybody seen this before on Solaris? Any idea where to start debugging?
Any recipes that "just work for you"?

-- rouilj
John Rouillard
===
My employers don't acknowledge my existence much less my opinions.