Commit Graph

2777 Commits

Author SHA1 Message Date
Joel Dice
3912f2c0e4 Merge pull request #171 from joshuawarner32/master
Flatten "vm" dir and split signal handling out of vm::System
2014-02-25 14:11:09 -07:00
Joel Dice
c021329d0d add Avian_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8
Android's class library uses this to find out whether the VM supports
compareAndSwapLong natively.  Avian does on all platforms, so we just
return true.
2014-02-24 14:16:40 -07:00
Joshua Warner
f1806ce90e fix #172, regression in compiling shift operations 2014-02-24 13:24:14 -07:00
Joshua Warner
bc9f7d2f87 refactor SignalRegistrar interface 2014-02-21 23:37:32 -07:00
Joshua Warner
ca7d51edb3 add crash function to match the semantics of System::abort 2014-02-21 23:37:28 -07:00
Joshua Warner
730dade53e break out signal handling from System 2014-02-21 23:36:40 -07:00
Joshua Warner
5ffdfecdc2 remove vm from code paths, to match namespacing 2014-02-21 13:32:28 -07:00
Ilya Mizus
66f25193df OsConstants removed from blacklist 2014-02-21 23:14:07 +03:00
Ilya Mizus
a1d98280ab Merge remote-tracking branch 'refs/remotes/ReadyTalk/master' into avian-droid 2014-02-21 03:53:12 +03:00
Ilya Mizus
ff4c07f05b Changes to build on my libcore version 2014-02-21 03:50:06 +03:00
Joel Dice
1735a7976a do not omit calls to empty methods which may trigger class initialization
There's a small optimization in compileDirectInvoke which tries to
avoid generating calls to empty methods.  However, this causes
problems for code which uses such a call to ensure a class is
initialized -- if we omit that call, the class may not be
initialized and any side effects of that initialization may not
happen when the program expects them to.

This commit ensures that the compiler only omits empty method calls
when the target class does not need initialization.  It also removes
commented-out code in classpath-openjdk.cpp which was responsible for
loading libmawt proactively; that was a hack to get JogAmp to work
before we understood what the real problem was.
2014-02-10 08:40:14 -07:00
Joel Dice
66bd7e0814 use "lzma." prefix for LZMA-compressed embedded jars
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.
2014-01-18 19:41:43 -07:00
Joel Dice
2b1177039e use armv7 memory barriers by default
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!
2014-01-10 17:32:54 -07:00
Joel Dice
bb86500155 fix Method.getModifiers crash due to bootimage miscompile
When calculating field offsets in the bootimage generator, we failed
to consider alignment at inheritence boundaries (i.e. the last field
inherited by from a superclass should be followed by enough padding to
align the first non-inherited field at a machine word boundary).  This
led to a mismatch between native code and Java code in terms of class
layouts, including that of java.lang.reflect.Method.
2014-01-07 09:04:13 -07:00
Joshua Warner
233a12bf2b remove unnecessary variable initialization 2014-01-03 14:04:57 -07:00
Joshua Warner
6d5f511d04 fix silly error in recent compiler refactor 2014-01-03 12:23:36 -07:00
Joel Dice
708519d812 implement Unsafe.objectFieldOffset for the Avian class library 2014-01-03 11:13:21 -07:00
Joel Dice
789c36a459 move Unsafe.putObjectVolatile and putOrderedObject implementations
This makes them available to all class libraries, not just OpenJDK.
2014-01-02 18:00:53 -07:00
Joel Dice
cc5b58725a implement Unsafe.putOrderedLong and putVolatileLong
The former just defers to the latter for now, since it provides
strictly weaker guarantees.  Thus it's correct to use full
volatile-style barriers, though not as efficient as it could be on
some architectures.
2014-01-02 17:49:56 -07:00
Joel Dice
ab4adef373 remove obsolete idle statement from Unsafe.getLongVolatile
Now that Josh has fixed the busy block bug (see commit 10d15d2), we
don't need this anymore.
2014-01-02 17:47:42 -07:00
Joel Dice
e19bdda13e fix uninitialized value warning in compile.cpp
Clang was complaining that newIp might be used uninitialized at the
bottom of our giant, unstructured compile loop, so I initialized it
with a bogus value, which means it will at least fail consistently if
Clang is right and there really is a path by which that code is
reached without otherwise initializing newIp.
2014-01-02 17:44:33 -07:00
Joshua Warner
fa65c67fbf Extract independent runtime thunks into their own file 2013-12-18 22:46:58 -07:00
Joshua Warner
f1c6b97373 Reformat a few extra-long lines 2013-12-18 22:25:23 -07:00
Joshua Warner
b3d6f5d94d Remove redundancy in compiling jump operations 2013-12-18 22:20:18 -07:00
Joshua Warner
ac984775a5 Remove redundancy in compiling arithmetic operations 2013-12-18 22:03:42 -07:00
Joshua Warner
eab36b3a23 Remove boilerplate code (nullaryOp methods in Compiler) 2013-12-18 16:51:20 -07:00
Joshua Warner
bd7b66a898 Remove boilerplate code (unaryOp methods in Compiler) 2013-12-18 16:43:15 -07:00
Joshua Warner
07d0f1172f Remove boilerplate code (float binaryOp methods in Compiler) 2013-12-18 15:22:38 -07:00
Joshua Warner
d5c1a094ca Remove boilerplate code (general binaryOp methods in Compiler) 2013-12-18 15:11:30 -07:00
Joshua Warner
b66a8549fd Remove boilerplate code (jump* methods in Compiler) 2013-12-18 14:38:05 -07:00
Joel Dice
38477c113c fix iOS 7 build using latest Xcode
It looks like the iOS 7 SDK doesn't have GCC anymore, so we need to
use clang instead.  Also, thread_act.h and thread_status.h have moved,
so I updated arm.h accordingly.  That might break the build for older
SDKs, but I don't have one available at the moment.  If it does break,
I'll fix it.
2013-12-18 11:10:04 -07:00
Joel Dice
15906ddb12 fix build regression on platforms with no native 64-bit CAS
Unsafe.compareAndSwapLong was moved from classpath-openjdk.cpp to
builtin.cpp, but the fieldForOffset helper function was not, which
only caused problems when I tried to build for ARM.  This commit moves
said helper function, along with Unsafe.getVolatileLong, which also
uses it.
2013-12-18 11:06:15 -07:00
Joel Dice
dae1f81d27 Merge pull request #138 from soc/topic/unsafe-compareAndSwap
Move Unsafe.compareAndSwapLong from classpath-openjdk.cpp to builtin.cpp
2013-12-18 08:35:01 -08:00
Simon Ochsenreither
55e9923ee6 Move Unsafe.compareAndSwapLong from ...
... classpath-openjdk.cpp to builtin.cpp.
2013-12-18 05:19:45 +01:00
Joshua Warner
0645b0e4cf prevent busywait loops from blocking the VM in interpret mode 2013-12-13 11:48:26 -07:00
Joshua Warner
0340be23ce make sure a busy-waiting loop can't block the GC (and hence the whole VM) 2013-12-13 10:39:36 -07:00
Joshua Warner
06432253ba consolidate many implicit list types into one 2013-12-11 10:54:50 -07:00
Joel Dice
19274ee3d6 Merge pull request #129 from joshuawarner32/openjdk-osx10.9-build-fix
Openjdk osx10.9 build fix
2013-12-07 19:42:08 -08:00
Joshua Warner
773417ab2b fix openjdk-src build failures on osx 10.9 2013-12-07 16:43:18 -07:00
Joshua Warner
9a899a2e4a fix FileInputStream for newer openjdk7 versions 2013-12-07 16:22:08 -07:00
Joel Dice
7056315c18 fix various Android test suite regressions and add more reflection tests
Most of these regressions were simply due to testing a lot more stuff,
esp. annotations and reflection, revealing holes in the Android
compatibility code.  There are still some holes, but at least the
suite is passing (except for a fragile test in Serialize.java which I
will open an issue for).

Sorry this is such a big commit; there was more to address than I
initially expected.
2013-12-06 18:48:47 -07:00
Joel Dice
abe8bc6fda fix exception wrapping for Method.invoke and static initializers
Method.invoke should initialize its class before invoking the method,
throwing an ExceptionInInitializerError if it fails, without wrapping
said error in an InvocationTargetException.

Also, we must initialize ExceptionInInitializerError.exception when
throwing instances from the VM, since OpenJDK's
ExceptionInInitializerError.getCause uses the exception field, not the
cause field.
2013-12-05 22:28:13 -07:00
Joshua Warner
8cda2446d5 implement sun.misc.Unsafe.throwException 2013-12-05 20:28:08 -07:00
Johannes Schindelin
18aeeae0e8 Implement Runtime#{free,total}Memory()
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-12-04 15:19:06 -06:00
Joshua Warner
2800ffe826 rename JNIEXPORT to AVIAN_EXPORT in common.h, to avoid conflicting with jni.h 2013-11-08 08:35:17 -07:00
Joshua Warner
3c1afdd272 make jni.h and avian/machine.h non-interfering 2013-11-07 19:15:31 -07:00
Joshua Warner
d0d4f600dc Merge pull request #94 from dscho/serialization
Implement Java-compatible serialization
2013-11-06 08:49:14 -08:00
Johannes Schindelin
c78923d717 ObjectInputStream: add rudimentary support for objects
This is by no means a complete support for the deserialization compliant
to the Java Language Specification, but it is better to add the support
incrementally, for better readability of the commits.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-11-06 09:10:51 -06:00
Johannes Schindelin
efb3ef9b51 Initialize the context class loader to the app class loader
Previously, we initialized it to the boot class loader, but that is
inconsistent with Java; if compiling against OpenJDK's class library,
the context class loader is therefore initialized to the app class
loader, too.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-11-06 09:07:58 -06:00
Johannes Schindelin
dba8d39e63 Implement Class#getDeclaredClasses
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-11-06 09:07:58 -06:00
Joshua Warner
790fcff73e Merge pull request #89 from dscho/get-resources
Support ClassLoader#getResources with multiple class path elements
2013-11-04 16:29:40 -08:00
Johannes Schindelin
0602d4a447 Consider all class path elements in SystemClassLoader#findResources
The findResources method is supposed to enumerate all the class path
elements' matching paths' URLs, but we used to stop at the first one.

While this is good enough when the system class path contains only a
single .jar file, since b88438d2(sketch of JAR support in Finder)
supports more than a single .jar file in the class path.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-11-04 16:49:31 -06:00
Johannes Schindelin
1864180ea7 Teach Finder to find more than just the first matching element
When the system class path contains more than one .jar, it is quite
concievable that, say, 'META-INF/MANIFEST.MF' can be found in multiple
class path elements.

