Seg. fault with roots(b)
Robert Jenssen
robertjenssen at ozemail.com.au
Tue May 5 09:43:00 CDT 2009
Hi,
I have built debug versions of octave-3.0.5, lapack-3.2.0_1 and blas-1.0_3.
The following is an octave session and core dump. I'm not at all familiar
with the internals of octave or lapack but it seems that the dimensions in
EIG::init() are correct and that the array size isn't passed properly to the
Fortran code. Note I have used the bits of roots.m that do the work. Please
let me know if I can help further.
Regards,
Rob Jenssen
[root octave-3.0.5]./run-octave
GNU Octave, version 3.0.5
Copyright (C) 2008 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type `warranty'.
Octave was configured for "i386-unknown-freebsd7.2".
Additional information about Octave is available at http://www.octave.org.
Please contribute if you find this software useful.
For more information, visit http://www.octave.org/help-wanted.html
Report bugs to <bug at octave.org> (but first, please read
http://www.octave.org/bugs.html to learn how to write a helpful report).
For information about changes from previous versions, type `news'.
octave:1> b=[ 6.148085718323177e-05 0.0008536007856335365 ...
> 0.0006762894290155496 0.008536007856335364 ...
> 0.003381447145077748 0.03841203535350914 ...
> 0.01014434143523324 0.1024320942760244 ...
> 0.02028868287046649 0.1792561649830427 ...
> 0.02840415601865308 0.2151073979796512 ...
> 0.02840415601865308 0.1792561649830427 ...
> 0.02028868287046649 0.1024320942760244 ...
> 0.01014434143523324 0.03841203535350914 ...
> 0.003381447145077748 0.008536007856335364 ...
> 0.0006762894290155495 0.0008536007856335365 ...
> 6.148085718323177e-05];
octave:2> l = max (size (b));
octave:3> A = diag (ones (1, l-2), -1);
octave:4> A(1,:) = -b(2:l) ./ b(1);
octave:5> eig(A)
panic: Segmentation fault: 11 -- stopping myself...
attempting to save variables to `octave-core'...
save to `octave-core' complete
Segmentation fault: 11 (core dumped)
[root octave-3.0.5]gdb66 /usr/local/src/octave/octave-3.0.5/src/octave
octave.core
GNU gdb 6.6 [GDB v6.6 for FreeBSD]
Copyright (C) 2006 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 "i386-portbld-freebsd7.2"...
Reading symbols
from /usr/local/src/octave/octave-3.0.5/src/liboctinterp.so...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/liboctinterp.so
Reading symbols
from /usr/local/src/octave/octave-3.0.5/liboctave/liboctave.so...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/liboctave/liboctave.so
Reading symbols
from /usr/local/src/octave/octave-3.0.5/libcruft/libcruft.so...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/libcruft/libcruft.so
Reading symbols from /usr/local/lib/libumfpack.so.1...done.
Loaded symbols for /usr/local/lib/libumfpack.so.1
Reading symbols from /usr/local/lib/libamd.so.1...done.
Loaded symbols for /usr/local/lib/libamd.so.1
Reading symbols from /usr/local/lib/libcamd.so.1...done.
Loaded symbols for /usr/local/lib/libcamd.so.1
Reading symbols from /usr/local/lib/libcolamd.so.1...done.
Loaded symbols for /usr/local/lib/libcolamd.so.1
Reading symbols from /usr/local/lib/libcholmod.so.1...done.
Loaded symbols for /usr/local/lib/libcholmod.so.1
Reading symbols from /usr/local/lib/libccolamd.so.1...done.
Loaded symbols for /usr/local/lib/libccolamd.so.1
Reading symbols from /usr/local/lib/libcxsparse.so.1...done.
Loaded symbols for /usr/local/lib/libcxsparse.so.1
Reading symbols from /usr/local/lib/libfftw3.so.4...done.
Loaded symbols for /usr/local/lib/libfftw3.so.4
Reading symbols from /lib/libreadline.so.7...done.
Loaded symbols for /lib/libreadline.so.7
Reading symbols from /lib/libncurses.so.7...done.
Loaded symbols for /lib/libncurses.so.7
Reading symbols from /usr/local/lib/libhdf5.so.0...done.
Loaded symbols for /usr/local/lib/libhdf5.so.0
Reading symbols from /lib/libz.so.4...done.
Loaded symbols for /lib/libz.so.4
Reading symbols from /usr/local/lib/gcc-4.3.4/libgfortran.so.3...done.
Loaded symbols for /usr/local/lib/gcc-4.3.4/libgfortran.so.3
Reading symbols from /lib/libm.so.5...done.
Loaded symbols for /lib/libm.so.5
Reading symbols from /usr/lib/libstdc++.so.6...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/libgcc_s.so.1...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/libc.so.7...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /lib/libthr.so.3...done.
Loaded symbols for /lib/libthr.so.3
Reading symbols
from /usr/local/src/octave/octave-3.0.5/src/dispatch.oct...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/dispatch.oct
Reading symbols
from /usr/local/src/octave/octave-3.0.5/src/cellfun.oct...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/cellfun.oct
Reading symbols from /usr/local/src/octave/octave-3.0.5/src/find.oct...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/find.oct
Reading symbols from /usr/local/src/octave/octave-3.0.5/src/max.oct...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/max.oct
Reading symbols from /usr/local/src/octave/octave-3.0.5/src/eig.oct...done.
Loaded symbols for /usr/local/src/octave/octave-3.0.5/src/eig.oct
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
Core was generated by `octave'.
Program terminated with signal 11, Segmentation fault.
#0 0x295c1e6f in dlange (norm=@0x293ff0fb, m=@0xbfbfd2a4, n=@0xbfbfd2a4,
a=0x2b6eb000, lda=@0xbfbfd2a4, work=0xbfbfd030, _norm=1) at dlange.f:96
96 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
(gdb) bt
#0 0x295c1e6f in dlange (norm=@0x293ff0fb, m=@0xbfbfd2a4, n=@0xbfbfd2a4,
a=0x2b6eb000, lda=@0xbfbfd2a4, work=0xbfbfd030, _norm=1) at dlange.f:96
#1 0x293154c1 in dgeev (jobvl=@0x293f99cf, jobvr=@0x293f99cf, n=@0xbfbfd2a4,
a=0x2b6eb000, lda=@0xbfbfd2a4, wr=0x29d022f0, wi=0x29d023a0, vl=0x0,
ldvl=@0xbfbfd298, vr=0x29d1b292, ldvr=@0xbfbfd2a4, work=0x2b900000,
lwork=@0xbfbfd29c, info=@0xbfbfd2a0, _jobvl=1, _jobvr=1) at dgeev.f:241
#2 0x28f150ea in EIG::init (this=0xbfbfd3c0, a=@0xbfbfd4e4, calc_ev=.FALSE.)
at EIG.cc:125
#3 0x2b7453ed in Feig (args=@0x2ae5b6d8, nargout=0) at ../liboctave/EIG.h:46
#4 0x2854f1f4 in octave_builtin::do_multi_index_op (this=0x2acf80f0,
nargout=0, args=@0x2ae5b6d8) at ov-builtin.cc:104
#5 0x2854f926 in octave_builtin::subsref (this=0x2acf80f0, type=@0x2b6ff4e4,
idx=@0xbfbfd784, nargout=0) at ov-builtin.cc:54
#6 0x28518f13 in octave_value::subsref (this=0xbfbfd798, type=@0x2b6ff4e4,
idx=@0xbfbfd784, nargout=0) at ov.cc:783
#7 0x2867621a in tree_index_expression::rvalue (this=0x2b6ff4c0, nargout=0)
at pt-idx.cc:352
#8 0x2869bf2c in tree_statement::eval (this=0x2b6e82b0, silent=.FALSE.,
nargout=0, in_function_body=<value optimized out>) at pt-stmt.cc:133
#9 0x2869c3a8 in tree_statement_list::eval (this=0x2b6e82c0, silent=.FALSE.,
nargout=0) at pt-stmt.cc:190
#10 0x28460e44 in main_loop () at toplev.cc:225
#11 0x283e1769 in octave_main (argc=5, argv=0xbfbfda98, embedded=0)
at octave.cc:836
#12 0x0804867a in main (argc=Cannot access memory at address 0xbfa7ffff
) at main.c:35
Current language: auto; currently fortran
(gdb) frame
#0 0x295c1e6f in dlange (norm=@0x293ff0fb, m=@0xbfbfd2a4, n=@0xbfbfd2a4,
a=0x2b6eb000, lda=@0xbfbfd2a4, work=0xbfbfd030, _norm=1) at dlange.f:96
96 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
(gdb) l
91 * Find max(abs(A(i,j))).
92 *
93 VALUE = ZERO
94 DO 20 J = 1, N
95 DO 10 I = 1, M
96 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
97 10 CONTINUE
98 20 CONTINUE
99 ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
100 *
(gdb) p I
$1 = 48129
(gdb) p J
$2 = 1
(gdb) p N
$3 = (REF TO -> ( integer(kind=4) )) @0xbfbfd2a4: 1079508992
(gdb) p M
$4 = (REF TO -> ( integer(kind=4) )) @0xbfbfd2a4: 1079508992
(gdb) p A
$5 = (PTR TO -> ( real*8 (0:-1))) 0x2b6eb000
(gdb) up
#1 0x293154c1 in dgeev (jobvl=@0x293f99cf, jobvr=@0x293f99cf, n=@0xbfbfd2a4,
a=0x2b6eb000, lda=@0xbfbfd2a4, wr=0x29d022f0, wi=0x29d023a0, vl=0x0,
ldvl=@0xbfbfd298, vr=0x29d1b292, ldvr=@0xbfbfd2a4, work=0x2b900000,
lwork=@0xbfbfd29c, info=@0xbfbfd2a0, _jobvl=1, _jobvr=1) at dgeev.f:241
241 ANRM = DLANGE( 'M', N, N, A, LDA, DUM )
(gdb) up
#2 0x28f150ea in EIG::init (this=0xbfbfd3c0, a=@0xbfbfd4e4, calc_ev=false)
at EIG.cc:125
125 F77_XFCN (dgeev, DGEEV, (F77_CONST_CHAR_ARG2 ("N", 1),
Current language: auto; currently c++
(gdb) p a
$10 = (
const Matrix &) @0xbfbfd4e4: {<MArray2<double>> = {<Array2<double>> =
{<Array<double>> = {_vptr$Array = 0x28991080, rep = 0x2b8117d0, dimensions =
{
rep = 0x2b811780}, idx = 0x0,
idx_count = 0}, <No data fields>}, <No data fields>}, <No data
fields>}
(gdb) p a->dimensions->rep->dims[0]
$13 = 22
(gdb) p a->dimensions->rep->dims[1]
$14 = 22
More information about the Bug-octave
mailing list