Commit Graph

2440 Commits

Author SHA1 Message Date
Joshua Warner
3cee8d1a5c Merge pull request #226 from dicej/android-bootimage
fix Android bootimage build
2014-04-13 13:22:37 -06:00
Joshua Warner
2fff3a6e13 Merge pull request #229 from dicej/preBoot
fix broken Android build due to 617bd85
2014-04-11 21:54:34 -06:00
Joshua Warner
77dcb97bf0 Merge pull request #225 from dicej/javahome
fix incorrect EXPORT definition for Windows/x86_64 in boot-javahome.cpp
2014-04-11 21:40:38 -06:00
Joel Dice
f21f11efd6 fix broken Android build due to 617bd85
617bd85 broke the Android build by creating an unresolvable
order-of-operations bug in classpath-android.cpp's
MyClasspath::preBoot method.

The problem is that, while JNIEnv::FindClass is supposed to initialize
the class that it finds, this causes JniConstants::init to indirectly
invoke native methods which are not registered until JNI_OnLoad is
called (which happens after JniConstants::init is called).  However,
if we call JNI_OnLoad first, that causes methods to be invoked which
rely on JniConstants::init having already been run.

I haven't checked to see how Dalvik handles this, but I don't see any
way around the problem besides disabling initialization by
JNIEnv::FindClass until the preBoot phase is complete.  Moreover, it's
dangerous to allow Java code to be invoked so early anyway, since the
VM is not yet fully initialized.
2014-04-11 19:56:52 -06:00
Joel Dice
1b8b27fb6b add expect call to ensure tryAllocateExecutable actually succeeds
For some reason, running Avian under the SVN version of Valgrind
caused mmap to fail, which caused tryAllocateExecutable to return a
null pointer, which led to a non-obvious crash later on.  Adding an
expect to check the result immediately will at least make it obvious
what went wrong.
2014-04-11 19:52:53 -06:00
Joel Dice
a71e75140e fix Android bootimage build
bb86500 was a step in the right direction, but there was a bug that
caused Type_pad fields to be inserted between every other field in for
a derived class when type-maps.cpp was generated, and this led to
miscompilation of e.g. Android's
java.lang.reflect.Constructor.getModifiers.
2014-04-11 19:48:06 -06:00
Joel Dice
8f4ed4dd4f fix incorrect EXPORT definition for Windows/x86_64 in boot-javahome.cpp
We should define EXPORT to be __declspec(dllexport) on Windows
regardless of architecture, not just non-x86_64 arches.  This fixes
errors to to embedded JAVA_HOME files not being found in openjdk-src
builds, e.g. lib/currency.data.
2014-04-11 19:26:56 -06:00
Joshua Warner
f7614bf8a7 Merge pull request #224 from bigfatbrowncat/avian-pack
Properties don't work in some cases
2014-04-10 08:09:18 -06:00
Vasily Litvinov
74209edb7d Replacing strcpy with memcpy - should be slightly faster because we're forced to know strlen, so no need in byte-by-byte copying 2014-04-10 01:02:11 +04:00
Vasily Litvinov
647e22bf81 Fixed memory leak (which triggered asserts in tests) 2014-04-09 19:36:34 +04:00
Vasily Litvinov
5828ef1d46 Fixing property copying 2014-04-09 16:02:48 +04:00
Ilya Mizus
6e3b170393 Trying to solve the properties memory problem 2014-04-09 10:16:53 +04:00
Joel Dice
617bd85578 initialize class in JNIEnv::FindClass
Although the JNI reference documentation does not mention it,
FindClass should initialize the class before it returns it.  That's
what HotSpot does, and that's what we have to do too.

In particular, OpenJDK's
Java_java_net_Inet6AddressImpl_lookupAllHostAddr relies on
Inet6Address's static initializer being run when it is resolved using
FindClass, or else it will crash.
2014-04-08 15:59:00 -06:00
Joshua Warner
e86fce28ec Merge pull request #220 from dicej/unsafe
fix some Unsafe bugs
2014-04-07 15:23:00 -06:00
Joel Dice
ca4f2224d9 Merge pull request #217 from bigfatbrowncat/avian-pack
Some improvements for Android lib core support
2014-04-07 14:51:12 -06:00
Joel Dice
1d9bdf8382 fix some Unsafe bugs
* Unsafe.arrayIndexScale was always returning the native word size,
   due to a thinko on my part

 * Unsafe.getLongVolatile and putLongVolatile did not work for array
   elements on 32-bit systems