This commit teaches the working horse of class path inspection, the
Finder class, how to continue the search at a given state.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-11-04 16:44:52 -06:00
Geoff Nixon
69ea1f5721 Bugfixes for Mac OS X, etc. 2013-10-31 01:35:56 -07:00
Johannes Schindelin
0ca8601777 Fix getClass().getComponentType() for higher-dimensional arrays
When creating an object array with more than two dimensions, the
component type was erroneously set to the base type, not the array
type of one less dimension.

This prevented Collection<Class[]>#toArray(Class[][]) from working
properly.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
2013-10-25 15:31:54 -05:00
Joshua Warner
4285d84406 fix windows.cpp compile for newer versions of mingw 2013-09-11 09:30:35 -06:00
Joel Dice
c06dd28ea0 fix Android classpath build for iOS
This mainly involved reworking the makefile to avoid conflating
Darwin/ARM builds with iOS, since we may also want to build for the
iOS Simulator, which is i386.

Note that I was only able to test this on the Simulator, since I don't
have a real iOS device to test with.  Sorry if I broke something; if
so, please fix it :)
2013-07-31 15:20:32 -07:00
frustaci
a6440375ca Update x86.S
GCC now assumes by default that the stack is aligned to a 16-byte boundary in Linux x86, so let's do our part to honour that. :)
Otherwise native code that depends on the stack to be aligned to 16 bytes would seg fault (like SSE).
https://groups.google.com/forum/#!topic/avian/SyCl-Jfw2U8
2013-07-28 10:39:55 -03:00
Mike Keesey
aab1b6e087 Adding another possible case for addThread to expect. One common case that triggers is is when both arguments to addThread are the same thread (such as the call from attachThread). SWT on darwin seems to do this for dialog boxes. 2013-07-14 15:59:43 -06:00
Joel Dice
82577d742f fix Android classpath build
Hopefully it will stay fixed this time, since we now specify commit
hashes for each dependency which are known to work.
2013-07-05 14:36:16 -06:00
Joel Dice
a9d9bc5d20 fix Clang warnings 2013-07-03 13:33:46 -07:00
Joel Dice
87b02eb949 update copyright years
Previously, I used a shell script to extract modification date ranges
from the Git history, but that was complicated and unreliable, so now
every file just gets the same year range in its copyright header.  If
someone needs to know when a specific file was modified and by whom,
they can look at the Git history themselves; no need to include it
redundantly in the header.
2013-07-02 20:52:38 -06:00
Joel Dice
b3cb20d6eb JVM_GetDeclaredClasses and JVM_GetClassInterfaces should return instances of Class[], not Object[] 2013-06-06 18:37:05 -06:00
Joshua Warner
de21913d13 fix linux->darwin cross-compile
There were two issues: the linux->darwin cross compiler is more stringent
about unused variables, and the makefile specified flags for building ON
darwin that were actually applicable whenever we are building FOR darwin.
2013-06-04 13:32:22 -06:00
Joel Dice
84e23659f9 remove unecessary PROTECT statements
Since there's no possibility of garbage collection during the
lifetimes of these local variables, there's no need to protect the
references.
2013-05-14 14:33:37 -06:00
Simon Ochsenreither
e088fa07ae Make exception messages match the ones from OpenJDK/Android
This commit changes the exception message format of
ClassCastException and CloneNotSupportedException.
2013-05-14 15:04:34 +02:00
Joel Dice
4a69496ab4 perform any necessary argument conversion in JVM_NewInstanceFromConstructor
We must use the same utility function as JVM_InvokeMethod to ensure
that primitive arguments are unboxed when necessary.
2013-05-13 14:27:39 -06:00
Joel Dice
4b0bbd85e8 fix sun.misc.Unsafe.arrayIndexScale implementation
The original implementation was based on the assumption that the
passed class would be the array element type, whereas it is actually
the array type itself.
2013-05-13 14:25:59 -06:00
Joel Dice
6507150246 wait until all non-daemon threads exit before invoking the class library shutdown method
Running the shutdown method prematurely can cause deadlock in
OpenJDK's AWT implementation and may have other nasty effects besides
that.
2013-05-13 13:17:42 -06:00
Joel Dice
fcfdd6be3a initialize the class if necessary when the "new" operator is invoked
This is one of the conditions specified in
http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.4.1,
which I had forgotten about.
2013-05-13 13:12:58 -06:00
Joel Dice
7e2d265fb9 filter flags argument to JVM_Open
The class library may pass non-standard flags to JVM_Open which will
confuse the OS if we pass them through, so we must filter them out.
2013-05-13 13:11:12 -06:00
Joel Dice
6d5fbdeb7b provide stub for JVM_UnloadLibrary
It may leak file handles under certain circumstances to do nothing in
JVM_UnloadLibrary, but, for now, an empty implementation is more
useful than one that aborts the process.
2013-05-13 13:08:40 -06:00
Joel Dice
419ac24963 don't load libmawt ahead of time when starting the VM
At one point, loading libmawt ahead of time was necessary to make AWT
work, but recent versions of OpenJDK seem to take care this from Java
code, in which case loading it ahead of time causes trouble, so we
comment it out for now until we exactly when it's needed.
2013-05-13 13:05:13 -06:00
Joel Dice
435dbbc874 add stub implementation of JVM_CurrentClassLoader 2013-05-10 11:29:20 -06:00
Joel Dice
529c7a17fb add support for the RuntimeVisibleParameterAnnotations attribute 2013-04-30 22:55:59 -06:00
Joel Dice
b1840a297d implement Unsafe.{put|get}Char 2013-04-30 22:54:45 -06:00
Joel Dice
af9e162827 fix OpenJDK build regression due to recent Android classpath refactoring 2013-04-30 22:53:56 -06:00
Joel Dice
bbc5d7fb50 only initialize class when necessary to avoid deadlock
Previously, we would attempt to initialize a class (e.g. call its
static initializer) whenever a method in that class was called, as
well as in any of the cases listed in
http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.4.

However, the above approach may lead to deadlock in an app which
relies on being able to call non-static methods in parallel with a
static initializer invocation in the same class.  Thus, this commit
ensures that we initialize classes only in the cases defined by the
standard.
2013-04-30 22:48:43 -06:00
Joel Dice
ed96693166 do not clear interrupted flag in Unsafe.park
Since park does not throw InterruptedException, we must leave the flag
set if we are interrupted while parked so that
e.g. AbstractQueuedSynchronizer can itself throw an exception if
appropriate.
2013-04-30 22:45:08 -06:00
Joel Dice
4e12847858 code rearrangment to improve state of Android libcore tests
This mainly moves several sun.misc.Unsafe method implementations from
classpath-openjdk.cpp to builtin.cpp so that the Avian and Android
builds can use them.

