Bugs item #10304, was opened at 2007-04-23 10:55
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=10304&group_id=426

Category: None
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Michal Suchanek (hramrach)
Assigned to: Nobody (None)
Summary: miniruby crashes on OS X

Initial Comment:
Since it works for everybody else it might something I have done.
I am using slightly different linker flags for extensions.

--- configure.in        2007-04-18 12:49:43.000000000 +0200
+++ configure.in        2007-04-19 14:23:04.000000000 +0200
@@ -1052,7 +1052,7 @@
        rhapsody*)      : ${LDSHARED='cc -dynamic -bundle -undefined suppress'}
                        : ${LDFLAGS=""}
                        rb_cv_dlopen=yes ;;
-       darwin*)        : ${LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace'}
+       darwin*)        : ${LDSHARED='cc -dynamic -bundle -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress'}
                        : ${LDFLAGS=""}
                        : ${LIBPATHENV=DYLD_LIBRARY_PATH}
                        rb_cv_dlopen=yes ;;
@@ -1384,9 +1384,9 @@
        ;;
     darwin*)
        LIBRUBY_SO='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib'
-       LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace'
-       LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'
-       LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib'
+       LIBRUBY_LDSHARED='cc -dynamiclib'
+       LIBRUBY_DLDFLAGS='-install_name $(libdir)/lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)'
+       LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_SO_NAME).dylib libruby.2.dylib'
        ;;
     interix*)
        LIBRUBYARG_SHARED='-L${libdir} -L. -l$(RUBY_SO_NAME)'



(gdb) run -I'../..' -I'../.././lib' -I../../.ext
-I../../.ext/i686-darwin ../.././ext/dl/mkcallback.rb
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program:
/sw/src/fink.build/ruby18-1.8.6-1/ruby-1.8.6/miniruby -I'../..'
-I'../.././lib' -I../../.ext -I../../.ext/i686-darwin
../.././ext/dl/mkcallback.rb
Reading symbols for shared libraries . done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x0057a662 in st_lookup (table=0x0, key=1949342, value=0xbfffd17c) at st.c:250
250     in st.c
(gdb) bt
#0  0x0057a662 in st_lookup (table=0x0, key=1949342, value=0xbfffd17c)
at st.c:250
#1  0x00550c49 in rb_intern (name=0x1dbe9e "Etc") at parse.y:6023
#2  0x0050e801 in rb_define_module (name=0x1dbe9e "Etc") at class.c:305
#3  0x001db647 in Init_etc () at etc.c:506
#4  0x000841e5 in dln_load (file=0x48f8e0
"../../.ext/i686-darwin/etc.bundle") at dln.c:1476
#5  0x00018c76 in rb_require_safe (fname=3294280, safe=0) at eval.c:7222
#6  0x0000c458 in rb_call0 (klass=1944720, recv=3235220, id=9449,
oid=9449, argc=1, argv=0xbfffd570, body=0x1cbd80, flags=2) at
eval.c:5815
#7  0x0000cdb7 in rb_call (klass=1944720, recv=3235220, mid=9449,
argc=1, argv=0xbfffd570, scope=1, self=3235220) at eval.c:6062
#8  0x0000a421 in rb_eval (self=3235220, n=0x0) at eval.c:3468
#9  0x000098b2 in rb_eval (self=3235220, n=0x0) at eval.c:3263
#10 0x00016a86 in module_setup (module=0, n=0x315dbc) at eval.c:4152
#11 0x0000bebc in rb_eval (self=1939860, n=0x0) at eval.c:4082
#12 0x000185c5 in rb_load (fname=3379620, wrap=0) at eval.c:6857
#13 0x00018c23 in rb_require_safe (fname=1869740, safe=0) at eval.c:7213
#14 0x0000c458 in rb_call0 (klass=1944720, recv=1939860, id=9449,
oid=9449, argc=1, argv=0xbfffea80, body=0x1cbd80, flags=2) at
eval.c:5815
#15 0x0000cdb7 in rb_call (klass=1944720, recv=1939860, mid=9449,
argc=1, argv=0xbfffea80, scope=1, self=1939860) at eval.c:6062
#16 0x0000a421 in rb_eval (self=1939860, n=0x0) at eval.c:3468
#17 0x000185c5 in rb_load (fname=1870020, wrap=0) at eval.c:6857
#18 0x00018c23 in rb_require_safe (fname=1877520, safe=0) at eval.c:7213
#19 0x0000c458 in rb_call0 (klass=1944720, recv=1939860, id=9449,
oid=9449, argc=1, argv=0xbffff110, body=0x1cbd80, flags=2) at
eval.c:5815
#20 0x0000cdb7 in rb_call (klass=1944720, recv=1939860, mid=9449,
argc=1, argv=0xbffff110, scope=1, self=1939860) at eval.c:6062
#21 0x0000a421 in rb_eval (self=1939860, n=0x0) at eval.c:3468
#22 0x00018f13 in ruby_exec_internal () at eval.c:1608
#23 0x00018f44 in ruby_exec () at eval.c:1628
#24 0x00018f6f in ruby_run () at eval.c:1638
#25 0x000024f3 in main (argc=6, argv=0xbffff520, envp=0xbffff53c) at main.c:48


----------------------------------------------------------------------

>Comment By: Michal Suchanek (hramrach)
Date: 2007-04-25 15:17

Message:
hmm, the library flags do not really make any difference.
In fact, miniruby and ruby are pretty much the same thing on
OS X.

But I got a build where I could reproduce the crash, then
modified mniruby so that it really does not try to load
anything from installed ruby, and it no longer crashed.

----------------------------------------------------------------------

Comment By: Michal Suchanek (hramrach)
Date: 2007-04-23 21:43

Message:
Indeed, miniruby only works if flat namespace is used for
extension linking. Full ruby works with both flat and twolevel.

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=10304&group_id=426