[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ruby-1.8.2: test.rb: Seg Fault in test_check "exception"

me2faster

7/7/2005 11:36:00 PM

I reduced the sample/test.rb to just the test_check "exception"
section, and discovered that rb_raise_jump() in eval.c is trying to
assign from _frame.prev or _frame.prev->prev, which have not been
memory allocated correctly. With the original source in place, the seg
fault occurs at:

*ruby_frame = *_frame.prev->prev;

if I break it down into member-to-member assignments, the seg fault
occurs at:

ruby_frame->tmp = (*_frame.prev->prev).tmp;

Here's the stack trace:

....
:c
Continuing.
exception

Breakpoint 2, rb_raise_jump (mesg=134598224)
at /home/ruby-1.8.2/eval.c:4475
4475 ruby_frame->tmp =
(*_frame.prev->prev).tmp;
:c
Continuing.
mytest.rb:30: [BUG] Segmentation fault
ruby 1.8.2 (2004-12-25) [nsr-nsk]

Process (3,994) received signal/trap type: 1 (number: 6)
:bt
#0 0xffffffffe101d900 in $n_EnterPriv ()
#1 0xffffffffe5071ef0 in raise ()
#2 0xffffffffe5072da0 in PK_ABORT_ ()
#3 0xffffffffff7dc100 in abort ()
#4 0x704018e0:0 in rb_bug (fmt=0x700313b0 "Segmentation fault")
at /home/ruby-1.8.2/error.c:214
#5 0x702f7690:0 in sigsegv (sig=11) at /home/ruby-1.8.2/signal.c:446
#6 0xffffffffe4419710 in $UD_S__SigHandlerJacket ()
#7 0x7006b050:1 in rb_raise_jump (mesg=134598224)
at /home/ruby-1.8.2/eval.c:4475
#8 0x7006a080:0 in rb_f_raise (argc=1, argv=0x80a7f00)
at /home/ruby-1.8.2/eval.c:4408
#9 0x70078440:0 in call_cfunc (func=0x8018590 <_initz+15808>,
recv=134672144,
len=-1, argc=1, argv=0x80a7f00) at /home/ruby-1.8.2/eval.c:5408
#10 0x7007f3a0:0 in rb_call0 (klass=134677928, recv=134672144, id=3953,
oid=3953, argc=1, argv=0x80a7f00, body=0x806e400, nosuper=0)
at /home/ruby-1.8.2/eval.c:5543
#11 0x700832e0:0 in rb_call (klass=134677928, recv=134672144, mid=3953,
argc=1, argv=0x80a7f00, scope=1) at /home/ruby-1.8.2/eval.c:5764
#12 0x7005a690:0 in rb_eval (self=134672144, n=0x805c538)
at /home/ruby-1.8.2/eval.c:3249
#13 0x70055bc0:0 in rb_eval (self=134672144, n=0x805d240)
at /home/ruby-1.8.2/eval.c:3041


me2faster at excite dot com

11 Answers

Yukihiro Matsumoto

7/13/2005 2:03:00 AM

0

Hi,

In message "Re: ruby-1.8.2: test.rb: Seg Fault in test_check "exception""
on Fri, 8 Jul 2005 08:40:47 +0900, me2faster@excite.com writes:

|I reduced the sample/test.rb to just the test_check "exception"
|section, and discovered that rb_raise_jump() in eval.c is trying to
|assign from _frame.prev or _frame.prev->prev, which have not been
|memory allocated correctly. With the original source in place, the seg
|fault occurs at:
|
|*ruby_frame = *_frame.prev->prev;

We need more information, your platform, CPU, OS and others, with the
command line argument to configure script. The more information the
better. I'm afraid that some part of Ruby (especially GC) requires
special platform treatment, and you hit the point.

matz.


me2faster

7/13/2005 8:58:00 AM

0

It's an HP Integrity NonStop server, using Intel Itanium 2 Processor,
running a POSIX based OS. Here are the environment variables that I
had set prior to calling ./configure:

