My jailbroken iPhone has GNU classpath[0] and jamvm[1] installed.
To get ABCL working with GNU classpath, I needed to patch two of classpath's classes as below.
I patched and built classpath in a Linux VM, then extracted the two class files from the resulting glibj.zip and inserted them into the iPhone's /usr/share/classpath/glibj.zip .
I've reported these modifications to: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67188 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67189 the latter of which may be an ABCL problem, not a GNU classpath one.
(Performance: The ABCL REPL takes a few minutes to appear, but things look good when it does.)
ref: [0] http://www.gnu.org/software/classpath/ [1] http://jamvm.sourceforge.net/
Vibhu
diff -Naur classpath-0.99/java/math/BigInteger.java classpath-0.99.abcl/java/math/BigInteger.java --- classpath-0.99/java/math/BigInteger.java 2010-09-02 17:47:07.000000000 +0100 +++ classpath-0.99.abcl/java/math/BigInteger.java 2015-08-11 02:01:18.000000000 +0100 @@ -183,6 +183,7 @@ int i, digit; boolean negative; byte[] bytes; + if (len == 0) throw new NumberFormatException("zero length big integer"); char ch = s.charAt(0); if (ch == '-') { diff -Naur classpath-0.99/java/nio/charset/CharsetEncoder.java classpath-0.99.abcl/java/nio/charset/CharsetEncoder.java --- classpath-0.99/java/nio/charset/CharsetEncoder.java 2010-06-03 20:13:04.000000000 +0100 +++ classpath-0.99.abcl/java/nio/charset/CharsetEncoder.java 2015-08-12 12:16:13.000000000 +0100 @@ -159,8 +159,6 @@ // in progress" and also that "it resets this Encoder". // Should we check to see that the state is reset, or should we // call reset()? - if (state != STATE_RESET) - throw new IllegalStateException ();
// REVIEW: Using max instead of average may allocate a very large // buffer. Maybe we should do something more efficient? @@ -199,9 +197,6 @@ // a return value indicating an incomplete decoding operation" // XXX: We will not check the previous return value, just // that the previous call passed true for endOfInput - if (state != STATE_RESET && state != STATE_CODING - && !(endOfInput && state == STATE_END)) - throw new IllegalStateException (); state = newState;
for (;;)