Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Minor
-
Resolution: Won't Fix
-
Affects Version/s: JRuby 1.1b1
-
Fix Version/s: None
-
Component/s: IBM/Other VM
-
Labels:None
-
Environment:Debian sid, GCJ 4.2
-
Number of attachments :
Description
When trying to build with GCJ 4.2, I get the following:
generate-method-classes:
[touch] Creating /home/seb/work/debian/jruby/1.1b1/jruby-1.1b1/build/__empty.rb
[java] Exception in thread "main" java.lang.NoClassDefFoundError: org.jruby.RubyModuleInvoker$include_p_method_1_0
[java] at java.lang.Class.initializeClass(libgcj.so.81)
[java] at java.lang.reflect.Constructor.newInstance(libgcj.so.81)
[java] at org.jruby.internal.runtime.methods.InvocationMethodFactory.getAnnotatedMethod(InvocationMethodFactory.java:379)
[java] at org.jruby.RubyModule.defineAnnotatedMethod(RubyModule.java:471)
[java] at org.jruby.RubyModule.defineAnnotatedMethods(RubyModule.java:458)
[java] at org.jruby.RubyModule.createModuleClass(RubyModule.java:99)
[java] at org.jruby.Ruby.initCoreClasses(Ruby.java:1276)
[java] at org.jruby.Ruby.init(Ruby.java:1171)
[java] at org.jruby.Ruby.newInstance(Ruby.java:322)
[java] at org.jruby.Main.runInterpreter(Main.java:168)
[java] at org.jruby.Main.run(Main.java:117)
[java] at org.jruby.Main.main(Main.java:92)
[java] Caused by: java.lang.VerifyError: verification failed at PC 82 in org.jruby.RubyModuleInvoker$include_p_method_1_0:call((Lorg.jruby.runtime.ThreadContext;Lorg.jruby.runtime.builtin.IRubyObject;Lorg.jruby.RubyModule;Ljava.lang.String;[Lorg.jruby.runtime.builtin.IRubyObject;Lorg.jruby.runtime.Block;)Lorg.jruby.runtime.builtin.IRubyObject
: incompatible return type
[java] at java.lang.Class.initializeClass(libgcj.so.81)
[java] ...11 more
1.0.2 built fine with GCJ, after the following patches were applied:
diff -urNad jruby-1.1.0~/src/org/jruby/RubyZlib.java jruby-1.0.2/src/org/jruby/RubyZlib.java
--- jruby-1.1.0~/src/org/jruby/RubyZlib.java 2007-11-01 08:32:20.000000000 -0700
+++ jruby-1.1.0/src/org/jruby/RubyZlib.java 2007-11-06 13:17:51.000000000 -0800
@@ -663,7 +663,7 @@
return orig_name == null ? getRuntime().getNil() : getRuntime().newString(orig_name);
}
- public Object to_io() {
+ public IRubyObject to_io() {
return realIo;
}
diff -urNad jruby-1.1.0~/src/org/jruby/compiler/impl/StandardASMCompiler.java jruby-1.0.2/src/org/jruby/compiler/impl/StandardASMCompiler.java
--- jruby-1.1.0~/src/org/jruby/compiler/impl/StandardASMCompiler.java 2007-11-06 13:17:06.000000000 -0800
+++ jruby-1.1.0/src/org/jruby/compiler/impl/StandardASMCompiler.java 2007-11-06 13:17:14.000000000 -0800
@@ -289,7 +289,7 @@
cv.visitField(ACC_STATIC | ACC_PRIVATE | ACC_FINAL, "$isClassLoaded", cg.ci(Boolean.TYPE), null, Boolean.FALSE);
cv.visitField(ACC_STATIC | ACC_PRIVATE | ACC_FINAL, "$class", cg.ci(Class.class), null, null);
- SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cv.visitMethod(ACC_PUBLIC, "<clinit>", cg.sig(Void.TYPE), null, null));
+ SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cv.visitMethod(ACC_PUBLIC | ACC_STATIC, "<clinit>", cg.sig(Void.TYPE), null, null));
mv.start();
// This is a little hacky...since clinit recurses, set a boolean so we don't continue trying to load class
diff -urNad jruby-1.1.0~/src/org/jruby/libraries/ThreadLibrary.java jruby-1.0.2/src/org/jruby/libraries/ThreadLibrary.java
--- jruby-1.1.0~/src/org/jruby/libraries/ThreadLibrary.java 2007-11-01 08:32:20.000000000 -0700
+++ jruby-1.1.0/src/org/jruby/libraries/ThreadLibrary.java 2007-11-06 13:19:07.000000000 -0800
@@ -249,7 +249,7 @@
return RubyNumeric.int2fix(getRuntime(), entries.size());
}
- public int num_waiting() { return 0; }
+ public IRubyObject num_waiting() { return getRuntime().newFixnum(0); }
public synchronized IRubyObject pop(IRubyObject[] args) {
boolean should_block = true;
Hrm, the patch above looks completely messed up, so I'm attaching it instead.