CFLAGS=-g -Wnowarn -D_TANDEM_SOURCE -D_XOPEN_SOURCE_EXTENDED=1
-D_SIGMAX=44 -Woptimize=0
DLDFLAGS=-ul -obey /usr/lib/libc.txt -L . -L ../.. -L /G/system/zdll049
-lzrlddll
LOCAL_LIBS=-l${LIBRUBY_A}
LDSHARED = eld

Do you want me to post a copy of the (very long) config.log file ?

Yukihiro Matsumoto

7/13/2005 9:11:00 AM

0

Hi,

In message "Re: ruby-1.8.2: test.rb: Seg Fault in test_check "exception""
on Wed, 13 Jul 2005 18:00:50 +0900, me2faster@excite.com writes:

|It's an HP Integrity NonStop server, using Intel Itanium 2 Processor,
|running a POSIX based OS. Here are the environment variables that I
|had set prior to calling ./configure:

Hmm, Itanium. Is it possible for you to try out our latest snapshot
from ftp://ftp.ruby-lang.org/pub/ruby/stable-snaps... ?

|Do you want me to post a copy of the (very long) config.log file ?

config.h is enough for us.

matz.


me2faster

7/13/2005 7:56:00 PM

0

Here's my config.h:

#define PACKAGE_NAME ""
#define PACKAGE_TARNAME ""
#define PACKAGE_VERSION ""
#define PACKAGE_STRING ""
#define PACKAGE_BUGREPORT ""
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define HAVE_LONG_LONG 1
#define HAVE_OFF_T 1
#define SIZEOF_INT 4
#define SIZEOF_SHORT 2
#define SIZEOF_LONG 4
#define SIZEOF_LONG_LONG 8
#define SIZEOF___INT64 0
#define SIZEOF_OFF_T 4
#define SIZEOF_VOIDP 4
#define SIZEOF_FLOAT 4
#define SIZEOF_DOUBLE 8
#define SIZEOF_TIME_T 4
#define HAVE_PROTOTYPES 1
#define TOKEN_PASTE(x,y) x##y
#define HAVE_STDARG_PROTOTYPES 1
#define NORETURN(x) x
#define HAVE_DECL_SYS_NERR 0
#define HAVE_DIRENT_H 1
#define STDC_HEADERS 1
#define HAVE_SYS_WAIT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_UNISTD_H 1
#define HAVE_LIMITS_H 1
#define HAVE_SYS_IOCTL_H 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TIMES_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_PWD_H 1
#define HAVE_GRP_H 1
#define HAVE_UTIME_H 1
#define HAVE_MEMORY_H 1
#define HAVE_SYS_RESOURCE_H 1
#define HAVE_NETINET_IN_SYSTM_H 1
#define HAVE_FLOAT_H 1
#define HAVE_IEEEFP_H 1
#define HAVE_STRUCT_STAT_ST_RDEV 1
#define HAVE_ST_RDEV 1
#define GETGROUPS_T gid_t
#define RETSIGTYPE void
#define C_ALLOCA 1
#define STACK_DIRECTION -1
#define HAVE_DUP2 1
#define HAVE_MEMMOVE 1
#define HAVE_MKDIR 1
#define HAVE_STRCASECMP 1
#define HAVE_STRNCASECMP 1
#define HAVE_STRERROR 1
#define HAVE_STRFTIME 1
#define HAVE_STRCHR 1
#define HAVE_STRSTR 1
#define HAVE_STRTOUL 1
#define HAVE_CRYPT 1
#define HAVE_VSNPRINTF 1
#define HAVE_ISNAN 1
#define HAVE_FINITE 1
#define HAVE_HYPOT 1
#define HAVE_ACOSH 1
#define HAVE_ERF 1
#define HAVE_FMOD 1
#define HAVE_WAITPID 1
#define HAVE_CHROOT 1
#define HAVE_FSYNC 1
#define HAVE_GETCWD 1
#define HAVE_TIMES 1
#define HAVE_FCNTL 1
#define HAVE_LSTAT 1
#define HAVE_SYMLINK 1
#define HAVE_READLINK 1
#define HAVE_PAUSE 1
#define HAVE_GETPGRP 1
#define HAVE_GETPGID 1
#define HAVE_SETPGID 1
#define HAVE_GETGROUPS 1
#undef HAVE_GETPRIORITY
#define HAVE_SIGPROCMASK 1
#define HAVE_SIGACTION 1
#define HAVE__SETJMP 1
#define HAVE_SETSID 1
#define HAVE_TELLDIR 1
#define HAVE_SEEKDIR 1
#define HAVE_MKTIME 1
#define HAVE_COSH 1
#define HAVE_SINH 1
#define HAVE_TANH 1
#define HAVE_SETUID 1
#define HAVE_SETGID 1
#define HAVE_TZNAME 1
#define HAVE_DAYLIGHT 1
#define NEGATIVE_TIME_T 1
#define POSIX_SIGNAL 1
#define GETPGRP_VOID 1
#define SETPGRP_VOID 1
#define WORDS_BIGENDIAN 1
#define __CHAR_UNSIGNED__ 1
#ifndef __cplusplus
#define inline
#endif
#define RSHIFT(x,y) ((x)>>(int)y)
#define FILE_COUNT _cnt
#define FILE_READPTR _ptr
#define NEED_IO_SEEK_BETWEEN_RW 1
#define STACK_GROW_DIRECTION -1
#define DEFAULT_KCODE KCODE_NONE
#define USE_ELF 1
#define DLEXT ".so"
#define RUBY_LIB "/usr/local/lib/ruby/1.8"
#define RUBY_SITE_LIB "/usr/local/lib/ruby/site_ruby"
#define RUBY_SITE_LIB2 "/usr/local/lib/ruby/site_ruby/1.8"
#define RUBY_PLATFORM "nsr-nsk"
#define RUBY_ARCHLIB "/usr/local/lib/ruby/1.8/nsr-nsk"
#define RUBY_SITE_ARCHLIB "/usr/local/lib/ruby/site_ruby/1.8/nsr-nsk"

