Bug #1172

[sparc] *** glibc detected *** ruby1.9: free(): invalid pointer: 0xf7ef6a54 ***

Added by Lucas Nussbaum almost 3 years ago. Updated 9 months ago.

[ruby-core:22212]
Status:Rejected Start date:02/18/2009
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:-
Target version:-
ruby -v:1.9.1p0

Description

Hi,

The following script causes the interpreter to crash on SPARC.
It is likely to be caused by a mix of continuation and GC.

<---
    GC.start
    require 'continuation'
    o = Object.new
    def o.to_ary() callcc {|k| @cont = k; [1,2,3]} end
    GC.start
    begin
      if [10, 20, 1, 2, 3, 30, 1, 2, 3, 40] !=  [10, 20, o, 30, o, 40].flatten
         puts "FAIL1"
         exit(1)
      end
      GC.start
      puts "OK"
    rescue => e
      p e
    else
      puts "AA"
      o.instance_eval {@cont}.call
    end
    GC.start
--->
Script output:
<---
OK
AA
#<RuntimeError: flatten reentered>
*** glibc detected *** ruby1.9: free(): invalid pointer: 0xf7f2aa54 ***
Aborted
--->

It fails both with:
ruby 1.9.0 (2008-06-20 revision 17482) [sparc-linux]
and
ruby 1.9.1p0 (2009-01-30 revision 21907) [sparc-linux]

History

Updated by Chad Dollins almost 3 years ago

Please provide a core file.

Updated by Lucas Nussbaum almost 3 years ago

