I ran over the same bug some time ago. Matz tried to reproduce it, but failed
(I think…). And now after several CVS updates even I can’t reproduce the
bug anymore.
But I send you my mail with the stack trace (at the bottom) from back then
anyway.
···
On Sunday 02 March 2003 17:47, nobu.nokada@softhome.net wrote:
Can you show the stack trace?
Hi,
I think I discovered a bug in Ruby 1.8.0:
uehli@ueh-h bug2 $ ruby -v
ruby 1.8.0 (2003-01-27) [i686-linux]
uehli@ueh-h bug2 $ ruby extconf.rb
[BUG] unknown node type 0
ruby 1.8.0 (2003-01-27) [i686-linux]
Aborted
The executed script is the (slightly modified) extconf.rb of the Ruby OpenGL
extension. I tried to narrow down the bug but as soon as I comment a single
line of the source out the bug seems to disappear.
So here is the script (sorry for the length!):
extconf.rb
$Date: 2001/12/01 05:24:58 $
$Author: yoshi $
require “rbconfig”
Config::CONFIG.each do |k,v| Config::MAKEFILE_CONFIG[k] = v.dup end
require “mkmf”
gl_libname = “”
glu_libname = “”
glut_libname = “”
modules = “”
ogl_flg = false
glut_flg = false
File.unlink(“Makefile”) if (FileTest.exist? “Makefile”)
File.unlink(“Makefile.ogl”) if (FileTest.exist? “Makefile.ogl”)
File.unlink(“Makefile.glut”) if (FileTest.exist? “Makefile.glut”)
if (/cygwin/ =~ PLATFORM)
$CFLAGS=“-DWIN32”
gl_libname = “opengl32”
glu_libname = “glu32”
glut_libname = “glut32”
elsif (/mswin32/ =~ PLATFORM)
$CFLAGS=“-DWIN32”
gl_libname = “opengl32”
glu_libname = “glu32”
glut_libname = “glut32”
else
$CFLAGS += " -I."
dir_config(“x11”, “/usr/X11R6”)
$libs = append_library($libs, “Xmu”)
$libs = append_library($libs, “X11”)
gl_libname = “GL”
glu_libname = “GLU”
glut_libname = “glut”
end
$objs = [“glu.o”, “ogl.o”, “rbogl.o”]
#have_library(“pthread”, “pthread_create”)
(have_library(gl_libname, “glEnd”) || have_library(“Mesa”+gl_libname, nil)) &&
(have_library(glu_libname, “gluDisk”) || have_library(“Mesa”+glu_libname,
nil)) &&
create_makefile(“opengl”)
if (FileTest.exist? “Makefile”)
open(“Makefile”) {|f|
open(“Makefile.ogl”, “w”) {|wfile|
wfile.write(f.read)
}
}
File.unlink(“Makefile”)
modules = modules + “opengl.#{CONFIG[‘DLEXT’]}”
ogl_flg = true
else
p “can’t create OpenGL module!”
exit 1
end
$objs = [“glut.o”]
have_library(“Xi”, “XAllowDeviceEvents”) &&
have_library(“Xext”, “XMITMiscGetBugMode”) &&
have_library(“Xmu”, “XmuAddCloseDisplayHook”)
have_library(glut_libname, nil) &&
create_makefile(“glut”)
if (FileTest.exist? “Makefile”)
open(“Makefile”) {|f|
open(“Makefile.glut”, “w”) {|wfile|
wfile.write(f.read)
}
}
File.unlink(“Makefile”)
modules = "glut.#{CONFIG[‘DLEXT’]} " + modules
glut_flg = true
end
open(“Makefile”, “w”) {|f|
f.write <<“MAKEFILE”
SHELL = /bin/sh
all: #{modules}
opengl.#{CONFIG[‘DLEXT’]}: rbogl.c ogl.c glu.c rbogl.h
@echo Now Making opengl extend module
@$(MAKE) -f Makefile.ogl
glut.#{CONFIG[‘DLEXT’]}: glut.c
@echo Now Making glut extend module
@$(MAKE) -f Makefile.glut
clean:
@rm -f *.o *.so *.sl *.a
@rm -f $(TARGET).lib $(TARGET).exp
@rm -f core ruby$(EXEEXT) ~
@rm -f Makefile.ogl Makefile.glut
@rm -f Makefile extconf.h conftest.
install: #{modules}
#{“\t@$(MAKE) -f Makefile.ogl install” if (ogl_flg)}
#{“\t@$(MAKE) -f Makefile.glut install” if (glut_flg)}
site-install: #{modules}
#{“\t@$(MAKE) -f Makefile.ogl site-install” if (ogl_flg)}
#{“\t@$(MAKE) -f Makefile.glut site-install” if (glut_flg)}
MAKEFILE
}
==========================================
Note that there must be EXACTLY 2 empty lines at the end (as above), else the
bug disappears too.
Here is the stack trace:
(gdb) info stack
#0 0x400a1031 in kill () from /lib/libc.so.6
#1 0x400a0c28 in raise () from /lib/libc.so.6
#2 0x400a272b in abort () from /lib/libc.so.6
#3 0x080c7829 in rb_bug (fmt=0x0) at error.c:174
#4 0x08058a51 in rb_eval (self=1075661308, n=0x0) at eval.c:3427
#5 0x0805b7d3 in rb_call0 (klass=1075666208, recv=1075661308, id=9865, oid=0,
argc=0, argv=0xbfffeb70, body=0x4022dce0, nosuper=0) at eval.c:4743
#6 0x0805bd51 in rb_call (klass=1075666208, recv=1075661308, mid=9865,
argc=2, argv=0xbfffeb68, scope=1) at eval.c:4833
#7 0x08056de2 in rb_eval (self=1075661308, n=0x0) at eval.c:2789
#8 0x080554f0 in rb_eval (self=1075661308, n=0x0) at eval.c:2251
#9 0x08053446 in ruby_exec () at eval.c:1314
#10 0x08053484 in ruby_run () at eval.c:1335
#11 0x080514f5 in main (argc=0, argv=0x0, envp=0xbffff760) at main.c:50
#12 0x4008ce34 in __libc_start_main () from /lib/libc.so.6
I could reproduce the bug on two Linux boxes and it’s not the first time I ran
into that bug but I could not get hold of that nasty thing before.
Thanks for your help.
– Thomas