2014-04-07 14:41:42 -06:00
Vasily Litvinov
b40a0ef590 Fixing compile error 2014-04-07 23:29:23 +04:00
Vasily Litvinov
5dd25f04ef Ignoring requests to load native conscrypt_jni library - it's linked statically 2014-04-07 23:25:57 +04:00
Joel Dice
8f4c0e78ce clean up System.getProperties and related methods
The behavior of Avian's versions of these methods was egregiously
non-standard, and there were problems with the Android implementations
as well.
2014-04-04 13:43:59 -06:00
Ilya Mizus
66edf1ff4a Fix for https://github.com/ReadyTalk/avian/issues/216 2014-04-04 20:21:16 +04:00
Joel Dice
a7e86e6cd4 implement Unsafe.{get|put}*Volatile 2014-03-31 17:31:28 -06:00
Ilya Mizus
81c8fc20ab Merge remote-tracking branch 'refs/remotes/ReadyTalk/master' into avian-pack 2014-03-26 09:20:38 +03:00
Joshua Warner
56cd1d51e0 fix lzma build 2014-03-25 15:10:24 -06:00
Joel Dice
fd778c2c76 remove redundant interfaces and generalize shift/reset generics
Turns out Function can do the jobs of both CallbackReceiver and
FunctionReceiver, so I've removed the latter two.

Also, shift and reset should work with a combination of types, not
just a single type, so I've expanded their generic signatures.
2014-03-21 07:38:29 -06:00
Joel Dice
fcb7059573 revert unintended change to jnienv.cpp 2014-03-21 07:38:28 -06:00
Joel Dice
ff57447507 fix handling of multiple shifts delimited by a single reset 2014-03-21 07:38:28 -06:00
Ilya Mizus
35b567c778 Merge branch 'master' of https://github.com/ReadyTalk/avian into avian-droid-2 2014-03-20 09:18:20 +04:00
Joel Dice
8740d76154 ensure ClassLoader.getPackage works with all class libraries
There's more work to do to derive all the properties of a given class
from its code source (e.g. JAR file), but this at least ensures that
ClassLoader.getPackage will actually return something non-null when
appropriate.
2014-03-19 11:21:26 -06:00
Ilya Mizus
ffc439ad23 Merge branch 'master' of https://github.com/ReadyTalk/avian into avian-droid-2 2014-03-19 00:17:22 +04:00
Joshua Warner
a368dc0625 remove unused 'audit-codegen' tool 2014-03-16 19:42:03 -06:00
Joshua Warner
c37b13301a remove old unused code
Conflicts:
	include/avian/codegen/lir.h