#ifdef _TANDEM_SOURCE
typedef unsigned int u_word32;
#endif


me2faster at excite dot com

me2faster

7/14/2005 1:28:00 AM

0

Hi,

I tried building with the latest snapshot as mentioned above, but got
the same results as mentioned in the root of this message thread, and
is consistent with my earlier posting (Message ID:
1116359825.581559.106910@g43g2000cwa.googlegroups.com):

....
ok 8
exception
../test.rb:593: [BUG] Segmentation fault
ruby 1.8.3 (2005-07-14) []

Process (5,342) received signal/trap type: 1 (number: 6)
(eInspect 5,342):bt
#0 0xffffffffe101dd60 in $n_EnterPriv ()
#1 0xffffffffe5072e70 in raise ()
#2 0xffffffffe5073d20 in PK_ABORT_ ()
#3 0xffffffffff7dc100 in abort ()
#4 0x7040ca00:0 in rb_bug (fmt=0x70031ae0 "Segmentation fault")
at /home/ruby/error.c:214
#5 0x703025b0:0 in sigsegv (sig=11) at /home/ruby/signal.c:447
#6 0xffffffffe441a7d0 in $UD_S__SigHandlerJacket ()
#7 0x7006ccd0:1 in rb_raise_jump (mesg=134956720)
at /home/ruby/eval.c:4592
#8 0x7006bd00:0 in rb_f_raise (argc=1, argv=0x812c3d0)
at /home/ruby/eval.c:4535
#9 0x7007a1a0:0 in call_cfunc (func=0x8018e20 <_initz+17888>,
recv=134672048,
len=-1, argc=1, argv=0x812c3d0) at /home/ruby/eval.c:5528
#10 0x700814c0:0 in rb_call0 (klass=134677928, recv=134672048, id=3969,
oid=3969, argc=1, argv=0x812c3d0, body=0x806e3a0, nosuper=0)
at /home/ruby/eval.c:5665
#11 0x70085700:0 in rb_call (klass=134677928, recv=134672048, mid=3969,
argc=1, argv=0x812c3d0, scope=1) at /home/ruby/eval.c:5886
#12 0x7005bd10:0 in rb_eval (self=134672048, n=0x8106ca0)
at /home/ruby/eval.c:3377
#13 0x70057610:0 in rb_eval (self=134672048, n=0x805d198)
at /home/ruby/eval.c:3177
---Type <return> to continue, or q <return> to quit---
#14 0x70041390:0 in eval_node (self=134672048, node=0x805d198)
at /home/ruby/eval.c:1360
#15 0x70043080:0 in ruby_exec_internal () at /home/ruby/eval.c:1535
#16 0x700432f0:0 in ruby_exec () at /home/ruby/eval.c:1555
#17 0x700433f0:0 in ruby_run () at /home/ruby/eval.c:1565
#18 0x70035d50:0 in main (argc=3, argv=0x8031000, envp=0x803102a)
at /home/ruby/main.c:46
....

