From 47a7732a8190aa612cf77eb8ffc9c69f29a1ac1e Mon Sep 17 00:00:00 2001 From: Joshua Warner Date: Fri, 6 Dec 2013 14:56:02 -0700 Subject: [PATCH] add jdk-test target, and fix failures The intent of this target is to run our test suite against the installed jre. This should help prevent our VM from diverging in implementation from the jdk. The remainder of this commit fixes the problems that this exposes. --- classpath/avian/Assembler.java | 2 +- classpath/avian/Machine.java | 15 ++++++++++++++- classpath/avian/jar/Handler.java | 2 +- classpath/java/util/jar/JarFile.java | 4 ++-- classpath/java/util/zip/ZipEntry.java | 10 +++++----- classpath/java/util/zip/ZipFile.java | 4 ++-- classpath/java/util/zip/ZipOutputStream.java | 8 ++++---- classpath/sun/misc/Unsafe.java | 4 ++-- makefile | 11 +++++++++++ test/LazyLoading.java | 2 +- test/ci.sh | 1 + 11 files changed, 44 insertions(+), 19 deletions(-) diff --git a/classpath/avian/Assembler.java b/classpath/avian/Assembler.java index 6a8cb46f2f..a17b3af81c 100644 --- a/classpath/avian/Assembler.java +++ b/classpath/avian/Assembler.java @@ -67,7 +67,7 @@ public class Assembler { write4(out, 0xCAFEBABE); write2(out, 0); // minor version - write2(out, 0); // major version + write2(out, 50); // major version write2(out, pool.size() + 1); for (PoolEntry e: pool) { diff --git a/classpath/avian/Machine.java b/classpath/avian/Machine.java index 3cb2cbfb40..3b5cf587ac 100644 --- a/classpath/avian/Machine.java +++ b/classpath/avian/Machine.java @@ -11,10 +11,23 @@ package avian; import sun.misc.Unsafe; +import java.lang.reflect.Field; public abstract class Machine { - private static final Unsafe unsafe = Unsafe.getUnsafe(); + private static final Unsafe unsafe; + + static { + Unsafe u; + try { + Field f = Unsafe.class.getDeclaredField("theUnsafe"); + f.setAccessible(true); + u = (Unsafe)f.get(null); + } catch (Exception e) { + u = null; + } + unsafe = u; + } public static native void dumpHeap(String outputFile); diff --git a/classpath/avian/jar/Handler.java b/classpath/avian/jar/Handler.java index 726f12e413..4ac926a911 100644 --- a/classpath/avian/jar/Handler.java +++ b/classpath/avian/jar/Handler.java @@ -70,7 +70,7 @@ public class Handler extends URLStreamHandler { } public int getContentLength() { - return entry.getSize(); + return (int)entry.getSize(); } public InputStream getInputStream() throws IOException { diff --git a/classpath/java/util/jar/JarFile.java b/classpath/java/util/jar/JarFile.java index e173b9738d..dd437eeff2 100644 --- a/classpath/java/util/jar/JarFile.java +++ b/classpath/java/util/jar/JarFile.java @@ -50,7 +50,7 @@ public class JarFile extends ZipFile { } } - public int getCompressedSize() { + public long getCompressedSize() { try { return compressedSize(window, pointer); } catch (IOException e) { @@ -58,7 +58,7 @@ public class JarFile extends ZipFile { } } - public int getSize() { + public long getSize() { try { return uncompressedSize(window, pointer); } catch (IOException e) { diff --git a/classpath/java/util/zip/ZipEntry.java b/classpath/java/util/zip/ZipEntry.java index a7215598a0..97d5887305 100644 --- a/classpath/java/util/zip/ZipEntry.java +++ b/classpath/java/util/zip/ZipEntry.java @@ -42,8 +42,8 @@ public class ZipEntry { int modTimeDate = -1; long millisTime = -1; int crc = -1; - int compSize = 0; - int uncompSize = 0; + long compSize = 0; + long uncompSize = 0; int offset = -1; public ZipEntry(String name) { @@ -191,12 +191,12 @@ public class ZipEntry { uncompSize = size; } - public int getSize() { + public long getSize() { return uncompSize; } //Methods to set and get the compressed size of the entry - public void setCompressedSize(int size){ + public void setCompressedSize(long size){ if (size < 0){ return; } @@ -204,7 +204,7 @@ public class ZipEntry { compSize = size; } - public int getCompressedSize() { + public long getCompressedSize() { return compSize; } } diff --git a/classpath/java/util/zip/ZipFile.java b/classpath/java/util/zip/ZipFile.java index b45fead8f7..8a675ef8fe 100644 --- a/classpath/java/util/zip/ZipFile.java +++ b/classpath/java/util/zip/ZipFile.java @@ -298,7 +298,7 @@ public class ZipFile { } } - public int getCompressedSize() { + public long getCompressedSize() { try { return compressedSize(window, pointer); } catch (IOException e) { @@ -306,7 +306,7 @@ public class ZipFile { } } - public int getSize() { + public long getSize() { try { return uncompressedSize(window, pointer); } catch (IOException e) { diff --git a/classpath/java/util/zip/ZipOutputStream.java b/classpath/java/util/zip/ZipOutputStream.java index 02702218da..7ea16238df 100644 --- a/classpath/java/util/zip/ZipOutputStream.java +++ b/classpath/java/util/zip/ZipOutputStream.java @@ -147,8 +147,8 @@ public class ZipOutputStream extends DeflaterOutputStream { addFourBytes(DATA_DESCRIPTER_HEADER, 0, tmpBuffer); // data descripter header addFourBytes(currentEntry.crc, 4, tmpBuffer); // crc value - addFourBytes(currentEntry.compSize, 8, tmpBuffer); // compressed size - addFourBytes(currentEntry.uncompSize, 12, tmpBuffer);// uncompressed size + addFourBytes((int)currentEntry.compSize, 8, tmpBuffer); // compressed size + addFourBytes((int)currentEntry.uncompSize, 12, tmpBuffer);// uncompressed size out.write(tmpBuffer, 0, 16); bytesWritten += 16; } @@ -164,8 +164,8 @@ public class ZipOutputStream extends DeflaterOutputStream { addFourBytes(e.modTimeDate, 12, tmpBuffer); // last mod date and time addFourBytes(e.crc, 16, tmpBuffer); // crc - addFourBytes(e.compSize, 20, tmpBuffer); // compressed size - addFourBytes(e.uncompSize, 24, tmpBuffer); // uncompressed size + addFourBytes((int)e.compSize, 20, tmpBuffer); // compressed size + addFourBytes((int)e.uncompSize, 24, tmpBuffer); // uncompressed size addTwoBytes(e.getName().length(), 28, tmpBuffer); // file name length diff --git a/classpath/sun/misc/Unsafe.java b/classpath/sun/misc/Unsafe.java index d894e76db8..ed00ee24ca 100644 --- a/classpath/sun/misc/Unsafe.java +++ b/classpath/sun/misc/Unsafe.java @@ -5,10 +5,10 @@ import java.lang.reflect.Field; public final class Unsafe { private void Unsafe() { } - private static final Unsafe Instance = new Unsafe(); + private static final Unsafe theUnsafe = new Unsafe(); public static Unsafe getUnsafe() { - return Instance; + return theUnsafe; } public native long allocateMemory(long bytes); diff --git a/makefile b/makefile index d5594388f9..5037950cab 100755 --- a/makefile +++ b/makefile @@ -1451,6 +1451,10 @@ else ssh -p$(remote-test-port) $(remote-test-user)@$(remote-test-host) sh "$(remote-test-dir)/$(platform)-$(arch)$(options)/run-tests.sh" endif +.PHONY: jdk-test +jdk-test: $(test-dep) $(build)/jdk-run-tests.sh $(build)/test.sh + /bin/sh $(build)/jdk-run-tests.sh + PHONY: audit-baseline audit-baseline: $(audit-codegen-executable) $(<) -output $(build)/codegen-audit-output/baseline.o -format macho @@ -1495,6 +1499,13 @@ $(build)/run-tests.sh: $(test-classes) makefile $(build)/extra-dir/multi-classpa echo "$(call class-names,$(test-build),$(filter-out $(test-support-classes), $(test-classes))) \\" >> $(@) echo "$(continuation-tests) $(tail-tests)" >> $(@) +$(build)/jdk-run-tests.sh: $(test-classes) makefile $(build)/extra-dir/multi-classpath-test.txt $(build)/test/multi-classpath-test.txt + echo 'cd $$(dirname $$0)' > $(@) + echo "sh ./test.sh 2>/dev/null \\" >> $(@) + echo "$(shell echo $(library-path) | sed 's|$(build)|\.|g') /bin/true $(JAVA_HOME)/bin/java $(mode) \"-Djava.library.path=. -cp test:extra-dir:classpath\" \\" >> $(@) + echo "$(call class-names,$(test-build),$(filter-out $(test-support-classes), $(test-classes))) \\" >> $(@) + echo "$(continuation-tests) $(tail-tests)" >> $(@) + $(build)/extra-dir/multi-classpath-test.txt: mkdir -p $(build)/extra-dir echo "$@" > $@ diff --git a/test/LazyLoading.java b/test/LazyLoading.java index ace2ebf5d0..e94004b065 100644 --- a/test/LazyLoading.java +++ b/test/LazyLoading.java @@ -70,7 +70,7 @@ public class LazyLoading { if (loadLazy) { return findClass(name); } else { - throw new ClassNotFoundException(); + throw new ClassNotFoundException(name); } } else { return super.loadClass(name); diff --git a/test/ci.sh b/test/ci.sh index c1863360b2..2afc65c4dc 100755 --- a/test/ci.sh +++ b/test/ci.sh @@ -2,6 +2,7 @@ set -e +make ${flags} jdk-test make ${flags} test make ${flags} mode=debug test make ${flags} process=interpret test