fix a couple of OpenJDK reflection bugs

We weren't wrapping exceptions thrown by invoked methods in
InvocationTargetExceptions in JVM_InvokeMethod or
JVM_NewInstanceFromConstructor.  Also, JVM_GetCallerClass is supposed
to ignore Method.invoke frames when walking the stack.
make JVM_GetSystemPackage a bit smarter

The original stub implementation just echoed back its argument, but
that confused URLClassLoader when dealing with sealed JARs --
returning a non-null value for a non-system class from
JVM_GetSystemPackage made URLClassloader think it had already loaded a
class from a package which was supposed to be sealed, resulting in
SecurityExceptions which ultimately triggered NoClassDefFoundErrors.
The solution is to only return non-null values for actual system
classes.
Fix missing armv4 blx and bkpt compile errors.

Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
return null from JNIEnv::GetSuperclass for interfaces per spec
gcc define __ARM_PCS_VFP for -mfloat-abi=hard, use it to detect armhf builds.

Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
handle zero length arrays properly in JNIEnv::NewString
fix abort in classpath-openjdk.cpp due to buffer overflow

This addresses the case where -Djava.home=<some really long path>.

https://github.com/ReadyTalk/avian/issues/15
fix OS X 10.8 and iOS 6.0 builds

This also adds support for Clang ARM builds, which involved removing
unused functions from arm.cpp to avoid link-time warnings.
use ldmneia on Clang < 4 and GCC, ldmiane on Clang >= 4

I don't know why this instruction was renamed, but we have to deal
with it.
clear any weak/soft/phantom references to finalizable objects before queuing

If we don't clear these references, we risk finalizing objects which
can still be reached by one of the special reference types.

It's a bit of a chicken-and-egg problem.  We need to visit finalizable
objects before visiting weak references, since some of the weak
references and/or their targets may become reachable once the
finalizable objects are visited.  However, that ordering means we have
no efficient way of distinguishing between objects which are reachable
from one or more normal GC roots and those which are only reachable
via the finalization queue.  The solution is to clear all weak
references to finalizable objects before visiting them.
fix Call[Static]<type>MethodA float argument marshalling
update static table class reference in updateClassTables

Commit c918cbc added this reference to ensure
sun.misc.Unsafe.getLongVolatile could be implemented efficiently on
32-bit platforms.  However, I neglected to ensure the reference was
updated to point to the final class instance instead of the temporary
one used in parseClass.  This led to extra memory usage and
inconsistent locking behavior, plus broken bootimage builds.
update static table mapping code in bootimage.cpp to match machine.cpp

Commit c918cbc added a reference to ensure
sun.misc.Unsafe.getLongVolatile could be implemented efficiently on
32-bit platforms, but I forgot to update bootimage.cpp to account for
it.
rename package avian.avian_vm_resource to avian.avianvmresource

This package name must match the URL protocol we use for loading
embedded resources, but OpenJDK's URL class won't tolerate underscores
in a protocol name.  Also, I had not updated the names of the native
methods in avian.avianvmresource.Handler, leading to
UnsatisfiedLinkErrors when they were called.
fix PersistentSet.remove side-effect bug

The whole point of PersistentSet is to provide non-destructive write
operations, which means the add and remove methods should have no
effect on previous revisions.  However, a bug in remove caused shared
tree nodes to be modified, corrupting any revisions with which they
were shared.
eliminate call stack recursion in compile method

Some OSes (notably, Windows CE) restrict the size of the call stack
such that recursive compilation of branch instructions can lead to
stack overflow in methods with large numbers of such instructions.  In
fact, a worst-case method could even lead to overflow when the stack
size limit is relatively generous.

The solution is to convert this recursion into iteration with an
explicit stack to maintain state about alternate paths through each
branch.
fix MSVC build regression
preserve all methods in avian.OpenJDK from removal in openjdk.pro

OpenJDK.getDeclaringClass is called from JVM_GetDeclaringClass, so we
need to tell ProGuard to preserve it along with the other method we
had already included.