It also replaces FinalizerReference.finalizeAllEnqueued with a no-op,
since the real implementations assumes too much about how the VM
handles (or delegates) finalization.
2013-04-23 13:47:15 -06:00
Joel Dice
dfdd1f6e6c move call to Classpath::shutDown
We must be in the Active state, not the Exclusive state when calling
this method since it may execute arbitrary Java code.  This fixes an
assertion failure in makeNew.
2013-04-22 21:52:27 -06:00
Joel Dice
8995db69d2 fix element spec calculation for multidimensional primitive arrays
The element class for e.g. [[[I should be [[I, not [I.
2013-04-22 21:28:25 -06:00
Joel Dice
023787d121 fix special case of exception handler table translation
scalac may generate bytecode such that an exception is thrown within
the bounds of a handler for that exception such that the throw is the
last instruction in the method, which we weren't handling properly.
2013-04-22 21:25:15 -06:00
Joel Dice
a18452f6c9 implement JVM_ConstantPoolGetFloatAt
This commit also simplifies JVM_ConstantPoolGetDoubleAt, which cannot
throw an exception and thus need not go through vmRun.
2013-04-22 21:23:32 -06:00
Joel Dice
e3fe9099a2 filter InnerClasses attribute for relevant classes in JVM_GetDeclaredClasses
The InnerClasses attribute may have entries for classes declared
inside classes we don't care about, so we must check each entry's
outer class reference and make sure it matches the one we do care
about.
2013-04-22 21:20:21 -06:00
Joel Dice
63ee3ab0a2 throw CloneNotSupportedException if Object.clone called on non-Cloneable 2013-04-22 21:19:01 -06:00
Joel Dice
e0ceaa5f43 avoid allocating new memory in hashMapRemove when GCing
This ensures that we don't abort when running an internal finalizer
that removes from a hash map.
2013-04-22 21:17:31 -06:00
Joel Dice
68c3b241ce handle sign extension of constants of various lengths
This is a generalization of 9918ea6 which handles 8-bit and 16-bit as
well as 32-bit values.
2013-04-22 21:15:49 -06:00
Joel Dice
d8729a7a8d fix zero-extension of constants in x86 compiler
scalac may emit a ldc followed by an i2c, whereas javac does the
conversion (including zero extension if necessary) at compile time.
This commit ensures we handle the i2c case properly.
2013-04-22 19:00:54 -06:00
Joel Dice
f38c4e25c6 fix array class name length calculation in invoke
The original calculation ommitted the last character, changing
e.g. "[I" into "[".
2013-04-22 18:57:26 -06:00
Joel Dice
e9a8aa2e65 set boot library if run as java or javac command
If sun.java.command or sun.java.launcher are set, then the VM is being
loaded from e.g. libjvm.so, not as a stand-alone executable.  This
commit allows libjvm.dylib to be used with OpenJDK's java command on OS
X.
2013-04-19 18:28:20 -07:00
Joel Dice
a098926547 run Shutdown.shutdown on exit when using OpenJDK library
The OpenJDK library wants to track and run the shutdown hooks itself
rather than let the VM do it, so we need to tell it when we're
exiting.

Also, in machine.cpp we need to use only the modifiers specified in
the InnerClasses attribute for inner classes rather than OR them with
the flags given at the top level of the class file.
2013-04-19 13:00:47 -06:00
Joel Dice
9918ea6cdd fix sign extension from constant to register on x86
scalac may generate a ldc followed by an l2i, whereas javac always
seems to condense this into a single ldc_w.  The former exposed a bug
in the JIT compiler which we never hit with javac-generated bytecode.
2013-04-18 11:27:05 -06:00
Joel Dice
e6b6edfc25 ignore instance variable for static method invocations 2013-04-18 11:25:29 -06:00
Joel Dice
b4c3eea0f1 set InvocationTargetException target
When using the OpenJDK classpath, the target exception and the
Throwable cause are two different fields; we must set them both.
2013-04-18 11:23:59 -06:00
Joel Dice
81d7786716 fix Class.getModifiers for inner classes and implement JVM_GetDeclaringClass and JVM_GetEnclosingMethodInfo properly
This fixes a couple of tests in the Scala test suite
(run/reflection-modulemirror-toplevel-badpath.scala and
run/reflection-constructormirror-nested-good.scala).
2013-04-17 15:12:58 -06:00
Joel Dice
aa513c2c1d set default file.encoding to UTF-8 in classpath-openjdk.cpp
This default makes more sense than ASCII, which is what it had been.
2013-04-16 19:35:21 -06:00
Joel Dice
9f8369c5cc enter exclusive state in destroyJavaVM
This is necessary to ensure that new threads do not start while we're
shutting down (except for the ones that we start to run the shutdown
hooks), and that the shutdown hook threads can be safely started (it
is not safe to start threads from e.g. an idle state, and an assertion
will fail if we do).
2013-04-15 12:37:23 -06:00
Joel Dice
2c902a26ec handle non-ASCII strings properly in MyClasspath::makeString 2013-04-09 18:44:54 -06:00
Joel Dice
dca75df926 add vmfPrintTrace method for dumping traces to a specific stream 2013-04-09 18:44:34 -06:00
Joel Dice
83670d1df7 implement JVM_ConstantPoolGetLongAt 2013-04-09 18:44:34 -06:00
Joel Dice
73547db737 throw IllegalArgumentException in JVM_InvokeMethod on type mismatch 2013-04-09 18:44:34 -06:00
Joel Dice
49d8ccb1bd update Context::executableSize after allocating objectPool
This ensures that, if an exception is thrown later but before the
method has been fully compiled, we will know exactly how much memory
to free.  Previously, we would abort when trying to free the wrong
amount due to an assertion failure.
2013-04-09 18:43:46 -06:00
Joel Dice
8c1419fb89 jump to target if JumpIfFloatNotEqual comparison is unordered
A dcmpl or dcmpg followed by an ifneq should take the branch if an NaN
is involved.
2013-04-04 20:02:49 -06:00
Joel Dice
b436bd460a fix NaN handling in floating point comparisons 2013-04-03 16:19:33 -06:00
Joel Dice
cc8d655762 use %x,%x format for listing start and end addresses
This matches the format expected by recent versions of GDB's
disassemble command.
2013-04-03 16:07:06 -06:00
Joel Dice
13d128c7be look for DirectByteBuffer, not ReadWriteDirectByteBuffer
The name of the class we need to use in makeDirectByteBuffer has
changed in Android's libcore, so now we use the new name.
2013-03-29 14:09:43 -06:00
Joel Dice
4777d1b6be fix Windows openjdk-src build regression 2013-03-26 09:53:47 -06:00
Joel Dice
e8a1900c2b fix openjdk-src build regression 2013-03-26 08:30:26 -06:00
Joel Dice
a648787e11 update method table for all classes in updateClassTables
Previously we only updated this table for non-interfaces, but
interfaces may have methods which need updating too.
2013-03-16 10:54:35 -06:00
Joel Dice
bad3a7979c fix parameter ordering in windows.cpp's MySystem::visit
It's amazing to me that ebp and esp have been swapped for over three
years without anybody noticing.  It was dumb luck that the Trace test
(which is designed to catch just such a thing) happened to fail when I
ran the whole suite, and further investigation revealed that it was
failing maybe five percent of the times it was run.  Now we know why.
2013-03-15 16:08:55 -06:00
Joel Dice
54b560b149 fix Windows 32-bit bootimage build regression 2013-03-15 14:35:29 -06:00
Joel Dice
c80ffa041d ensure that we can intercept static Java methods in bootimage build
Timezone code was broken in the Android class library bootimage build
because the code we use to intercept loading the tzdata file wasn't
working.  The reason is have no way of intercepting static methods at
runtime in the bootimage build without telling the bootimage-generator
we're going to do it ahead of time.  So now we do tell it so.

This commit also removes the need to intercept Thread methods since we
can update Thread.vmThread in VMThread.create instead.
2013-03-15 13:28:01 -06:00
Joel Dice
3309a9f4ad ensure that array classes implement Cloneable and Serializable in bootimage build 2013-03-15 13:26:18 -06:00
Joel Dice
d5504d8f58 first step towards supporting Android class library on Windows
A majority of the tests are passing, but more work is needed to get
them all to pass.
2013-03-14 15:33:05 -06:00
Joel Dice
5d3dc707cb briefly enter idle state in get*Volatile
In order for a thread to enter the "exclusive" state such that no
other threads are active in the VM, it must wait for all active
threads to enter the "idle" state.  In order for this to happen in a
timely manner, threads must check frequently to see if a thread is
waiting to enter the exclusive state.  These checks happen at every
memory allocation, wait, sleep, native call, etc.  However, if a
thread is in a busy loop that does none of those things, it will block
any other thread from entering that state.

The proper way to address this is to detect such loops (or tail
recursion in tail-call-optimized builds) at compile or interpret time
and insert explicit checks.  This hasn't been a high priority thus
far, though, since we had yet to encounter such code in the wild.

Now, however, we find that scala.concurrent.forkjoin.ForkJoinPool.scan
(and possibly some versions of java.util.concurrent.ForkJoinPool.scan,
on which we assume the former is based) has just such a loop.
Fortunately, that loop calls Unsafe.getObjectVolatile, which the VM
implements and thus can treat as a checkpoint.  That's the workaround
we use in this patch.
2013-03-08 18:21:12 -07:00
Joel Dice
ff19ab6c13 add avian.trace.port property
Setting this property (e.g. -Davian.trace.port=5555) will cause the VM
to start an extra daemon thread which listens on the specified TCP
port for incoming connections and dumps stack traces for all running
threads to that socket.  You can retrieve that dump using e.g. netcat:

  nc localhost 5555
2013-03-08 14:47:27 -07:00
Joel Dice
3c44cdc50b fix unintentionally retained finalizables and improve low mem performance
Objects which are eligable for finalization must be retained until
after their finalize methods are called.  However, the VM must
determine the entire set of such objects before retaining any of them;
otherwise the process of retaining a given object may cause others to
become reachable and thus be considered ineligible for finalization
even though they are only reachable via other finalizable objects.
The end result of this mistake is that only a few of the objects which
are finalizable will be recognized at each GC cycle, so it requires
many such cycles to find them all, and if new objects become
finalizable at a faster rate, the VM will never catch up and
eventually run out of memory.

This patch fixes the above mistake and also includes tuning to
minimize the need for GC in low memory situations.
2013-03-07 20:32:02 -07:00
Joel Dice
ca84dd26f1 fix System.loadLibrary for OpenJDK tails=true build 2013-03-05 15:43:49 -07:00
Joel Dice
585186f7d3 avoid allocating a new gen2 heap larger than the available heap capacity 2013-03-05 09:35:21 -07:00
Joel Dice
84f99f0dca remove thread from thread group on termination
In the OpenJDK library, ThreadGroup maintains an array of all Threads
in that group, so the VM must explicitly remove threads as they exit
or else neither they nor any objects they reference will be eligable
for GC.
2013-03-05 09:06:19 -07:00
Joel Dice
c6185c8034 remove "low memory" heuristic from heap code
The original goal was to minimize memory usage by garbage collecting
more frequently and more comprehensively as we got closer to the heap
limit.  In practice, though, this just slowed the VM to a crawl as
memory pressure increased.  If an app really wants to use a lot of
memory, the VM shouldn't penalize it aside from throwing an
OutOfMemoryError if it exceeds the limit.
2013-03-04 16:02:59 -07:00
Joel Dice
3209f8750a fix heapdump build 2013-03-04 16:00:35 -07:00
Joel Dice
5d730fe8fa various tweaks to get hello-ios working with the Android library 2013-03-04 14:24:41 -07:00
Joel Dice
b3978c0a0a fix msvc build 2013-03-04 11:09:59 -07:00
Joel Dice
a142a46d41 Merge remote-tracking branch 'jw/master' 2013-03-04 09:37:22 -07:00
Zsombor Gegesy
7726bf49de fix lzma includes 2013-03-02 22:26:24 +01:00
Joshua Warner
5b973c8fc3 fix bootimage build 2013-03-01 16:27:41 -07:00
Joshua Warner
add029ad3c fix powerpc build
Evidently, the powerpc gcc compiler feels it necessary to #define powerpc to 1. Seriously?  SERIOUSLY????
2013-02-28 16:41:44 -07:00
Joshua Warner
0b01dd565a fix multiple-include-of-stdint errors 2013-02-28 15:57:09 -07:00
Joshua Warner
9327043bc5 Merge branch 'master' into wip
Conflicts:
	makefile
	src/codegen/arm/assembler.cpp
	src/codegen/powerpc/assembler.cpp
	src/codegen/x86/assembler.cpp
2013-02-27 19:27:07 -07:00
Joel Dice
5e2d00010b move headers from src to src/avian
This is necessary to avoid name conflicts on various platforms.  For
example, iOS has its own util.h, and Windows has a process.h.  By
including our version as e.g. "avian/util.h", we avoid confusion with
the system version.
2013-02-27 13:33:29 -07:00
Joel Dice
44defda878 fix unused parameter error 2013-02-27 12:10:10 -07:00
Joel Dice
3c1db46c57 don't throw an error if the mawt library can't be loaded 2013-02-27 11:34:43 -07:00
Joel Dice
e6a46fc014 various fixes to get avian-swt-examples working with the Android class library 2013-02-26 16:24:02 -07:00
Joel Dice
025b628894 Merge remote-tracking branch 'github/master' into dicej 2013-02-25 16:43:09 -07:00
Joel Dice
0bb0b1ec0e enable use of Android class library on 64-bit systems
This involved patching libcore.git to make it 64-bit safe.
2013-02-25 16:41:46 -07:00
Joel Dice
1310fbbe4f reset alignment at inheritence boundary when iterating over fields
In type-generator, we were incorrectly calculating field offsets where
a class inherits from another class whose last field has a natural
alignment which is different from the native word size.  Surprisingly,
this only popped up when I built using the Android class library on a
64-bit system.
2013-02-25 16:37:46 -07:00
Joel Dice
fddd3ec49d fix openjdk-src build regression due to RUNTIME_ARRAY changes 2013-02-25 10:38:06 -07:00
Joshua Warner
4d38873096 begin merging target assembler multimethod code 2013-02-24 22:38:58 -07:00
Joshua Warner
82eec28856 rename x86 Offset for consistency with arm and powerpc OffsetPromise 2013-02-24 20:48:06 -07:00
Joshua Warner
d2caf50772 fix debug build 2013-02-24 16:03:19 -07:00
Joshua Warner
4c8b593539 break Architecture out of Assembler 2013-02-23 23:03:01 -07:00
Joshua Warner
56625b89d8 group x86, arm, and powerpc target directories into 'target' 2013-02-23 22:47:52 -07:00
Joshua Warner
3d1ae1d517 fix include-what-you-use violations in x86 assembler 2013-02-23 22:29:58 -07:00
Joshua Warner
900b447e27 further break out powerpc assembler 2013-02-23 22:29:03 -07:00
Joshua Warner
73dda9c26e begin splitting out powerpc assembler 2013-02-23 22:26:48 -07:00
Joshua Warner
22d6ed1bec further split out arm assembler 2013-02-23 22:25:15 -07:00
Joshua Warner
fd59e1e08d begin splitting out arm assembler 2013-02-22 20:47:56 -07:00
Joel Dice
686c2352c1 all tests now pass for Android class library build 2013-02-22 17:23:59 -07:00
Joel Dice
0a4a04cc09 Merge remote-tracking branch 'github/master' into dicej 2013-02-22 17:13:10 -07:00
Joshua Warner
fc84f62a65 prevent garbage collection as vm shuts down 2013-02-22 16:33:07 -07:00
Joel Dice
b32dfb674c fix merge fallout (take 2) 2013-02-22 14:54:13 -07:00
Joel Dice
5e65468fef fix merge fallout 2013-02-22 14:50:15 -07:00
Joel Dice
9060a31348 Merge remote-tracking branch 'github/master' into dicej
Conflicts:
	src/classpath-openjdk.cpp
2013-02-22 14:43:20 -07:00
Joel Dice
d152f8cf74 fix openjdk build 2013-02-22 14:41:24 -07:00
Joel Dice
2f549dd3a3 fix RUNTIME_ARRAY_BODY regressions in classpath-openjdk.cpp 2013-02-22 14:20:09 -07:00
Joel Dice
8546ca5670 fix Avian classpath build 2013-02-22 11:55:01 -07:00
Joel Dice
201473cf87 more work on Android classpath port 2013-02-22 11:06:49 -07:00
Joshua Warner
d1a149a0a1 audit-codegen prototype working 2013-02-21 21:57:53 -07:00
Joshua Warner
aaa076f1df move arg-parser.h to include 2013-02-21 20:14:37 -07:00
Joshua Warner
fe7bb5e640 Merge branch 'master' into wip
Conflicts:
	makefile
2013-02-21 19:33:38 -07:00
Joshua Warner
a9e2984aaf fix arm and powerpc build 2013-02-21 16:51:31 -07:00
Joshua Warner
68d28eab2e insert RUNTIME_ARRAY_BODY to fix windows.cpp 2013-02-21 16:29:19 -07:00
Joshua Warner
af0e7767eb Merge branch 'master' of github.com:ReadyTalk/avian
Conflicts:
	makefile
2013-02-21 16:23:22 -07:00
Joshua Warner
ab9f9550cf move tokenizer.h to include/avian/util/string.h, merge in the String declaration from object-writer/tools.h 2013-02-21 16:18:20 -07:00
Joel Dice
42d39b1af1 more Android class library work 2013-02-21 15:37:17 -07:00
Joel Dice
204bbc134d fix invalid size calculation in ReleaseStringUTFChars 2013-02-21 15:36:01 -07:00
Joshua Warner
32044637cd move bootimage generator to src/tools 2013-02-21 13:15:58 -07:00
Joshua Warner
186a3993b5 move system implementations to src/vm/system/ 2013-02-21 13:11:29 -07:00
Joshua Warner
05b90b6544 begin splitting up type-generator 2013-02-21 07:51:42 -07:00
Joshua Warner
810a067613 move java-specific declarations out of common.h 2013-02-20 22:14:18 -07:00
Joshua Warner
48691bb50a move stream.h to include, and type-generator to src/tools 2013-02-20 21:26:34 -07:00
Joshua Warner
f17b8cef08 move system.h to include 2013-02-20 20:42:09 -07:00
Joel Dice
f04f444f23 modify (THREAD_)RUNTIME_ARRAY definition so RUNTIME_ARRAY_BODY must be used
Previously, if you forgot to use RUNTIME_ARRAY_BODY to reference an
array declared with (THREAD_)RUNTIME_ARRAY, you wouldn't get a
compiler error until you tried to build on e.g. MSVC, where
runtime-sized stack arrays aren't supported.  This change ensures you
find out regardless of what compiler you're using, which ought to
protect us from regressions going forward.
2013-02-20 17:20:17 -07:00
Joshua Warner
588b04af54 Merge branch 'master' into wip 2013-02-20 13:41:19 -07:00
Joshua Warner
41d84f7d5a fix bootimage build 2013-02-20 13:40:11 -07:00
Joshua Warner
1f0833252d Merge branch 'master' into wip
Conflicts:
	src/codegen/compiler/event.cpp
	src/codegen/x86/assembler.cpp
	src/common.h
2013-02-20 11:27:39 -07:00
Joshua Warner
24ff91c229 move heap.h to include 2013-02-20 10:23:20 -07:00
Joel Dice
d414fd4c7b more progress on Android class library port
Hello.java works.  Yay.
2013-02-20 10:22:40 -07:00
Joshua Warner
52b2fd74ef move math functions out of common.h, and into include/avian/util/math.h 2013-02-20 07:51:57 -07:00
Joshua Warner
b9e281612b move runtime-array to include 2013-02-19 22:56:05 -07:00
Joshua Warner
263c0dee4f move abort.h to include, add namespacing 2013-02-19 22:51:38 -07:00
Joshua Warner
987af120d8 move codegen headers to include/ 2013-02-19 22:21:22 -07:00
Joshua Warner
77365dfcc1 move binary-to-object to new tree structure 2013-02-19 20:23:11 -07:00
Joel Dice
f45b95e1b5 progress towards Android classpath support
It now builds and links, but fails at runtime because
register_libcore_icu_ICU can't find the file it wants.  We'll probably need to replace register_libcore_icu_ICU with a better-behaved version.
2013-02-19 16:48:33 -07:00
Joel Dice
0f524fcf16 first pass at Android classpath support
Stuff compiles, but linking breaks spectacularly.  Next step is to
figure out how to build the dependencies without checking out and
building the entire Android platform.
2013-02-19 09:36:19 -07:00
Joshua Warner
43de16a94d Merge branch 'master' into wip
Conflicts:
	src/bootimage.cpp
2013-02-19 09:13:42 -07:00
Joshua Warner
46029939d3 begin work on audit-codegen 2013-02-19 09:06:25 -07:00
Joshua Warner
24c0fab9bf add unit tests for arg parser 2013-02-19 09:06:25 -07:00
Joshua Warner
e9be3c4e07 move arg parser out of bootimage.cpp 2013-02-19 09:06:21 -07:00
Joshua Warner
984f987e03 further break out x86 assembler 2013-02-19 09:05:31 -07:00
Joshua Warner
61f03643e0 begin splitting up x86 assembler 2013-02-19 09:05:31 -07:00
Joshua Warner
49bfda3932 construct SiteMasks based on OperationMasks 2013-02-19 09:05:30 -07:00
Joshua Warner
4462b87f10 group typeMask and registerMask into OperandMask, for Architecture::plan 2013-02-19 09:05:30 -07:00
Joel Dice
fbbd718fe1 fix bootimage build 2013-02-16 08:36:29 -07:00
Joshua Warner
a5869c854f fix interpret.cpp build 2013-02-15 20:30:20 -07:00
Joshua Warner
71765bb26f fix cross-compile windows build 2013-02-15 09:53:02 -07:00
Joshua Warner
a3fb540ec3 add ArchitecturePlanTest 2013-02-15 07:35:17 -07:00
Joshua Warner
b4a73a2e0b include runtime-array.h to fix arm build 2013-02-14 11:43:21 -07:00
Joshua Warner
2db0303e2f further compiler cleanup / organization 2013-02-13 23:23:07 -07:00
Joel Dice
b8fd040ac1 include util/runtime-array.h in windows.cpp to fix build 2013-02-13 22:13:56 -07:00
Joel Dice
64d58bdb29 update bootimage.cpp and heapwalk.cpp to reflect function renames 2013-02-13 22:13:56 -07:00
Joshua Warner
94ddb62b5f move FrameSiteEvent out of compiler.cpp 2013-02-13 22:13:56 -07:00
Joshua Warner
be86d26512 move BoundsCheckEvent out of compiler.cpp 2013-02-13 22:13:56 -07:00
Joshua Warner
d00950458f move JumpEvent out of compiler.cpp 2013-02-13 22:13:56 -07:00
Joshua Warner
65b7cf047c move BranchEvent out of compiler.cpp 2013-02-13 22:13:56 -07:00
Joshua Warner
18e6f28ff4 move MemoryEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
9c102bc1a8 move OperationEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
70f9209a6e move TranslateEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
8a61b38a01 move CombineEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
5ad0eb86d3 move MoveEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
165c77d772 move ReturnEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
0f6e098b69 move CallEvent out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
6d265374ec move Reads out of compile.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
b0abc4e1e5 further split up compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
952cad2360 move site out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
740886d58e begin splitting up compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
ef5e534e1e begin moving register allocator out of compiler.cpp 2013-02-13 22:13:55 -07:00
Joshua Warner
34471e5d60 factor out assert / abort / expect implementations 2013-02-13 22:13:52 -07:00
Joshua Warner
d7f088c9e7 adjust package structure in codegen (vm -> avian::codegen and avian::codegen::lir)
The eventual intent with the lir namespace is to formalize some of
the important bits of Assembler interface, to be tested, debug-printed,
and potentially, serialized.

Also, group arguments to apply(...) in OperandInfos
2013-02-12 17:47:57 -07:00
Joshua Warner
aacfb9ec85 fix unused function warnings in codegen/powerpc/assembler.cpp when building with clang 2013-02-12 17:45:19 -07:00
Joshua Warner
3589d5c205 Merge branch 'master' of git://github.com/ReadyTalk/avian
Conflicts:
	src/codegen/arm/assembler.cpp
	src/common.h
	src/machine.cpp
2013-02-12 17:37:19 -07:00
Joshua Warner
f7b49ddb06 allow codegen targets (Architectures and Assemblers) to co-exist
The primary motivation behind this is to allow all the different Assemblers
to be built at once, on a single machine. This should dramatically reduce
the time required to make sure that a particular change doesn't break
the build for one of the not-so-common architectures (arm, powerpc)

Simply pass "codegen-targets=all" to make to compile all
src/codegen/<arch>/assembler.cpp.

Note that while these architectures are built, they will not be fully-
functional.  Certain stuff is assumed to be the same across the entire
build (such as TargetBytesPerWord), but this isn't the case anymore.
2013-02-12 17:16:40 -07:00
Joel Dice
86c92e26cb Merge commit '752d02e7786b807185e3f4cd254ee988c01f830f' into HEAD
Conflicts:
	classpath/java-io.cpp
	makefile
	src/bootimage.cpp
	src/interpret.cpp
	src/machine.cpp
	src/windows.cpp
2013-02-12 10:47:28 -07:00
Joel Dice
8a7b6488d4 Merge remote branch 'osmandapp/upstream' 2013-02-12 09:26:01 -07:00
Joel Dice
dc943c250a delay incrementing Thread::criticalLevel until after entering ActiveState
If we increment the value while we're still in IdleState, another
thread may try to GC before we are able to enter ActiveState, which
will lead to an assertion failure when the footprint function is
called.
2013-02-12 08:15:39 -07:00
Joshua Warner
68776e5d73 move all codegen source in to codegen/ dir 2013-02-10 18:55:38 -07:00
Joshua Warner
964d054117 move RUNTIME_ARRAY into it's own header 2013-02-10 18:07:11 -07:00
Joshua Warner
5dd770d7ea rename cast -> fieldAtOffset 2013-02-10 18:07:03 -07:00
Joshua Warner
2a1834e48a rename mask -> maskAlignedPointer 2013-02-10 18:06:48 -07:00
Joshua Warner
d26d8fdb9f rename ceiling -> ceilingDivide 2013-02-10 18:06:15 -07:00
Alexey Pelykh
9c632b778b Proper warning disabling 2013-02-10 09:41:46 +02:00
Alexey Pelykh
5d35d64c80 Disable operator new warning 2013-02-10 09:31:41 +02:00
Alexey Pelykh
d5d2e50ac7 Trace writeout refactor 2013-02-09 09:42:51 +02:00
Alexey Pelykh
83e55ce9cc RUNTIME_ARRAY usage 2013-02-09 09:42:50 +02:00
Alexey Pelykh
e4bd01f7f3 Comment out printTrace 2013-02-09 09:42:49 +02:00
Alexey Pelykh
f3c443dbfa Fix dword<>qword mistake 2013-02-09 09:42:47 +02:00
Alexey Pelykh
b918389672 Support built-in jars when wusing multi-library 2013-02-09 09:42:45 +02:00
Alexey Pelykh
74c9f60b98 Fix crash if no avian.boostrap is specified (oops) 2013-02-09 09:42:36 +02:00
Alexey Pelykh
d0ac63292c Fix crash if no avian.boostrap is specified (oops) 2013-02-09 09:42:35 +02:00
Alexey Pelykh
bd2a836395 Fix crash if no avian.boostrap is specified (oops) 2013-02-09 09:42:34 +02:00
Alexey Pelykh
bde33c97f8 Fix crash if no avian.boostrap is specified 2013-02-09 09:42:33 +02:00
Alexey Pelykh
9ed312451a Allow avian.bootstrap to accept multiple libraries 2013-02-09 09:42:32 +02:00
Alexey Pelykh
c13149088e Fix crash on memory validation 2013-02-09 09:42:31 +02:00
Alexey Pelykh
c6694287e9 Finally, proper jvm.dll linking for WP8 2013-02-09 09:42:29 +02:00
Alexey Pelykh
d51db00136 Allow output of exceptions to debugger. Generate WinMD file 2013-02-09 09:42:28 +02:00
Alexey Pelykh
4228f69a0d Additional AOT_ONLY ifdef 2013-02-09 09:42:26 +02:00
Alexey Pelykh
acdd297fb2 Fixes to WP8/WinRT support 2013-02-09 09:42:25 +02:00
Alexey Pelykh
dca12d3cd0 WinRT/WP8 process=compile 2013-02-09 09:42:22 +02:00
Alexey Pelykh
4d03650544 Replaced TODO comments with messages ; More correct AVIAN_AOT_ONLY usage 2013-02-09 09:42:21 +02:00
Alexey Pelykh
1b43caf815 Makefile fix 2013-02-09 09:42:20 +02:00
Alexey Pelykh
2f2cac556c Windows Phone 8 / Windows RT initial support
Conflicts:

	makefile
2013-02-09 09:42:19 +02:00
Alexey Pelykh
b1990ba55f Android toolchain 2013-02-09 09:42:14 +02:00
Victor Shcherb
3a42db9f6f Add android platform 2013-02-09 09:42:13 +02:00
Joel Dice
f9b3be0301 fix format string in loadLibrary call to snprintf
"%*s" means "at least", whereas "%.*s" means at most, and the latter
is what I intended.  This only became noticable as of 9f22a70, when I
added another directory to the library path, which caused loadLibrary
to fail to find libraries in either directory.
2013-02-08 08:24:06 -07:00
Joel Dice
6d4f797b66 fix handling of non-ascii characters in filenames on Windows 2013-02-07 11:39:04 -07:00
Joel Dice
5241660463 fix SIGSEGV and off-by-one error in logDebug
We must use separate va_start/va_end pairs for each call to vsnprintf
on Linux and possibly other platforms in order to avoid a crash.
Also, we need to give it room to null terminate the string at the
right point.
2013-02-07 09:33:22 -07:00
Joel Dice
d97fe5304f use THREAD_RUNTIME_ARRAY instead of RUNTIME_ARRAY where appropriate
This ensures that if the stack is unwound for an exception we'll still
release the memory.
2013-02-07 09:33:20 -07:00
Alexey Pelykh
9e4144f92b Trace writeout refactor 2013-02-07 11:39:28 +02:00
Alexey Pelykh
e6fc4e3bea RUNTIME_ARRAY usage 2013-02-07 11:39:27 +02:00
Alexey Pelykh
edbea8ac2b Comment out printTrace 2013-02-07 11:39:27 +02:00
Alexey Pelykh
33d4f008f4 Fix dword<>qword mistake 2013-02-07 11:39:25 +02:00
Alexey Pelykh
1d60ababd3 Support built-in jars when wusing multi-library 2013-02-07 11:39:23 +02:00
Alexey Pelykh
3287b1354a Fix crash if no avian.boostrap is specified (oops) 2013-02-07 11:39:14 +02:00
Alexey Pelykh
ba0ec3759d Fix crash if no avian.boostrap is specified (oops) 2013-02-07 11:39:13 +02:00
Alexey Pelykh
8e879f80a7 Fix crash if no avian.boostrap is specified (oops) 2013-02-07 11:39:12 +02:00
Alexey Pelykh
2e3856211b Fix crash if no avian.boostrap is specified 2013-02-07 11:39:11 +02:00
Alexey Pelykh
e523547b19 Allow avian.bootstrap to accept multiple libraries 2013-02-07 11:39:10 +02:00
Alexey Pelykh
9b9bc1de00 Fix crash on memory validation 2013-02-07 11:39:09 +02:00
Alexey Pelykh
7cd194b5de Finally, proper jvm.dll linking for WP8 2013-02-07 11:39:07 +02:00
Alexey Pelykh
5a1b478b89 Allow output of exceptions to debugger. Generate WinMD file 2013-02-07 11:39:06 +02:00
Alexey Pelykh
fa034c7526 Additional AOT_ONLY ifdef 2013-02-07 11:39:04 +02:00
Alexey Pelykh
4840f4a019 Fixes to WP8/WinRT support 2013-02-07 11:39:03 +02:00
Alexey Pelykh
9c67acfaf1 WinRT/WP8 process=compile 2013-02-07 11:39:00 +02:00
Alexey Pelykh
a78959a480 Replaced TODO comments with messages ; More correct AVIAN_AOT_ONLY usage 2013-02-07 11:38:59 +02:00
Alexey Pelykh
c5adad9dce Makefile fix 2013-02-07 11:38:58 +02:00
Alexey Pelykh
0cbaad6495 Windows Phone 8 / Windows RT initial support
Conflicts:

	makefile
2013-02-07 11:38:57 +02:00
Alexey Pelykh
b0cae77b2a Android toolchain 2013-02-07 11:38:53 +02:00
Victor Shcherb
4cd8ab5910 Add android platform 2013-02-07 11:38:52 +02:00
Joel Dice
5a07e04d56 assert that there are no outstanding Get*Critical requests during allocation
When GetStringCritical or GetPrimitiveArrayCritical are called, the VM
cannot risk new Java heap allocations until the corresponding release
method is called because allocations may result in GC, which cannot
happen while a string or array is pinned in memory.  We already have a
check for this latter in the footprint function used during GC, but
it's best to catch the problem as early as possible.
2013-02-05 09:48:20 -07:00
Joel Dice
5dcf6eae5a fix GC safety issue in MyClasspath::updatePackageMap 2013-02-03 20:29:24 -07:00
Joel Dice
e8f8ebdc67 fail quickly if an object allocation cannot be satisfied
Previously, we would blithely exceed the heap ceiling and force the
next allocation to deal with the problem, including a major GC and
possible OutOfMemoryError.  As of this commit, we throw an error
immediately if we find that the allocation will push us over the
ceiling.
2013-02-03 15:53:36 -07:00
Joel Dice
23bb2e8743 force a GC in allocate3 if the heap limit has been exceeded
Otherwise, we'll throw an OOME even though there may be enough
unreachable objects eligible for collection to get back below the
limit.
2013-02-03 15:20:53 -07:00
Joel Dice
3db9e73aa1 fix GC safety issues in classpath-openjdk.cpp 2013-02-03 15:19:35 -07:00
Joel Dice
80c8940b7f ensure joining threads are always notified when a thread exits
Previously, we'd only do this if the thread exited without throwing an
exception.  Now we do it regardless.
2013-02-03 15:18:32 -07:00
Joel Dice
1890e348fb fix handling of classe, method, and field names with non-ASCII characters 2013-02-03 14:10:47 -07:00
Joel Dice
0c5471d25e remove temporary #error used for debugging
Sorry, that wasn't supposed to be checked in.
2013-01-28 16:24:08 -07:00
Joel Dice
67fd707254 fix handling of unusual exception handler layout
Scala sometimes generates bytecode such that the scope of an exception
handler starts at another exception handler, e.g.:

      Exception table:
         from    to  target type
           290   372   382   any
           382   451   451   any
           290   372   451   any

Avian's compiler was incorrectly initializing the stack frame for the
second handler in this case.  This commit fixes the problem.
2013-01-26 22:06:53 -07:00
Joel Dice
70a7a50a49 fix int-to-long conversions from memory on x86_32
The instruction for 32-bit-to-64-bit sign extension on x86_32 requires
that the input value be placed in EAX and the sign extension in EDX.
However, the compiler can get confused if the input value is in memory
addressed via one of those registers and doesn't know how to move it.
This patch works around that limitation by doing the move explicitly
in MemoryEvent::compile if necessary.
2013-01-26 17:15:15 -07:00
Joel Dice
1a44ec9eef fix incorrect macro name in bootimage.cpp 2013-01-25 16:47:31 -07:00
Joel Dice
2131adf3aa fix Windows OpenJDK build 2013-01-25 08:07:47 -07:00
Joel Dice
844520a402 fix embed.cpp build for 64-bit Windows 2013-01-25 07:57:57 -07:00
Joel Dice
36eee724c9 check argument types in JVM_InvokeMethod
Method.invoke must throw an IllegalArgumentException if it receives
the wrong number or types of arguments, and since this isn't done by
the OpenJDK class library, we must do it in the VM.
2013-01-24 12:16:41 -07:00
Joel Dice
0adccdc99c return unadorned filename from JVM_GetSystemPackage
Package.defineSystemPackage expects a filename, not a URL.
2013-01-24 12:16:40 -07:00
Joel Dice
2a45a5919c return XToolkit from iOS getPreferredToolkit stub
This is necessary to prevent an NPE in Hashtable.put when
System.initProperites tries to put a null value in the map for
java.awt.graphicsenv.
2013-01-19 14:10:31 -07:00
Joel Dice
ccbdd6723a specify CodeCapacity based on target arch, not build arch 2013-01-19 14:08:07 -07:00
Carsten Elton Sørensen
cad4719f7d Handle null pointer in PopLocalFrame 2012-12-21 09:38:03 -07:00
Joel Dice
9f22a701cc load libmawt.so proactively when booting the VM for OpenJDK
This library is placed in the xawt subdirectory of jre/lib/$arch on
POSIX systems, so it isn't found automatically when third-party
libraries which depend on it are loaded.  The simplest way to ensure
that it's found seems to be to just load it when the VM starts up.
2012-12-20 12:30:15 -07:00
Joel Dice
b75497c8ff implement JNIEnv::NewLocalRef 2012-12-20 09:05:30 -07:00
Joel Dice
1094483a7c fix 32-bit build regression 2012-12-19 16:48:20 -07:00
Joel Dice
d200019d10 implement JNI reflection methods
These include FromReflectedMethod, ToReflectedMethod,
FromReflectedField, and ToReflectedField.
2012-12-19 12:39:33 -07:00
Joel Dice
7b07b5b9a3 print more of the stack map when DebugFrameMaps is enabled 2012-12-12 16:04:26 -07:00
Joel Dice
663d8da975 fix stack mapping bug for try blocks containing jsr/ret instructions
In order to calculate the initial stack map of GC roots for an
exception handler, we do a logical "and" of maps across all the
instructions contained in the try block for that handler.  This is
complicated by the presence of jsr/ret instructions, though, because
instructions in a subroutine may have multiple maps associated with
them corresponding to all the paths from which execution might flow to
them.

The bug in this case was that we were using an uninitialized map in
our calculation, resulting in a map with no GC roots at all.  By the
time the map was initialized, the damage had already been done.  The
solution is to treat an uninitialized map as if it has roots at all
positions so that it has no effect on the calculation until it has
been initialized with real data.
2012-12-12 15:54:15 -07:00
Joel Dice
f79f320859 fix MSVC build regression 2012-12-05 17:17:29 -07:00
Joel Dice
36aa74316a fix Windows cross-compile build 2012-12-04 17:37:02 -07:00
Joel Dice
2659e32b80 Merge remote-tracking branch 'csoren/master' 2012-12-04 14:04:57 -07:00
Stanisław Szymczyk
de1f5c7b9f fix pthread mutex and condition leak
Hi,

I did some more tests with my x86 QNX Avian port and found one major problem
in Avian VM while trying to run Apache Ivy. The problem manifests as
follows:

1. MySystem::Thread X is created, during its creation pthread mutex and
conditional variable are initialized
2. Program runs for some time
3. MySystem Thread X is disposed, it's memory is freed (during garbage
collection I guess)
4. Program runs for some time
5. MySystem::Thread Y is created in exactly the same memory address as
MySystem::Thread X disposed in step 3 (I suppose that's due to the way
memory allocator works in Avian)
6. During MySystem::Thread Y creation pthread mutex and conditional variable
initialization fail silently with EBUSY. QNX documentation says it means
"The given mutex was previously initialized and hasn't been destroyed."
which is correct, because it's exactly in the same memory address as mutex
and conditional variable of MySystem::Thread X and they haven't been
destroyed during MySystem::Thread X disposal

Fortunately solution for this is easy, see the attached patch. Now Apache
Ivy works without any problems.

Regards,
Stanisław Szymczyk
2012-12-04 10:14:44 -07:00
Carsten Elton Sorensen
2b44fb6b93 Compile fix for GCC 4.7.2 in C++11 mode 2012-11-30 11:14:35 +01:00
Carsten Elton Sorensen
859f0ec503 Fix for C++ compile error 2012-11-30 11:08:54 +01:00
Carsten Elton Sorensen
571cc6a85e Added new embed utility for Windows 2012-11-13 09:11:49 +01:00
Carsten Elton Sørensen
53b1a2423a Accept M and K suffixes for memory sizes like the java command 2012-11-12 22:35:58 +01:00
Joel Dice
3665753d1f fix MSVC build regression 2012-10-13 13:09:24 -06:00
Joel Dice
8f308291b0 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.
2012-10-13 09:46:12 -06:00
Joel Dice
a3c4b60f43 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.
2012-10-06 15:33:24 -06:00
Joel Dice
7946aaf48f 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.
2012-10-06 15:30:59 -06:00
Joel Dice
3a452309b3 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.
2012-10-06 15:25:12 -06:00
Joel Dice
45073db421 fix Call[Static]<type>MethodA float argument marshalling 2012-10-05 10:56:07 -06:00
Joel Dice
f8d3494b1c 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.
2012-10-05 10:06:01 -06:00
Joel Dice
c680dd4215 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.
2012-10-03 17:01:00 -06:00
Joel Dice
16c526b775 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.
2012-10-03 13:36:51 -06:00
Joel Dice
1ce012aa68 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
2012-10-03 09:43:51 -06:00
Joel Dice
ab5ec510bf handle zero length arrays properly in JNIEnv::NewString 2012-10-03 08:16:41 -06:00
Xerxes Rånby
2a15201b18 gcc define __ARM_PCS_VFP for -mfloat-abi=hard, use it to detect armhf builds.
Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
2012-10-01 13:39:18 +02:00
Joel Dice
1d4c9d32fb return null from JNIEnv::GetSuperclass for interfaces per spec 2012-09-28 15:03:14 -06:00
Xerxes Rånby
23ea8f7d76 Fix missing armv4 blx and bkpt compile errors.
Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
2012-09-25 15:54:32 +02:00
Joel Dice
3693201911 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.
2012-09-24 17:43:34 -06:00
Joel Dice
e20c5cd9c6 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.
2012-09-22 20:22:33 -06:00
Joel Dice
3a5abaf58a fix incorrect reporting of fixie collection status in heap.cpp (part 2)
My earlier fix (f8e8609) was almost -- but not quite -- sufficient.
It asked the heap to mark the dead fixies too early, so some of them
were marked dead even though they ultimately survived, causing us to
clear weak JNI references when we shouldn't.
2012-09-12 17:23:19 -06:00
Joel Dice
2190d0e99a fix reads of out-of-bounds values in tokenizer.h 2012-09-12 15:25:17 -06:00
Joel Dice
c918cbced1 fix sun.misc.Unsafe.getLongVolatile for static fields on 32-bit platforms
The existing code did not handle static field lookups for
synchronization on 32-bit systems, which is necessary because such
systems generally don't support atomic operations on 64-bit values.
2012-09-11 19:28:02 -06:00
Joel Dice
90fa4c9b69 add JNI_GetCreatedJavaVMs stub
Recent versions of IcedTea will not run unless libjvm.so exports this
symbol.  The quick fix is to provide a stub which just always returns
-1 to indicate an error.  I'll leave a proper implementation for when
we need to support an app that actually uses this function.
2012-09-07 19:05:05 -06:00
Joel Dice
eee2ce27e4 ignore DetachCurrentThread calls for the main thread
My earlier commit to allow detaching the main thread (1f1c3c4) seems
to have caused subtle stability problems
(e.g. https://groups.google.com/group/avian/msg/d2c797c0dcf925c3), so
for now we'll just ignore that operation, which leaks a bit of memory
but should be harmless otherwise.
2012-09-07 08:47:49 -06:00
Xerxes Rånby
db0c14d742 Set java.vm.info based on makefile info= and
set java.vm.version based on makefile version=
in order to display relevant OpenJDK -version information.

Signed-off-by: Matthias Klose <doko@ubuntu.com>
Signed-off-by: Xerxes Rånby <xerxes@zafena.se>
2012-09-05 15:30:49 +02:00
Joel Dice
24f682f5b6 fix 64-bit shifts on x86_32 (part 2)
My earlier attempt (fa5d76b) missed an important detail, and somehow I
forgot to test the 32-bit OpenJDK build which made that omission
obvious.  Here's the fix.
2012-09-03 08:44:13 -06:00
Joel Dice
3f039864d1 fix memcpy argument order bug in jvmConstantPoolGetDoubleAt 2012-08-29 12:10:31 -06:00
Joel Dice
9ceacf16e9 don't throw an exception from resolveClass when throw_ == false
resolveClass was correctly respecting throw_ == false if the requested
class was not found, but it still threw an exception if e.g. the
superclass was missing.  Now we catch such exceptions and return null
as appropriate.
2012-08-29 18:34:51 -06:00
Joel Dice
7534eecdb3 implement JVM_ConstantPoolGetDoubleAt 2012-08-29 18:34:28 -06:00
Joel Dice
374bdb3726 implement Runtime.maxMemory for OpenJDK port
Some apps refuse to run if Runtime.maxMemory returns a value that's
"too small", so our stub implementation returning zero was not
sufficient.  Now we return the actual heap size limit in bytes.
2012-08-29 18:32:45 -06:00
Joel Dice
8c48a44e54 set main thread context classloader correctly for OpenJDK port
sun.misc.Launcher has its own idea about what the application
classloader should be, but we need to override it with the system
classloader created by the VM.  This is achieved by running
Launcher.getLauncher (which has the side effect of setting
Thread.contextClassLoader) and then overriding it.
2012-08-29 18:27:37 -06:00
Gernot Kvas
c2b53497ab Fix stacktrace when building with MSVC 2012-08-26 20:14:37 -06:00
Joel Dice
1f1c3c4c41 allow main thread to use DetachCurrentThread
When I originally implemented DetachCurrentThread, I assumed it didn't
make sense for the main thread to detach itself from the VM, and I was
concerned that allowing it might cause problems for any other threads
still attached.  However, detaching the main thread is allowed by the
JNI spec as of Java 2, and OpenJDK's java command does this just
before calling DestroyJavaVM.  Therefore, this commit ensures that the
VM doesn't abort if the main thread is detached.
2012-08-24 18:14:01 -06:00
Joel Dice
bac4099acb fix crash in findFrameMapInSimpleTable due to bug in instanceof implementation
We weren't adding entries to the frame map for calls to the instanceof
thunk when compiling methods.  However, that thunk may trigger a GC,
in which case we'll need to unwind the stack, which will lead to a
crash if we don't have a frame map entry for that instruction.
2012-08-17 12:47:38 -06:00
Gernot Kvas
ff9757e811 fix Win32 build regressions
Date: Wed, 15 Aug 2012 15:59:25 -0700 (PDT)
From: Gernot Kvas <gernot.kvas@gmail.com>
Reply-To: avian@googlegroups.com
To: avian@googlegroups.com
Subject: Win32 build regression

Hi,

As I've forked on the July 19th and haven't updated since, I decided to
merge master into my WinCE branch. I found out that the following commits
have introduced build regressions on Windows:

1.)https://github.com/ReadyTalk/avian/commit/5a7c78e71ac7b4045c23d215162fb1284
8f1a5f3

=> strncasecmp is undefined for Windows

2.)https://github.com/ReadyTalk/avian/commit/b98abe3f94dbf552595554787ef2115c3
009856c

=> fpclassify and related constants are undefined for Windows

3.)https://github.com/ReadyTalk/avian/commit/20a290b992112f9b376d3a8d0180c1cca
8dd21e2

=> signbit is undefined for Windows

I attached a patch that makes everything build through (within Visual
Studio, the makefile still fails)
2012-08-15 17:43:44 -06:00
Joel Dice
127d56d0fe fix register masks used for planning in arm.cpp
We can't use a floating point register where an integer register is
needed, or we may generate an invalid instruction.
2012-08-13 09:22:18 +00:00
Joel Dice
95cf6cf941 fix integer shifts on PowerPC 2012-08-13 11:17:34 -06:00
Joel Dice
665c4448bd fix PowerPC floating point argument and return value marshalling 2012-08-13 11:16:30 -06:00
Joel Dice
2abc4e28a5 handle missing classpath or jar file name gracefully 2012-08-13 08:36:36 -06:00
Joel Dice
fa5d76b43e fix 64-bit shifts on x86_32 2012-08-13 08:26:39 -06:00
Joel Dice
69ffa28e1b fix shift instruction implementations on ARM
Unlike x86, ARM does not implicitly mask the shift value, so we must
do so explicitly.
2012-08-11 19:09:03 +00:00
Joel Dice
20a290b992 use signbit instead of isinf to determine floating point sign
glibc's use of isinf's return value to indicate sign is a non-standard
extension which can't be relied upon on other platforms.
2012-08-12 14:52:48 -06:00
Joel Dice
b98abe3f94 fix float to integer conversion
Java requires that NaNs be converted to zero and that numbers at or
beyond the limits of integer representation be clamped to the largest
or smallest value that can be represented, respectively.
2012-08-12 14:31:58 -06:00
Joel Dice
47503854d5 Thread.sleep(0) should not sleep indefinitely
Our implementation uses Object.wait(long) to implement Thread.sleep,
which had the side effect of interpreting zero as infinity.  However,
for Thread.sleep, zero just means zero.  I assume that doesn't mean
"don't sleep at all", though, or else the app wouldn't have called
Thread.sleep in the first place, so this patch sleeps for one
millisecond when zero is passed -- just enough to yield the processor
for a bit.  Thread.yield might be a better choice in this case, but I
assume the app would have called that directly if that's what it
wanted.
2012-08-12 11:17:59 -06:00
Joel Dice
f8e860999a fix incorrect reporting of fixie collection status in heap.cpp
This led to fixed-position objects being considered unreachable when
they were actually still reachable, causing global weak JNI references
to be cleared prematurely, most notably leading to crashes in AWT
buffered image code.

This commit also fixes a field offset calculation mismatch in
bootimage.cpp relative to machine.cpp.
2012-08-12 10:55:37 -06:00
Joel Dice
b325221579 rename "resource" URL protocol to "avian_vm_resource"
This fixes a problem with JOSM, which attaches its own meaning to the
"resource" protocol.  The new name is less likely to cause such
conflicts.
2012-08-11 19:01:32 -06:00
Joel Dice
242a6a0d0f fix field offset calculation mismatch between type-generator.cpp and machine.cpp 2012-08-11 06:58:07 -06:00
Joel Dice
01be4b23bb implement JNI methods needed by AWT
These include PushLocalFrame, PopLocalFrame, NewDirectByteBuffer,
GetDirectBufferAddress, and GetDirectBufferCapacity.
2012-08-11 06:56:19 -06:00
Joel Dice
2642a167e2 fix Class.getPackage for system classes in OpenJDK build 2012-08-11 06:46:24 -06:00
Joel Dice
3af278b5e6 fix Clang warnings in windows.cpp 2012-08-07 17:18:04 -06:00
Damjan Jovanovic
53b15d1bca look for initIDs in SunFontManager instead of FontManager
OpenJDK 7 has refactored this code relative to OpenJDK 6, and now
FontManager is an interface, with SunFontManager providing a (partial)
implementation.
2012-08-05 19:31:20 -06:00
Joel Dice
5a7c78e71a ignore case when looking for Main-Class manifest attribute
Per the spec, attribute names should be case-insensitive:

http://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html
2012-08-05 19:18:51 -06:00
Joel Dice
248ff91d74 terminate zero-length char array with null char in stringUTFChars 2012-08-04 12:36:18 -06:00
Joel Dice
ebd7f69c41 fix a couple of QNX/ARM issues
On QNX, we need to use msync to sync the instruction cache.  Also,
even though the compiler doesn't define __SOFTFP__, QNX uses the
softfp ABI on ARM.
2012-08-03 20:02:33 -06:00
Damjan Jovanovic
59d7f5a47a fix java.library.path on the ARM platform
On the ARM platform, Avian compiled to use OpenJDK gets this error on
startup:
java/lang/UnsatisfiedLinkError: no zip in java.library.path
  at java/lang/ClassLoader.loadLibrary (line 1860)
  at java/lang/Runtime.loadLibrary0 (line 845)
  at java/lang/System.loadLibrary (line 1084)
  at java/lang/System.initializeSystemClass (line 1145)

Using strace shows why:
[pid 22431]
stat64("/usr/lib/jvm/java-7-openjdk-armhf/jre/lib/i386/libzip.so",
0xbee377e0) = -1 ENOENT (No such file or directory)

The attached patch uses "arm" instead of "i386" in that path. This fixes the
problem.
2012-08-04 07:31:54 -06:00
Joel Dice
f03e5e8e55 clean up binary format code
Linux, FreeBSD, and QNX all use ELF, so no need to distinguish between
them when generating object files.  To avoid confusion, I've switch
from using operating system names to using binary format names where
applicable.
2012-08-02 12:39:24 -06:00
Joel Dice
e641f23e6c fix "no newline at end of file" error on FreeBSD 2012-08-02 12:14:15 -06:00
Joel Dice
3a1343fb06 add support for FreeBSD on x86_64 2012-08-02 10:49:32 -06:00
Damjan Jovanovic
c1aa0b46b5 add support for FreeBSD 2012-08-02 10:41:41 -06:00
Joel Dice
56da23b964 fix unused variable warning for non-hardfloat ARM systems 2012-07-19 05:28:03 -06:00
Joel Dice
7467ebde13 Revert "fix unused variable warning for non-hardfloat ARM systems"
This reverts commit 5270db52c7.
2012-07-19 05:27:15 -06:00
Joel Dice
5270db52c7 fix unused variable warning for non-hardfloat ARM systems 2012-07-19 05:26:25 -06:00
Joel Dice
4ffe2d58bf load arguments into the first 8 VFP registers, not the first 9 2012-08-01 19:59:34 +00:00
Joel Dice
2be438b2bb fix bad offset for SSE argument marshalling in x86.S 2012-08-01 11:20:41 -06:00
Joel Dice
2cb5a74991 fix mixed marshalling of mixed float/double argument lists on armhf
When we skip a single-precision register to ensure a double-precision
load is aligned, we need to remember that in case we see another
single-precision argument later on, which we must backfill into that
register we skipped according to the ABI.
2012-08-01 16:48:26 +00:00
Joel Dice
2ec1eee6f5 revert debug code accidentally included in last commit 2012-07-31 20:07:34 +00:00
Joel Dice
b023f5a2aa fix allocate/free size mismatch in interpret.cpp
This was causing a crash every time the VM was run when build using
mode=debug and process=interpret.
2012-07-31 20:02:03 +00:00
Joel Dice
a97c5728bb add support for the ARM hardware floating point ABI
This ABI's calling convention passes arguments and returns results
using VFP registers, so we need to tweak vmNativeCall to match it.

Thanks to Damjan Jovanovic for pointing this out and providing an
initial patch.
2012-07-31 16:36:59 +00:00
Joel Dice
03c3182497 fix OS X regression due to QNX header differences 2012-07-19 00:12:30 -06:00
Joel Dice
129b67ce8f Merge branch 'github-master' 2012-07-19 13:28:55 -06:00
Joel Dice
265ab63e19 fix crash when AOT compiling switch statement with only a default case
The existing code handled such odd switch statements correctly in the
JIT case, but did the wrong thing for the AOT case, leading to an
assertion failure later on.
2012-07-19 13:26:06 -06:00
Joel Dice
4bafdf6286 add QNX ARM support
This is untested so far, since I haven't figured out how to install
the ARM port of QNX on QEMU.
2012-07-17 19:38:39 -06:00
Joel Dice
4237a19b68 add support for QNX on x86_32
All but one test is passing.  The failure is due to the fact that QNX
doesn't (in general) support calling fork(2) from a multithreaded
process.  Thus, we'll need to use spawn instead of fork/exec on QNX,
which I'll attempt in a later commit.

http://www.qnx.com/developers/docs/6.4.1/neutrino/getting_started/s1_procs.html
2012-07-17 18:21:17 -06:00
Joel Dice
8f0f3182de fix stack alignment for i386 continuations build 2012-07-10 17:22:49 -06:00
Joel Dice
a30c593a69 fix typo in compile-x86.cpp that broke 64-bit Windows continuations build 2012-07-10 16:23:45 -06:00
Joel Dice
fdbb63e9d9 remove unused function returnCode 2012-07-09 13:40:15 -06:00
Nandor Kracser
77f7d3eb44 Commenting-out unused returnCode() method because it raises compiler
warning with 'make process=interpret use-clang=yes' on Mac OS X. The
compiler warning later corrupted the compilation.
2012-07-09 21:10:53 +02:00
Nandor Kracser
938c4b3563 Changing LLD to 'lld' because it raises compile warnings in interpret.cc
on Mac OS X (make process=interpret).
2012-07-09 21:05:11 +02:00
Joel Dice
30516ab94a replace use of strndup with custom function
Windows doesn't have strndup, nor can I find an equivalent, so I wrote
my own trivial implementation.
2012-07-06 16:55:07 -06:00
Joel Dice
86be0c409c fix incorrect jvalue marshalling in compile.cpp
4512a9a introduced a new ArgumentList constructor which was handling
some types incorrectly (e.g. implicitly converting floats to
integers).  This commit fixes it.
2012-07-06 10:56:04 -06:00
Joel Dice
f5e6002a50 fix typo affecting MSVC build 2012-07-02 16:23:00 -06:00
Joel Dice
365f863080 disable constant offset check when cross-compiling for a different word size 2012-06-28 16:21:24 -06:00
Joel Dice
0c28fd8289 fix C++11 errors in heapdump.cpp 2012-06-28 10:30:49 -06:00
Joel Dice
a96f34709c Merge branch 'master' of github.com:ReadyTalk/avian 2012-06-26 10:50:22 -06:00
Joel Dice
156644b8e5 fix incorrect array sizing in populateMultiArray
We were assuming the array element size was always the native word
size, which is not correct in general for primitive arrays, and this
led to wasted space at best and memory corruption at worst.
2012-06-26 10:43:47 -06:00
Joel Dice
cfd9dc6656 fix bug which failed to preserve source site during multi-word move
The compiler was failing to freeze the source site containing the
value of the second word in a multi-word move, leading to mis-compiled
code in some cases.
2012-06-26 08:39:23 -06:00
Joshua Warner
fe1f069309 abort on startup if Thread field offset constants don't match the real runtime values 2012-06-20 13:16:08 -06:00
Joel Dice
ac16a1a2ad Merge remote branch 'oss/armvfp' 2012-06-20 08:35:09 -06:00
Joel Dice
65e7a911b5 fix incorrect 32-bit TargetThreadThunkTable value 2012-06-18 19:25:01 -06:00
Joel Dice
886dd184aa fix incorrect stack unwinding for asynchronous stack traces
Our Thread.getStackTrace implementation is tricky because it might be
invoked on a thread executing arbitrary native or Java code, and there
are numerous edge cases to consider.  Unsurprisingly, there were a few
lingering, non-fatal bugs revealed by Valgrind recently, one involving
the brief interval just before and after returning from invokeNative,
and the other involving an off-by-one error in x86.cpp's nextFrame
implementation.  This commit fixes both.
2012-06-18 14:27:18 +00:00
Joel Dice
4512a9a38e implement NewObjectA, Get<type>MethodA, and GetStatic<type>MethodA 2012-06-15 17:41:40 -06:00
Joel Dice
c00f811a2f initialize count_ from starting point in MyStackWalker(MyStackWalker*)
When we're initializing a stack walker based on an existing instance,
we should initialize all the fields from that instance, including
count_.
2012-06-14 09:58:20 -06:00
Joel Dice
5a5a6a7795 fix C++11 errors and aliasing warning 2012-06-13 19:10:28 -06:00
JET
f0c4762ded ARM VFP support: Almost finished.
All but one test (and just one line therein) are passing.  Several
quirks and optimizations must also be addressed.
2012-06-12 17:00:45 -06:00
Joel Dice
7bfb5a6287 fix native method name ambiguity
sun.misc.Unsafe now has two native getByte methods: one which takes a
long and another which takes an Object and a long.  Thus, we need to
decorate each version with its parameter signature so we don't
accidentally call the wrong one at runtime.
2012-06-12 16:33:31 -06:00
Joel Dice
9dd3d04324 fix unused parameter warning in interpret.cpp 2012-06-12 16:32:53 -06:00
Joel Dice
06f7746dfd fix mode=debug build for recent OpenJDK versions 2012-06-12 16:32:27 -06:00
Joel Dice
fa8ba2afc8 fix build for recent versions of OpenJDK 7
As of the latest code from the jdk7u-dev Mercurial repository,
java.lang.String no longer has offset or length fields.  Instead, the
content fits exactly into the backing char array, so offset is
implicitly zero and length is the length of the array.  The VM
previously relied on those fields being present, whereas this commit
handles the case where they are not.

In addition, I've made some changes to openjdk-src.mk to ensure that
we can build against both a stock OpenJDK 7 and an IcedTea-patched
version.
2012-06-11 23:30:22 +00:00
Joel Dice
165986841e fix endianess bug in LZMA decoding 2012-06-06 12:58:24 -06:00
Joel Dice
ba6ca031bb fix handling of no-argument options in bootimage.cpp 2012-06-05 13:53:13 -06:00
Joel Dice
f6299fdfe6 fix bootimage build regression 2012-06-05 13:33:29 -06:00
JET
11d750af70 single-precision hardfloat emission working
anything involving doubles (including conversions and thunking from
singles) is still broken
2012-06-04 12:39:53 -06:00
JET
714aebfec1 Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into armvfp 2012-06-04 12:39:45 -06:00
Joel Dice
d61501453f add support for LZMA on Windows 2012-06-02 15:43:42 -06:00
Joel Dice
5d9f7b2bc3 add optional LZMA support for compressing embedded JARs, boot images, and shared objects 2012-06-02 09:06:22 -06:00
Joel Dice
bd7ef24734 pass -std=c++11 to Clang for C++ code 2012-06-01 17:57:42 -06:00
Joel Dice
879df617df add use-clang option for building with LLVM Clang instead of GCC
This also fixes several errors and warnings emitted by Clang.
2012-06-01 17:43:42 -06:00
Joel Dice
b78c772ffb fix C++11 narrowing conversion errors 2012-06-01 11:46:56 -06:00
JET
22abdd6e19 Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into armvfp 2012-05-29 17:15:01 -06:00
Joshua Warner
5d6899a867 fix warning in disassembler code
Apple's GCC is more picky about undefined ordering (and rightfully so)...
2012-05-24 08:36:21 -06:00
Joshua Warner
7bd3ea1892 add simple disassembler for debugging 2012-05-22 13:58:53 -06:00
JET
2d20173224 added immediate to bkpt instruction 2012-05-17 18:39:40 -06:00
JET
b96fc05a61 Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into armvfp
Conflicts:
	src/arm.cpp
2012-05-17 12:22:18 -06:00
Joel Dice
0addd8c814 update copyright years 2012-05-11 17:43:27 -06:00
Joel Dice
f0152f1d33 Merge branch 'jdk7' 2012-05-11 16:41:18 -06:00
Joel Dice
90fae940a7 throw IncompatibleClassChangeError on unexpected static status
If a class references a field or method as static and we find it's
actually non-static -- or vice-versa -- we ought to throw an error
rather than abort.
2012-05-11 13:19:55 -06:00
Joshua Warner
362d6594a8 fix minor memory leak with default bootimage symbols 2012-05-11 09:06:51 -06:00
Joshua Warner
3dcf886bbe allow passing bootimage / codeimage start and end symbol names to the bootimage-generator
The usage statement for the bootimage-generator now looks like this:
build/linux-x86_64-bootimage/bootimage-generator \
  -cp <classpath> \
  -bootimage <bootimage file> \
  -codeimage <codeimage file> \
  [-entry <class name>[.<method name>[<method spec>]]] \
  [-bootimage-symbols <start symbol name>:<end symbol name>] \
  [-codeimage-symbols <start symbol name>:<end symbol name>]
2012-05-10 14:49:59 -06:00
Joshua Warner
fa9814b86d remove lots of unnecessary sizeof computations with a convenient 'operator new' overload 2012-05-08 16:14:54 -06:00
Joshua Warner
64b9407420 Merge branch 'master' into jdk7 2012-05-07 15:05:56 -06:00
Joshua Warner
fde7a3e7a1 give virtualThunks names based on index, to avoid conflicts 2012-05-07 15:05:40 -06:00
Joshua Warner
7c38ea75e4 give thunks symbol names in the bootimage build, use Heap::allocate instead of malloc 2012-05-07 10:00:59 -06:00
Joel Dice
4a4b82d959 Merge remote branch 'oss/master' into jdk7 2012-05-04 20:24:27 -06:00
Joel Dice
797b4c25cc fix OpenJDK bootimage build regression 2012-05-04 20:13:26 -06:00
Joel Dice
189340954a fix build regression due to last merge 2012-05-04 18:59:15 -06:00
Joel Dice
5ef5158bc1 Merge remote branch 'oss/master' into jdk7 2012-05-04 18:54:31 -06:00
Joel Dice
ea4e0a2f5d fix a couple of subtle Thread.getStackTrace bugs
The first problem was that, on x86, we failed to properly keep track
of whether to expect the return address to be on the stack or not when
unwinding through a frame.  We were relying on a "stackLimit" pointer
to tell us whether we were looking at the most recently-called frame
by comparing it with the stack pointer for that frame.  That was
inaccurate in the case of a thread executing at the beginning of a
method before a new frame is allocated, in which case the most recent
two frames share a stack pointer, confusing the unwinder.  The
solution involves keeping track of how many frames we've looked at
while walking the stack.

The other problem was that compareIpToMethodBounds assumed every
method was followed by at least one byte of padding before the next
method started.  That assumption was usually valid because we were
storing the size following method code prior to the code itself.
However, the last method of an AOT-compiled code image is not followed
by any such method header and may instead be followed directly by
native code with no intervening padding.  In that case, we risk
interpreting that native code as part of the preceding method, with
potentially bizarre results.

The reason for the compareIpToMethodBounds assumption was that methods
which throw exceptions as their last instruction generate a
non-returning call, which nonetheless push a return address on the
stack which points past the end of the method, and the unwinder needs
to know that return address belongs to that method.  A better solution
is to add an extra trap instruction to the end of such methods, which
is what this patch does.
2012-05-04 18:51:58 -06:00
Joel Dice
19de383aae Merge branch 'master' into jdk7
Conflicts:
	makefile
2012-05-04 11:33:16 -06:00
Joel Dice
58691a7fdb fix native Windows build
For some reason, Cygwin's MinGW-W64 compilers end up pulling in our
version of process.h from unistd.h.  That doesn't really make sense --
it should use the one from the sysroot, but we can work around it by
just not including unistd.h, since it's not needed on Windows anyway.
2012-05-03 14:55:51 -06:00
Joshua Warner
8c0ef382f8 write out bootimage directly from the bootimage-generator, eliminating one of the steps in a custom bootimage build 2012-05-03 12:04:34 -06:00
Joshua Warner
9cbd67ec61 darwin doesn't have <malloc.h>, apparently 2012-05-03 10:13:56 -06:00
Joshua Warner
53225edbfe remove debug logging 2012-05-03 10:13:56 -06:00
Joshua Warner
5724baad41 free symbol names after writing codeimage 2012-05-03 10:13:56 -06:00
Joshua Warner
a09736e749 write java symbols to bootimage 2012-05-03 10:13:56 -06:00
Joshua Warner
b742c58055 directly emit codeimage as a object (binaryToObject is statically linked in), as a stepping stone to including extra symbols in said codeimage 2012-05-03 10:13:55 -06:00
Joshua Warner
99bc9b1d55 prettify SymbolInfo array 2012-05-03 10:13:55 -06:00
Joel Dice
2107a09623 fix incorrect argument marshalling in Unsafe.{allocate|free}Memory
This was causing UnsafeTest to crash on PowerPC.
2012-05-02 18:02:28 -06:00
Joel Dice
20a0823a74 Merge remote-tracking branch 'origin/master' into jdk7 2012-05-02 11:44:24 -06:00
Joel Dice
e6afc6c321 set Thread.interrupted to true if thread is interrupted outside wait or sleep
This is the correct behavior according to the Thread.interrupt
JavaDoc, and it fixes an intermittent hang on exit in Eclipse.
2012-05-02 11:41:36 -06:00
Joshua Warner
b0dd39aa86 fix darwin arm binaryToObject support (just a missing break...) 2012-04-30 09:43:24 -06:00
Joshua Warner
661f6c28a8 refactor binaryToObject to allow more flexibilty (in particular, allowing arbitrary symbols per object) 2012-04-27 12:08:44 -06:00