2014-03-16 19:41:48 -06:00
Ilya Mizus
763c95d98e Replaced printf with __mingw_printf to avoid strange crushes 2014-03-16 00:52:58 +03:00
Ilya Mizus
abc9316702 NativeCrypto added for Windows 2014-03-15 21:21:24 +03:00
Joel Dice
58079887a9 fix broken Class.getDeclar{ed|ing}Classes implementations
classpath-common.h's getDeclaringClass was trying to look up
non-existing classes, which led to an abort, and I don't even know
what Class.getDeclaredClasses was trying to do, but it was ugly and
wrong.
2014-03-14 11:10:54 -06:00
Joshua Warner
56ec7fc1f9 Merge pull request #200 from dicej/stack-signal
fix a few stack walking and signal handling bugs
2014-03-14 10:45:18 -06:00
Joel Dice
918b7828f1 fix StackOverflowError stack walking in tails=true builds
The various Architecture::nextFrame implementations were not walking
the stack correctly when a StackOverflowError was thrown.  The
throwStackOverflow thunk is called before the frame of the most
recently called method has been fully created, and because tails=true
builds use a different calling convention, we need to treat this
situation carefully when building a stack trace or unwinding.
Otherwise, we will skip past all the java frames to the next native
frame, which is what was happening.
2014-03-14 09:59:04 -06:00
Joel Dice
73e60adeab always add a trap instruction after a throw
Tail call and dead code optimizations can cause code after a throw to
be eliminated, which confuses findUnwindTarget because it doesn't know
what code is throwing the exception.  So we need at least one
instruction to follow the call to the throw_ thunk.  Previously, we
only added such an instruction when we knew the throw was the last
instruction in the bytecode, but it turns out there are other cases
where it is needed, including certain try/finally situations.
2014-03-14 09:54:05 -06:00
Joel Dice
7cfbdc8fdb call crash if the signal handler is unable to handle the signal
Otherwise, the OS will just keep asking us to handle the signal in an
infinite loop.
2014-03-14 09:50:10 -06:00
Joshua Warner
7fa8c7ec20 remove unused constants (fixes #198) 2014-03-14 09:06:19 -06:00
Joel Dice
70b5ea6838 Merge pull request #191 from bigfatbrowncat/avian-droid
Android classpath support in Windows
2014-03-12 16:38:37 -06:00
Joel Dice
c0d178d5f1 implement ConcurrentHashMap and AtomicReferenceArray
This is the simplest possible ConcurrentHashMap I could come up with
that works and is actually concurrent in the way one would expect.
It's pretty unconventional, being based on a persistent red-black
tree, and not particularly memory-efficient or cache-friendly.  I
think this is a good place to start, though, and it should perform
reasonably well for most workloads.  Patches for a more efficient
implementation are welcome!

I also implemented AtomicReferenceArray, since I was using it in my
first, naive attempt to implement ConcurrentHashMap.

I had to do a bit of refactoring, including moving some non-standard
stuff from java.util.Collections to avian.Data so I could make it
available to code outside the java.util package, which is why I had to
modify several unrelated files.
2014-03-12 10:44:24 -06:00
Joel Dice
866c057f0d fix Class.getDeclaredMethods
getDeclaredMethods was returning methods which were inherited from
interfaces but not (re)declared in the class itself, due to the VM's
internal use of VMClass.methodTable differing from its role in
reflection.  For reflection, we must only include the declared
methods, not the inherited but un-redeclared ones.

Previously, we saved the original method table in
ClassAddendum.methodTable before creating a new one which contains
both declared and inherited methods.  That wasted space, so this patch
replaces ClassAddendum.methodTable with
ClassAddendum.declaredMethodCount, which specifies how many of the
methods in VMClass.methodTable were declared in that class.

Alternatively, we could ensure that undeclared methods always have
their VMMethod.class_ field set to the declaring class instead of the
inheriting class.  I tried this, but it led to subtle crashes in
interface method lookup.  The rest of the VM relies not only on
VMClass.methodTable containing all inherited interface methods but
also that those methods point to the inheriting class, not the
declaring class.  Changing those assumptions would be a much bigger
(and more dangerous in terms of regression potential) effort than I
care to take on right now.  The solution I chose is a bit ugly, but
it's safe.
2014-03-10 08:51:00 -06:00
Joshua Warner
492294bfe6 Merge pull request #189 from jentfoo/interface_improvements
interface improvements and LockSupport implementation
2014-03-07 20:48:40 -07:00
Joel Dice
25d69f38ee match Java's schizophrenic concept of inner class access modifiers
An inner class has two sets of modifier flags: one is declared in the
usual place in the class file and the other is part of the
InnerClasses attribute.  Not only is that redundant, but they can
contradict, and the VM can't just pick one and roll with it.  Instead,
Class.getModifiers must return the InnerClasses version, whereas
reflection must check the top-level version.  So even if
Class.getModifiers says the class is protected, it might still be
public for the purpose of reflection depending on what the
InnerClasses attribute says.  Crazy?  Yes.
2014-03-06 16:17:43 -07:00
Ilya Mizus
57f50ca7ea Some small cleanup before pull request 2014-03-06 18:33:23 +04:00
Mike Jensen
d94fc8f009 Fix for travis build failure for needing to initialize the new field in Thread. 2014-03-04 11:21:14 -07:00
Joel Dice
0a89683eff move Unsafe.get{Object|Int}Volatile from classpath-openjdk.cpp to builtin.cpp
This makes them available in all class libraries, not just the OpenJDK
library.  Note that I've also removed the unecessary idle statements,
per ab4adef.
2014-03-03 14:55:49 -07:00
Ilya Mizus
301fb1ae13 Refactoring 2014-02-28 11:18:48 +04:00
Joel Dice
1cd822b23e Merge pull request #180 from joshuawarner32/move-allocator
Move allocator & Slice into util
2014-02-27 08:55:24 -07:00
Ilya Mizus
6df337b0c4 Added errno descriptions for Android classpath on Windows 2014-02-27 01:56:17 +03:00