me2faster at excite dot com

Yukihiro Matsumoto

7/14/2005 5:42:00 AM

0

Hi,

In message "Re: ruby-1.8.2: test.rb: Seg Fault in test_check "exception""
on Thu, 14 Jul 2005 05:00:51 +0900, me2faster@excite.com writes:

|#define RUBY_PLATFORM "nsr-nsk"

You've said the CPU was Itanium, but configure says it nsr, so that I'm
afraid Itanium support code in gc.c is not working at all.

matz.


me2faster

7/14/2005 8:08:00 AM

0

So, what do I specify as the --build="" argument to ./configure in
order for the Itanium support to be utilized?


me2faster at excite dot com

Yukihiro Matsumoto

7/14/2005 8:33:00 AM

0

Hi,

In message "Re: ruby-1.8.2: test.rb: Seg Fault in test_check "exception""
on Thu, 14 Jul 2005 17:10:51 +0900, me2faster@excite.com writes:

|So, what do I specify as the --build="" argument to ./configure in
|order for the Itanium support to be utilized?

The current implementation requires the constant __ia64__ to be
defined on the Itanium processor. Besides that we need proper
<ucontext.h> and <unwind.h> or __libc_ia64_register_backing_store_base;

If you have Boehm's GC or Guile Scheme interpreter run on your
machine, let me know.
matz.


me2faster

7/14/2005 8:29:00 PM

0

Hi,

I tried to re-build with the closest build-type I could find in
config.guess "x86_64" and used "-D__ia64__" in CFLAGS, but ran into:

/usr/bin/c89 -g -Wnowarn -D__ia64__ -D_TANDEM_SOURCE
-D_XOPEN_SOURCE_EXTENDED=1
-D_SIGMAX=44 -Woptimize=0 -I. -I. -c eval.c
top = (VALUE*)ctx.uc_mcontext.sc_ar_bsp;
^
"/home/ruby/eval.c", line 9998: error(1565): struct "mcontext" has no
field "sc_ar_bsp"


This is because my local version of ucontext.h contains:

....
typedef int greg_t;
typedef greg_t gregset_t[38];

typedef struct mcontext
{
gregset_t gpregs;
} mcontext_t;

typedef struct ucontext
{
mcontext_t uc_mcontext;
} ucontext_t;
....

I don't have Boehm's GC or Guile Scheme interpreter on my machine, so
now I'm stuck.

Yukihiro Matsumoto

7/15/2005 8:19:00 AM

0

Hi,

In message "Re: ruby-1.8.2: test.rb: Seg Fault in test_check "exception""
on Fri, 15 Jul 2005 05:30:52 +0900, me2faster@excite.com writes:

|I tried to re-build with the closest build-type I could find in
|config.guess "x86_64" and used "-D__ia64__" in CFLAGS, but ran into:
|
|/usr/bin/c89 -g -Wnowarn -D__ia64__ -D_TANDEM_SOURCE
|-D_XOPEN_SOURCE_EXTENDED=1
|-D_SIGMAX=44 -Woptimize=0 -I. -I. -c eval.c
| top = (VALUE*)ctx.uc_mcontext.sc_ar_bsp;
| ^
|"/home/ruby/eval.c", line 9998: error(1565): struct "mcontext" has no
| field "sc_ar_bsp"
|
|This is because my local version of ucontext.h contains:

Can you find any reference to ucontext.h, especially mcontext structure
on your machine?

matz.