Here is the full debug output:
*** glibc detected *** ruby1.9: free(): invalid pointer: 0xf7eeea54 ***
======= Backtrace: =========
/lib/libc.so.6(cfree+0x8c)[0xf7b4a12c]
/usr/lib/libruby1.9.so.1.9(ruby_xfree+0x28)[0xf7e297cc]
/usr/lib/libruby1.9.so.1.9[0xf7e2b248]
/usr/lib/libruby1.9.so.1.9(rb_gc+0x1c)[0xf7e2b5fc]
/usr/lib/libruby1.9.so.1.9(rb_gc_start+0x4)[0xf7e2b614]
/usr/lib/libruby1.9.so.1.9[0xf7ed62d4]
/usr/lib/libruby1.9.so.1.9[0xf7ed9088]
/usr/lib/libruby1.9.so.1.9[0xf7edaac4]
/usr/lib/libruby1.9.so.1.9[0xf7ee0794]
/usr/lib/libruby1.9.so.1.9(rb_iseq_eval+0x16c)[0xf7ee099c]
/usr/lib/libruby1.9.so.1.9(ruby_exec_node+0x90)[0xf7e1bcf4]
/usr/lib/libruby1.9.so.1.9(ruby_run_node+0x40)[0xf7e1d2c4]
ruby1.9(main+0x54)[0x108cc]
/lib/libc.so.6(__libc_start_main+0x110)[0xf7ae7c50]
ruby1.9(_start+0x2c)[0x1072c]
======= Memory map: ========
00010000-00012000 r-xp 00000000 09:01 1144890                            /usr/bin/ruby1.9
00020000-00022000 rwxp 00000000 09:01 1144890                            /usr/bin/ruby1.9
00022000-000f0000 rwxp 00022000 00:00 0                                  [heap]
f7692000-f7714000 rw-p f7692000 00:00 0 
f7714000-f7716000 r-xp 00000000 09:01 1227352                            /usr/lib/ruby/1.9.0/sparc-linux/continuation.so
f7716000-f7724000 ---p 00002000 09:01 1227352                            /usr/lib/ruby/1.9.0/sparc-linux/continuation.so
f7724000-f7726000 rwxp 00000000 09:01 1227352                            /usr/lib/ruby/1.9.0/sparc-linux/continuation.so
f7728000-f772a000 r-xp 00000000 09:01 1227317                            /usr/lib/ruby/1.9.0/sparc-linux/enc/trans/transdb.so
f772a000-f7738000 ---p 00002000 09:01 1227317                            /usr/lib/ruby/1.9.0/sparc-linux/enc/trans/transdb.so
f7738000-f773a000 rwxp 00000000 09:01 1227317                            /usr/lib/ruby/1.9.0/sparc-linux/enc/trans/transdb.so
f773c000-f7740000 r-xp 00000000 09:01 1227321                            /usr/lib/ruby/1.9.0/sparc-linux/enc/encdb.so
f7740000-f774e000 ---p 00004000 09:01 1227321                            /usr/lib/ruby/1.9.0/sparc-linux/enc/encdb.so
f774e000-f7750000 rwxp 00002000 09:01 1227321                            /usr/lib/ruby/1.9.0/sparc-linux/enc/encdb.so
f7752000-f7754000 ---p f7752000 00:00 0 
f7754000-f77da000 rw-p f7754000 00:00 0 
f77da000-f77dc000 r--p 00dda000 09:01 1210076                            /usr/lib/locale/locale-archive
f77de000-f78c8000 r--p 0019e000 09:01 1210076                            /usr/lib/locale/locale-archive
f78c8000-f7ac8000 r--p 00000000 09:01 1210076                            /usr/lib/locale/locale-archive
f7ac8000-f7c26000 r-xp 00000000 09:01 1148445                            /lib/libc-2.9.so
f7c26000-f7c36000 ---p 0015e000 09:01 1148445                            /lib/libc-2.9.so
f7c36000-f7c38000 r--p 0015e000 09:01 1148445                            /lib/libc-2.9.so
f7c38000-f7c3c000 rwxp 00160000 09:01 1148445                            /lib/libc-2.9.so
f7c3c000-f7c3e000 rwxp f7c3c000 00:00 0 
f7c40000-f7d0e000 r-xp 00000000 09:01 1150019                            /lib/libm-2.9.so
f7d0e000-f7d1c000 ---p 000ce000 09:01 1150019                            /lib/libm-2.9.so
f7d1c000-f7d1e000 r--p 000cc000 09:01 1150019                            /lib/libm-2.9.so
f7d1e000-f7d22000 rwxp 000ce000 09:01 1150019                            /lib/libm-2.9.so
f7d24000-f7d2e000 r-xp 00000000 09:01 1148498                            /lib/libcrypt-2.9.so
f7d2e000-f7d3c000 ---p 0000a000 09:01 1148498                            /lib/libcrypt-2.9.so
f7d3c000-f7d3e000 r--p 00008000 09:01 1148498                            /lib/libcrypt-2.9.so
f7d3e000-f7d40000 rwxp 0000a000 09:01 1148498                            /lib/libcrypt-2.9.so
f7d40000-f7d66000 rwxp f7d40000 00:00 0 
f7d68000-f7d6c000 r-xp 00000000 09:01 1148443                            /lib/libdl-2.9.so
f7d6c000-f7d7a000 ---p 00004000 09:01 1148443                            /lib/libdl-2.9.so
f7d7a000-f7d7c000 r--p 00002000 09:01 1148443                            /lib/libdl-2.9.so
f7d7c000-f7d7e000 rwxp 00004000 09:01 1148443                            /lib/libdl-2.9.so
f7d80000-f7d88000 r-xp 00000000 09:01 1148503                            /lib/librt-2.9.so
f7d88000-f7d96000 ---p 00008000 09:01 1148503                            /lib/librt-2.9.so
f7d96000-f7d98000 r--p 00006000 09:01 1148503                            /lib/librt-2.9.so
f7d98000-f7d9a000 rwxp 00008000 09:01 1148503                            /lib/librt-2.9.so
f7d9c000-f7db2000 r-xp 00000000 09:01 1148414                            /lib/libpthread-2.9.so
f7db2000-f7dc0000 ---p 00016000 09:01 1148414                            /lib/libpthread-2.9.so
f7dc0000-f7dc2000 r--p 00014000 09:01 1148414                            /lib/libpthread-2.9.so
f7dc2000-f7dc4000 rwxp 00016000 09:01 1148414                            /lib/libpthread-2.9.so
f7dc4000-f7dc6000 rwxp f7dc4000 00:00 0 
f7dc8000-f7f2c000 r-xp 00000000 09:01 1144668                            /usr/lib/libruby1.9.so.1.9.0
f7f2c000-f7f3a000 ---p 00164000 09:01 1144668                            /usr/lib/libruby1.9.so.1.9.0
f7f3a000-f7f48000 rwxp 00162000 09:01 1144668                            /usr/lib/libruby1.9.so.1.9.0
f7f48000-f7f58000 rwxp f7f48000 00:00 0 
f7f68000-f7f8a000 r-xp 00000000 09:01 1150022                            /lib/ld-2.9.so
f7f96000-f7f98000 rw-p f7f96000 00:00 0 
f7f98000-f7f9a000 r--p 00020000 09:01 1150022                            /lib/ld-2.9.so
f7f9a000-f7f9c000 rwxp 00022000 09:01 1150022                            /lib/ld-2.9.so
f7f9c000-f7f9e000 rw-p f7f9c000 00:00 0 
ffdfa000-ffe24000 rw-p 7fefffd6000 00:00 0                               [stack]
Aborted (core dumped)

