Lots has changed since we forked Android's libcore, so merging the latest upstream code has required extensive changes to the Avian/Android port. One big change is that we now use Avian's versions of java.lang.Object, java.lang.Class, java.lang.ClassLoader, some java.lang.reflect.* classes, etc. instead of the Android versions. The main reason is that the Android versions have become very Dex/Dalvik-specific, and since Avian is based on Java class files, not dex archives, that code doesn't make sense here. This has the side benefit that we can share more native code with classpath-avian.cpp and reduce the amount of Java/C++ code duplication.
Posix_getaddrinfo needs to access fields in libcore.io.StructAddrinfo via JNI, so we tell ProGuard to preserve them. This commit also includes a minor indentation tweek in README.md and removes -fno-rtti from lzma-build-cflags to avoid a warning from GCC.
So there I was, planning to just fix one little bug: Thread.holdsLock and Thread.yield were missing for the Android class library. Easy enough, right? So, I added a test, got it passing, and figured I'd go ahead and run ci.sh with all three class libraries. Big mistake. Here's the stuff I found: * minor inconsistency in README.md about OpenSSL version * untested, broken Class.getEnclosingMethod (reported by Josh) * JNI test failed for tails=true Android build * Runtime.nativeExit missing for Android build * obsolete assertion in CallEvent broke tails=true Android build * obsolete superclass field offset padding broke bootimage=true Android build * runtime annotation parsing broke bootimage=true Android build (because we couldn't modify Addendum.annotationTable for classes in the heap image) * ci.sh tried building with both android=... and openjdk=..., which the makefile rightfully balked at Sorry this is all in a single commit; I didn't expect so many unrelated issues, and I'm too lazy to break them apart.
…ibraries This also fixes the some Android build rot and updates the version of OpenSSL used.
This is needed to allow the link to succeed when doing an openjdk-src build on Windows.
Previously, we used "lzma:", which worked fine on Windows (where the path separator is ";") but not on Unix-style OSes (where the path separator is ":"). In the latter case, the VM would parse "[lzma:bootJar]" as a path containing two elements, "[lzma" and "bootJar]", which is not what was intended. So now we use "lzma." as the prefix, which works on all OSes.
armv7 and later provide weaker cache coherency models than armv6 and earlier, so we cannot just implement memory barriers as no-ops. This patch uses the DMB instruction (or the equivalent OS-provided barrier function) to implement barriers. This should fix concurrency issues on newer chips such as the Apple A6 and A7. If you still need to support ARMv6 devices, you should pass "armv6=true" to make when building Avian. Ideally, the VM would detect what kind of CPU it was executing on at runtime and direct the JIT compiler accordingly, but I don't know how to do that on ARM. Patches are welcome, though!
Per #53, Avian should build against a standard AOSP checkout, which means we should look for subprojects in the directories the repo utility would place them.
With corresponding changes to libcore, all the tests are passing except Datagrams, which fails with a NPE in NetworkInterface.getNetworkInterfacesList due to OS X not having /sys/class/net. Porting that class to OS X looks like a non-trivial task.