Do you have access to a SPARC ?

Updated by Chad Dollins almost 3 years ago

I do have access to a sparc and I will try your script for repro. However I was wondering if you could provide the core file associtated with this segfault. It may not appear in your current directory because of process throttling. You can use 'ulimit -c <size>' if your shell is bash or limit -c <size> I believe if you use csh. After the segfault you should see ./core file. please attach to issue.

Also I'm not quite sure how to get continuation compiled in to 1.9.1. Please leave details.

Thanks
Chad

Updated by Lucas Nussbaum almost 3 years ago

I'm not confortable with providing a core dump publicly, as it will leak information about the system I was using. I could send it to you via private mail, though. What's your email?

Regarding continuation in 1.9.1, it's there by default AFAIK. I didn't do anything special to get it compiled. I ran into the failure during the test suite (that is executed at the end of the Debian packages build), and then reduced it to the test case I described in the bug report.
See http://experimental.debian.net/fetch.php?&pkg=ruby1.9&ver=1.9.1.0-1&arch=sparc&stamp=1235333763&file=log&as=raw
And in particular:
TestArray#test_rindex: 0.00 s: .
TestArray#test_rindex2: 0.00 s: .
TestArray#test_sample: *** glibc detected *** ./ruby1.9: double free or corruption (out): 0x7022ef28 ***
======= Backtrace: =========
/lib/libc.so.6(cfree+0x8c)[0x7044612c]
/build/buildd/ruby1.9-1.9.1.0/libruby1.9-1.9.1.so.1.9.1[0x7015911c]
/build/buildd/ruby1.9-1.9.1.0/libruby1.9-1.9.1.so.1.9.1(rb_newobj+0x6c)[0x70159c9c]
[...]

Updated by Chad Dollins almost 3 years ago

Send me a copy to bug1172 at cdollins dot otherinbox dot com

Updated by Lucas Nussbaum almost 3 years ago

sent

Updated by Lucas Nussbaum almost 3 years ago

You wrote:
> So I guess I'll take a different approach because this didn't work.
>
> Please use gdb to decode the stack trace and attach this to the bug.

The stack trace is already available in that bug report (see comment #2).

Updated by Chad Dollins almost 3 years ago

I was looking for a decoded stack trace. If you can follow the directions I sent this should render the decode.

Thanks
Chad

Updated by Lucas Nussbaum almost 3 years ago

(gdb) file ruby1.9 
Reading symbols from /home/lucas/r191-0218/ruby1.9-1.9.1.0/ruby1.9...done.
(gdb) core ~/core.32505 
Reading symbols from /usr/lib/libruby1.9.so.1.9...done.
Loaded symbols for /usr/lib/libruby1.9.so.1.9
Reading symbols from /lib/libpthread.so.0...done.
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/librt.so.1...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libcrypt.so.1...done.
Loaded symbols for /lib/libcrypt.so.1
Reading symbols from /lib/libm.so.6...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /usr/lib/ruby/1.9.0/sparc-linux/enc/encdb.so...done.
Loaded symbols for /usr/lib/ruby/1.9.0/sparc-linux/enc/encdb.so
Reading symbols from /usr/lib/ruby/1.9.0/sparc-linux/enc/trans/transdb.so...done.
Loaded symbols for /usr/lib/ruby/1.9.0/sparc-linux/enc/trans/transdb.so
Reading symbols from /usr/lib/ruby/1.9.0/sparc-linux/continuation.so...done.
Loaded symbols for /usr/lib/ruby/1.9.0/sparc-linux/continuation.so
Core was generated by `ruby1.9 t.rb'.
Program terminated with signal 6, Aborted.
[New process 32505]
[New process 32506]
#0  0xf7aff9cc in raise () from /lib/libc.so.6
(gdb) bt
#0  0xf7aff9cc in raise () from /lib/libc.so.6
#1  0x0000000c in ?? ()
#2  0x0000000c in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

I don't think that we are going anywhere with this proxy debugging. You really need to (try to) reproduce the issue on a SPARC yourself. if you need access to a sparc, I can try to help, as I already said.

Updated by Yuki Sonoda over 2 years ago

A maintainer for Ruby on sparc is wanted.

Updated by Yui NARUSE over 2 years ago

  • Status changed from Open to Rejected
SPARC is not supported.

Also available in: Atom PDF