Commit Graph

487 Commits

Author SHA1 Message Date
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
27d7c8a3c0 skip bootimage test in ci.sh if openjdk is set 2013-02-27 13:47:43 -07:00
Joshua Warner
43de16a94d Merge branch 'master' into wip
Conflicts:
	src/bootimage.cpp
2013-02-19 09:13:42 -07:00
Joshua Warner
24c0fab9bf add unit tests for arg parser 2013-02-19 09:06:25 -07:00
Joel Dice
fd0b2b844b test various configurations besides the default in Travis CI 2013-02-16 08:36:41 -07:00
Joshua Warner
33d245d0f7 add unittest framework 2013-02-14 20:54:20 -07:00
Joshua Warner
1258b23ea1 add remote-test capability
To execute tests on a remote host (for instance, because you're cross-compiling),
simply do:

make remote-test=true remote-test-host=<host_to_test_on> test

You can set several variables to control the functionality of remote-test.
See them below, along with their default values:

remote-test-host = localhost # host to ssh to
remote-test-port = 22
remote-test-user = ${USER} # user to execute tests as
remote-test-dir = /tmp/avian-test-${USER} # dir to rsync build output to
2013-02-14 18:47:48 -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
b75497c8ff implement JNIEnv::NewLocalRef 2012-12-20 09:05:30 -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
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
45073db421 fix Call[Static]<type>MethodA float argument marshalling 2012-10-05 10:56:07 -06: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
fa5d76b43e fix 64-bit shifts on x86_32 2012-08-13 08:26:39 -06:00
Joel Dice
a3a816c9a4 remove test of DataOutputStream from Integers.java
We haven't implemented that class yet, so the test only compiles with
the OpenJDK port.
2012-08-12 20:58:07 -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
2687333a37 Merge remote-tracking branch 'github/master' 2012-08-12 15:03:40 -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
e2ff771baa handle basic argument substitution in MessageFormat.format
Thanks to Remi for an initial version of this patch.
2012-08-11 08:58:40 -06:00
Joel Dice
373a92d4d6 add Buffers test 2012-08-11 08:01:44 -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
96d5dae06c specify UTF-8 explicitly in Strings.testDecode
This fixes a test failure with the OpenJDK port.
2012-08-04 18:41:44 -06:00
Joel Dice
c63668c1ce fix ArrayIndexOutOfBoundsException when decoding a UTF-8 stream 2012-08-04 16:11:27 -06:00
Damjan Jovanovic
5a09774353 tests don't compile when building with OpenJDK
I get this error when compiling with "make openjdk=...." on both x86_64 and
arm:

compiling test classes
test/Arrays.java:90: error: reference to equals is ambiguous, both method
equals(float[],float[]) in Arrays and method equals(Object[],Object[]) in
Arrays match
      expect(java.util.Arrays.equals(null, null));

test/Arrays.java:95: error: reference to hashCode is ambiguous, both method
hashCode(double[]) in Arrays and method hashCode(Object[]) in Arrays match
      java.util.Arrays.hashCode(null);

The attached patch fixes this.
2012-08-04 07:29:39 -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
67ec092e9a add JNI test to test suite 2012-08-01 16:04:12 +00:00
Joel Dice
836fc21106 fix bugs in File.getParent and listFiles
getParent should return the same value regardless of whether it ends
in a file separator, and listFiles should return null for
non-directories.
2012-07-31 09:27:18 -06:00
Joel Dice
2d6bfa5383 Merge github.com:ReadyTalk/avian 2012-07-24 16:17:09 -06:00
Joel Dice
de086d1046 fix typo in Arrays test 2012-07-24 11:38:43 -06:00
Joshua Warner
fffde5f445 add Arrays test for equals and hashCode, handle corner cases with null 2012-07-24 11:31:47 -06:00
Joel Dice
9974d91648 implement DatagramChannel.receive and fix Datagrams to be Java 6 compatible 2012-07-10 14:09:14 -06:00
Joel Dice
3d99ff37cb Merge remote-tracking branch 'origin/master' into dicej-master 2012-07-09 16:46:21 -06:00
Joel Dice
2ab304acb8 Merge github.com:mkeesey/avian 2012-07-07 16:29:18 -06:00
Mike Keesey
7947981b4b Fixed issue where BitSet didn't handle a range of 64 bits correctly on bulk operations - now just return the predefined MASK which has all the bits set when requesting that all the bits be set. 2012-07-06 23:33:05 -06:00
Dain
26209efac2 Fix an off-by-1 error in the remove method.
The change to only grow the array when the capacity has been reached
exposed a bug in the remove method when shifting the array elements.
2012-07-06 14:03:56 -06:00
Mike Keesey
9c9ee5c26d Made the bulk clear() fast like bulk set() and flip() for BitSet. 2012-07-05 22:16:19 -06:00
Mike Keesey
5f1b086150 Fixed an off-by-one error when deciding if we should grow BitSets. 2012-07-03 21:28:59 -06:00
Joel Dice
c602f4673b implement java.nio.channels.DatagramChannel 2012-07-03 11:24:05 -06:00
Mike Keesey
6e30366d07 Adding EnumSet, which is backed by a speedy BitSet. 2012-07-02 14:28:51 -06:00
Mike Keesey
d419899ac1 Adding both forms of flip() to BitSet. 2012-07-02 14:28:40 -06:00
Mike Keesey
31311160c3 Adding cardinality() to BitSet. 2012-07-02 14:28:34 -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
153b78f479 fix ArrayList performance issue
The ArrayList(Collection) constructor was allocating two arrays
instead of one due to an off-by-one error in ArrayList.grow.  This
commit fixes that and makes grow and shrink more robust.
2012-06-14 10:55:03 -06:00
Mike Keesey
a5c9dd6f24 Fixing some issues with runtime annotations within avian.
We were not properly converting dots to slashes internally for package names
and we did not properly handle Method.getAnnotations and
Method.getAnnotation(Class<T>) on methods without any annotations.

Added some tests to cover these cases.
2012-05-22 14:02:51 -06:00
Joel Dice
1119675b7a override InputStream.available for FileInputStream and the instance returned by ZipFile.getInputStream 2012-05-04 19:55:53 -06:00
Joel Dice
756f58210a add test for sun.misc.Unsafe functionality 2012-03-13 08:28:33 -06:00
Joel Dice
4aefa211a3 File.createNewFile should return false if the file already exists 2012-03-13 08:26:51 -06:00
Joel Dice
71295e54c7 handle constants larger than 8 bits in subtractBorrowCR 2012-03-11 04:59:42 -06:00
Joel Dice
6c9a1e1643 add "throws IOException" to java.io.File.createTempFile 2012-03-11 04:57:22 -06:00
Joel Dice
c6ac66e45a fix bug in isAssignableFrom such that primitive array types were considered to be subclasses of the Object array type 2012-02-27 18:16:01 -07:00
Joel Dice
750e5f903c include leading slash in path when parsing URLs in URLStreamHandler
This matches the behavior of OpenJDK's version.
2012-02-18 15:14:16 -07:00
Joshua Warner
bbb4529752 implement File.setExecutable(), File.canExecute(), and File.createTempFile() 2012-02-09 14:23:24 -07:00
Joel Dice
9ba7c504da Merge remote branch 'origin/SWT3.7_UrlUpdates' into oss-master 2011-12-29 11:00:59 -07:00
Seth Goings
51ae790e54 Added UrlTest.java to tests dir 2011-12-29 10:36:33 -07:00
Ben Limmer
d76191d2bb Adding unit tests for File.isAbsolute() method. 2011-12-29 10:17:01 -07:00
Seth Goings
a0c12ad259 Added another floatToIntBits test 2011-12-29 09:51:44 -07:00
Seth Goings
f5a168f584 Fixed tests for floatToIntBits. Probably want to add more comprehensive tests tomorrow (or today... as of 2 minutes) 2011-12-28 23:58:33 -07:00
Ben Limmer
b3850ac76d Initial attempt at resolving SWT3.7 missing operatons in Avian. Everything seems to be working except floatToIntBits, hence the test case failing. 2011-12-28 15:52:53 -07:00
Joel Dice
6153a5c83b Merge remote-tracking branch 'git/master' 2011-11-04 08:11:14 -06:00
Joshua Warner
90dc552463 implement Process.destroy 2011-11-03 12:30:51 -06:00
Joel Dice
916c96c2b9 fix access violation introduced in last commit 2011-09-14 13:27:17 -06:00
Joel Dice
be01e5b687 fix handling of 64-bit arguments to Method.invoke on 32-bit architectures
The previous code failed to account for alignment padding in the
Double and Long classes.
2011-09-12 20:26:32 -06:00
Joel Dice
5dbcbb825b fix Logging test for tails=true build
In the tails=true build, the calling method cannot always be
determined due to stack frames being optimized away, so we must be
prepared for LogRecord.getSourceMethodName to return null.
2011-08-05 18:04:38 -06:00
Joel Dice
c3fa08c430 fix Thread.interrupt and Thread.interrupted
These were both totally broken; the latter wasn't even implemented.
This commit fixes/implements them and adds a simple test to exercise
them.
2011-07-12 14:15:43 -06:00
Joel Dice
b4169ede91 fix reversed arguments to maybeRex in sseMoveRR
This was causing 8-byte SSE-to-SSE moves involving registers
xmm8-xmm15 to be misencoded on x86_64, leading to incorrect code
generation in methods with lots of local variables of type double.
2011-07-06 11:09:06 -06:00
Joel Dice
7bea2b6b7d fix putstatic/putfield for 64-bit volatiles
We must call acquireMonitorForObject before popping the
putstatic/pushfield operands off the stack to avoid clobbering said
operands.
2011-05-23 12:38:12 -06:00
Joel Dice
d02d7c9846 fix IllegalAccessException in LazyLoading test 2011-03-26 12:00:40 -06:00
Joel Dice
453ceb42ab implement lazy class/field/method resolution in JIT compiler
Unlike the interpreter, the JIT compiler tries to resolve all the
symbols referenced by a method when compiling that method.  However,
this can backfire if a symbol cannot be resolved: we end up throwing
an e.g. NoClassDefFoundError for code which may never be executed.
This is particularly troublesome for code which supports multiple
APIs, choosing one at runtime.

The solution is to defer to stub code for symbols which can't be
resolved at JIT compile time.  Such a stub will try again at runtime
to resolve the needed symbol and throw an appropriate error if it
still can't be found.
2011-03-15 18:07:13 -06:00
Joel Dice
48e569c65a add tail call test 2011-03-15 17:51:32 -06:00
Joel Dice
e6cf992af7 uncomment testStatic call in DefineClass
I had commented it out for debugging purposes and forgot to uncomment
it.
2011-03-15 17:33:09 -06:00
Joel Dice
944e223335 use wait/notifyAll too avoid starvation in Trace test
Thread.yield is not enough to ensure that the tracing thread does not
starve the test thread on some QEMU VMs, so we use wait/notifyAll to
make sure both threads have opportunities to run and the test actually
finishes.
2011-02-26 12:40:54 -07:00
Joel Dice
bead78d982 wrap primitive return values using correct types in Method.invoke
The VM uses Integer and Long instances internally to wrap the results
of dynamic method invocations, but Method.invoke should use the
correct, specific type for the primitive (e.g. Character for char).
2011-02-22 17:54:56 -07:00
Joel Dice
20f4510122 fix ARM stack unwinding (part 2)
My previous attempt at this was incomplete; it did not address
Java->native->Java->native call sequences, nor did it address
continuations.  This commit takes care of both.
2011-02-20 13:49:40 -07:00
Joel Dice
59183c7821 fix subroutine stack mapping bug leading to crashes during GC
The stack mapping code was broken for cases of stack slots being
reused to hold primitives or addresses within subroutines after
previously being used to hold object references.  We now bitwise "and"
the stack map upon return from the subroutine with the map as it
existed prior to calling the subroutine, which has the effect of
clearing map locations previously marked as GC roots where
appropriate.
2011-02-16 14:29:57 -07:00
Joel Dice
c743140e08 add new subroutine test
This test covers the case where a local stack slot is first used to
store an object reference and later to store a subroutine return
address.  Unfortunately, this confuses the VM's stack mapping code;
I'll be working on a fix for that next.

The new test requires generating bytecode from scratch, since there's
no reliable way to get javac to generate the code we want.  Since we
already had primitive bytecode construction code in Proxy.java, I
factored it out so we can reuse it in Subroutine.java.
2011-02-16 11:41:33 -07:00
Joel Dice
c4ededda83 add progress indicators to Trace test
Also, add a yield call to the tracing thread so it doesn't monopolize
the CPU.
2011-02-01 18:14:53 -07:00
Joel Dice
a0a8c554d5 add a couple of test cases to NullPointer.java 2011-02-01 08:40:56 -07:00
Joel Dice
69af8a13aa add Thread.getStackTrace test 2011-01-31 09:55:58 -07:00
Joel Dice
f980ceb13e enable use-frame-pointer=true build
Also, include Continuations, Coroutines, and DynamicWind tests in test
suite for continuations=true build.
2011-01-27 21:06:01 -07:00
Joel Dice
e16d5f83af Merge remote branch 'origin/master' into r0.5 2011-01-25 17:30:21 -07:00
Joel Dice
966650f105 make StackOverflow test useful in tails=true build 2011-01-25 17:13:59 -07:00
Joel Dice
0cc6156932 remove redundant code from DefineClass and Zip tests 2011-01-21 16:11:36 -07:00
Joel Dice
3aff7dc861 add TreeSet(Collection) constructor 2011-01-20 09:39:16 -07:00
Joel Dice
b57e734ceb implement Character.forDigit 2011-01-20 09:33:50 -07:00
Joel Dice
51c56c1b3c add PrintStream.print[ln] overloads for primitives and char arrays 2011-01-20 08:26:56 -07:00
Joel Dice
9c36105b8f fix misleading pathnames in bootimage build instructions 2011-01-19 16:00:18 -07:00
Joel Dice
b4941cddbe close FileInputStream before deleting file in FileOutput test
Otherwise, Windows won't let us delete it.
2011-01-17 10:33:43 -07:00
Joel Dice
4a9ff55060 File.length should return 0 for non-existent files 2011-01-17 09:48:34 -07:00
Joel Dice
c855224d14 fix VM abort when ClassLoader.defineClass is used in bootimage build
When loading a class which extends another class that contained a
field of primitive array type using defineClass in a bootimage=true
build, the VM was unable to find the primitive array class, and
makeArrayClass refused to create one since it should already have
existed.

The problem was that the bootimage=true build uses an empty
Machine::BootstrapClassMap, and resolveArrayClass expected to find the
primitive array classes there.  The fix is to check the
Machine::BootLoader map if we can't find it in
Machine::BootstrapClassMap.
2011-01-17 09:36:03 -07:00
Joel Dice
3fe9171766 Merge remote branch 'origin/master' into r0.5 2011-01-16 19:40:01 -07:00
Joel Dice
d5ba7412cd update DefineClass to exercise Class.newInstance
This is an attempt to reproduce an issue reported on the discussion
group.  However, the current form of the test is passing, so further
work will be necessary to trigger the bug.
2011-01-15 10:33:56 -07:00
Joel Dice
b6978c6c68 always create file if necessary in Java_java_io_FileOutputStream_open
Previously, we would only create the file if it did not already exist
*and* we weren't appending.  Now we do so whether appending or not.
2011-01-14 11:26:00 -07:00
Joel Dice
ff18524906 add DefineClass to test suite
As reported on the discussion group, there is a problem with the
ClassLoader.defineClass implementation sunch that this test is not
currently passing, at least for the mode=debug and bootimage=true
builds.  I plan to address these failures soon, but I wanted to add a
test first to make sure I could reproduce them.
2011-01-13 08:59:55 -07:00
Joel Dice
afabe8e07e rework VM exception handling; throw OOMEs when appropriate
This rather large commit modifies the VM to use non-local returns to
throw exceptions instead of simply setting Thread::exception and
returning frame-by-frame as it used to.  This has several benefits:

 * Functions no longer need to check Thread::exception after each call
   which might throw an exception (which would be especially tedious
   and error-prone now that any function which allocates objects
   directly or indirectly might throw an OutOfMemoryError)

 * There's no need to audit the code for calls to functions which
   previously did not throw exceptions but later do

 * Performance should be improved slightly due to both the reduced
   need for conditionals and because undwinding now occurs in a single
   jump instead of a series of returns

The main disadvantages are:

 * Slightly higher overhead for entering and leaving the VM via the
   JNI and JDK methods

 * Non-local returns can make the code harder to read

 * We must be careful to register destructors for stack-allocated
   resources with the Thread so they can be called prior to a
   non-local return

The non-local return implementation is similar to setjmp/longjmp,
except it uses continuation-passing style to avoid the need for
cooperation from the C/C++ compiler.  Native C++ exceptions would have
also been an option, but that would introduce a dependence on
libstdc++, which we're trying to avoid for portability reasons.

Finally, this commit ensures that the VM throws an OutOfMemoryError
instead of aborting when it reaches its memory ceiling.  Currently, we
treat the ceiling as a soft limit and temporarily exceed it as
necessary to allow garbage collection and certain internal allocations
to succeed, but refuse to allocate any Java objects until the heap
size drops back below the ceiling.
2010-12-27 15:55:23 -07:00
Joel Dice
5da8b96931 Merge remote branch 'origin/master' into r0.5 2010-12-21 15:28:34 -07:00
Joel Dice
857dcd13e7 fix 64-bit constant comparisons on 32-bit platforms 2010-12-20 18:08:52 -07:00
Joel Dice
306f1282d0 throw ArithmeticException on divide-by-zero 2010-12-19 17:47:21 -07:00
Joel Dice
d18240cbd6 check for stack overflow on entry to all non-leaf methods
We now check for stack overflow in the JIT build as well as the
interpreted build, throwing a StackOverflowError if the limit
(currently hard-coded to 64KB, but should be easy to make
configurable) is exceeded.
2010-12-19 15:23:19 -07:00
Joel Dice
64b11f0c64 close ZipFile when done with it in Zip test 2010-12-10 01:20:44 -07:00
Joel Dice
7164743009 fix Array.makeObjectArray regression 2010-12-01 15:44:09 -07:00
Joel Dice
84520cde51 Merge remote branch 'origin/master' into openjdk 2010-12-01 14:40:58 -07:00
Joel Dice
1d9489a76e fix a couple of 64-bit-op-on-32-bit-system bugs
We weren't properly handling the case where a 64-bit value is
multipled with itself in multiplyRR, leading to wrong code.  Also,
addCarryCR didn't know how to handle constants more than 8-bits wide.
2010-11-30 16:58:51 -07:00
Joel Dice
19dca18cd0 disable Math.abs(long) intrinsic on 32-bit x86
It never worked and caused the compiler to crash instead due to an
impossible-to-fulfill constraint.
2010-11-30 11:36:18 -07:00
Joel Dice
4f23601b56 fix corner cases which led to crashes in JIT compiler
Compiling the entire OpenJDK class library into a bootimage revealed
some corner cases which broke the compiler, including synchronization
in a finally block and gotos targeting the first instruction of an
unsynchronized method.
2010-11-26 12:36:43 -07:00
Joel Dice
878e98954b add QueryDump heap dump analysis tool 2010-11-22 10:04:28 -07:00
Joel Dice
19dbc61e9f for heapdump=true builds, optionally generate dump on OOM
If the VM runs out of heap space and the "avian.heap.dump" system
property was specified at startup, the VM will write a heap dump to
the filename indicated by that property.  This dump may be analyzed
using e.g. DumpStats.java.
2010-11-18 10:55:00 -07:00
Joel Dice
a611ccda6f Merge remote branch 'origin/master' into openjdk
Conflicts:
	makefile
	src/compile.cpp
	src/compiler.cpp
	src/type-generator.cpp
2010-11-16 10:18:08 -07:00
Joel Dice
937b7a7d34 Merge remote branch 'origin/arm' 2010-11-16 09:56:35 -07:00
Joel Dice
64601e6f3e name VM-internal classes for heapdump=true builds
This makes heap dumps more useful since these classes are now refered
to by name instead of number.

This commit also adds a couple of utilities for parsing heap dumps:
PrintDump and DumpStats.
2010-11-16 09:31:49 -07:00
Joel Dice
86188cfc04 fix OS X openjdk and openjdk-src builds 2010-11-15 20:28:53 -07:00
Joel Dice
7978102cb6 use register for indexing if constant offset is too large (or too small)
Immediate indexes on ARM must be no more than 12 bits, so we must use
a temporary register for values which don't fit.
2010-11-09 11:36:38 -07:00
Joel Dice
75de0a621b fix windows.cpp MySystem::now 2010-11-07 12:35:31 -07:00
Joel Dice
d0a6096eb0 add support for accessing embedded JARs as if they were directories
This allows OpenJDK to access time zone data which is normally found
under java.home, but which we must embed in the executable itself to
create a self-contained build.  The VM intercepts various file
operations, looking for paths which start with a prefix specified by
the avian.embed.prefix property and redirecting those operations to an
embedded JAR.

For example, if avian.embed.prefix is "/avian-embedded", and code
calls File.exists() with a path of
"/avian-embedded/javahomeJar/foo.txt", the VM looks for a function
named javahomeJar via dlsym, calls the function to find the memory
region containing the embeded JAR, and finally consults the JAR to see
if the file "foo.txt" exists.
2010-11-05 13:18:28 -06:00
Joel Dice
1d4b54a9f6 fix failure to add abstract virtuals to class with no declared virtuals 2010-09-25 16:35:18 -06:00
Joel Dice
e75b57a127 don't abort when compiling an array lookup with a constant negative index
Instead, just compile it as a direct call to the thunk which throws an
ArrayIndexOutOfBoundsException.
2010-09-25 15:48:15 -06:00
Joel Dice
ebc54c234f fix signedness error for wide iinc implementation 2010-09-23 08:50:09 -06:00
Joel Dice
88942a9672 search for jar file in Zip.java instead of trying to load by hard-coded name 2010-09-20 17:30:39 -06:00
Joel Dice
d0d53e2e10 fix custom-classloader-related concurrency problems and other bugs
The main changes in this commit ensure that we don't hold the global
class lock when doing class resolution using application-defined
classloaders.  Such classloaders may do their own locking (in fact,
it's almost certain), making deadlock likely when mixed with VM-level
locking in various orders.

Other changes include a fix to avoid overflow when waiting for
extremely long intervals and a GC root stack mapping bug.
2010-09-16 20:49:02 -06:00
Joel Dice
d5b35bea6e remove redundant import from FileOutput.java 2010-09-12 14:41:01 -06:00
Zsombor Gegesy
6752505cb8 add File.canRead()/File.canWrite() implementation 2010-09-11 21:23:46 +02:00
Joel Dice
64100d17c7 Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into openjdk 2010-09-10 15:58:43 -06:00
Joel Dice
cddea7187d preliminary support for using OpenJDK's class library
Whereas the GNU Classpath port used the strategy of patching Classpath
with core classes from Avian so as to minimize changes to the VM, this
port uses the opposite strategy: abstract and isolate
classpath-specific features in the VM similar to how we abstract away
platform-specific features in system.h.  This allows us to use an
unmodified copy of OpenJDK's class library, including its core classes
and augmented by a few VM-specific classes in the "avian" package.
2010-09-10 15:05:29 -06:00
Joel Dice
250a77dc13 handle empty strings properly in Pattern.split
We were incorrectly returning an empty array when the input was empty,
whereas we ought to return an array containing a single empty string.
When the pattern to match was empty, we went into a loop to create an
infinite list of empty strings, only to crash once we've run out of
memory.  This commit addresses both problems.
2010-09-06 11:16:27 -06:00
Joel Dice
7eabe13921 verify file contents in FileOutput test 2010-08-16 09:30:39 -06:00
Zsombor Gegesy
1daa93d3c4 add ability to append to files 2010-08-16 09:23:48 -06:00
Joel Dice
ddc90ef76e fix 64-bit left shifts with constant shifts greater than or equal to 32
The shiftLeftC function in powerpc.cpp was miscompiling such shifts,
leading to crashes due to illegal instructions and other weirdness due
to instructions that meant something completely different.  This
commit fixes that and adds a test to Longs.java to make sure it stays
fixed.
2010-07-23 10:52:58 -06:00
Joel Dice
99bb7924b0 fix stack frame mapping code for exception handlers
Previously, the stack frame mapping code (responsible for statically
calculating the map of GC roots for a method's stack frame during JIT
compilation) would assume that the map of GC roots on entry to an
exception handler is the same as on entry to the "try" block which the
handler is attached to.  Technically, this is true, but the algorithm
we use does not consider whether a local variable is still "live"
(i.e. will be read later) when calculating the map - only whether we
can expect to find a reference there via normal (non-exceptional)
control flow.  This can backfire if, within a "try" block, the stack
location which held an object reference on entry to the block gets
overwritten with a non-reference (i.e. a primitive).  If an exception
is later thrown from such a block, we might end up trying to treat
that non-reference as a reference during GC, which will crash the VM.

The ideal way to fix this is to calculate the true interval for which
each value is live and use that to produce the stack frame maps.  This
would provide the added benefit of ensuring that the garbage collector
does not visit references which, although still present on the stack,
will not be used again.

However, this commit uses the less invasive strategy of ANDing
together the root maps at each GC point within a "try" block and using
the result as the map on entry to the corresponding exception
handler(s).  This should give us safe, if not optimal, results.  Later
on, we can refine it as described above.
2010-02-04 18:03:32 -07:00
Joel Dice
45476eb591 fix handling of volatile longs and doubles on PowerPC
We were miscompiling methods which contained getfield, getstatic,
putfield, or putstatic instructions for volatile 64-bit primitives on
32-bit PowerPC due to not noticing that values in registers are clobbered
across function calls.

The solution is to create a separate Compiler::Operand instance for each
object monitor reference before and after the function call to avoid
confusing the compiler.  To avoid duplicate entries in the constant pool,
we add code look for and, if found, reuse any existing entry for the same
constant.
2010-01-27 17:46:04 -07:00
Joel Dice
04454960ec various bugfixes for handling 64-bit floating point values on 32-bit systems 2009-11-30 15:10:34 +00:00
Joel Dice
5ead8fab17 refactor code responsible for moving data in the compiler
This is partially to address incorrect code generation for 64-bit
floating-point values on x86_32 and partially to reduce unnecessary
moves.
2009-11-27 21:15:12 -07:00
Joel Dice
fb5796b740 don't use SSE for long-to-double conversion on 32-bit systems 2009-11-04 00:02:38 +00:00
Joel Dice
3b4be3decd defer to helper thunk for frem and drem 2009-10-24 19:29:20 -06:00
Joel Dice
064ad572bc use truncation, not rounding in float2Int instructions 2009-10-20 15:43:24 -06:00
Joel Dice
23197da679 fix handling of subroutines in methods of return type long on 32-bit systems 2009-10-06 03:17:12 +00:00
Joel Dice
4f78783ef1 various bugfixes for SSE-based floating-point support 2009-10-05 14:25:12 +00:00
Joel Dice
5dad9bddd6 snapshot 2009-10-04 19:56:48 +00:00
Joel Dice
325f93b4d1 Merge branch 'master' into wip
Conflicts:

	src/compile.cpp
	src/compiler.cpp
	src/machine.h
	src/x86.cpp
2009-09-20 15:43:32 -06:00
Joel Dice
7aa906d97b support runtime-visible annotations and java.lang.reflect.Proxy 2009-09-18 18:01:54 -06:00
Joel Dice
4f794f533e fix handling of reachable, moved weak references in postVisit 2009-09-01 17:23:30 -06:00
Joel Dice
4297fa04b3 run java finalizers in a separate thread to guarantee no application locks are held when doing so 2009-08-24 17:51:31 -06:00
Joel Dice
4c14a9ab66 implement enough of java.util.regex to ensure String methods work for trivial regular expressions 2009-08-20 11:14:05 -06:00
Joel Dice
c27aa559e5 comment out use of currently-unsupported regex functionality in Strings test 2009-08-18 14:21:40 -06:00
Joel Dice
20c1ea08e6 remove a test from Misc.java since it's been moved to Strings.java 2009-08-14 08:53:33 -06:00
Joel Dice
7fcbf9d85c fix reading 2-byte UTF-8 constants 2009-08-14 08:52:31 -06:00
Joel Dice
935329d7cf fix 32-bit shift case in unsignedShiftRightC 2009-08-11 12:36:25 -06:00
Josh warner
af4d82ef7e Merge branch 'master' of git://oss.readytalk.com/avian 2009-08-10 13:42:57 -06:00
Josh warner
1d3ef1fc43 Merge branch 'master' of git://oss.readytalk.com/avian, fixed problems that occured in broader testing
Conflicts:
	src/compile.cpp
	src/compiler.cpp
	src/powerpc.cpp
	src/x86.S
	src/x86.cpp
2009-08-10 13:20:23 -06:00
Joel Dice
012d548bbb fix sign extension from int to long on x86_64 2009-08-07 14:48:30 -06:00
Joel Dice
e5947b5ec0 remove bashism from test.sh 2009-08-06 15:58:26 -06:00
Josh warner
04583ea534 floating point test code 2009-08-06 10:34:28 -06:00
Joel Dice
7911989055 add AbstractList and AbstractSequentialList classes to java.util and listIterator methods to java.util.List 2009-08-04 17:24:29 -06:00
Joel Dice
5b23ad3f40 remove unused inner class in Tree.java 2009-07-28 16:58:33 -06:00
Joel Dice
f869e5be21 Merge branch 'master' into gnu
Conflicts:

	classpath/java/util/TreeSet.java
2009-07-25 18:38:57 -06:00
Joel Dice
d3a249a3fa Merge branch 'master' of oss.readytalk.com:/var/local/git/avian 2009-07-25 18:36:27 -06:00
Joel Dice
d327f6ba5a implement java.util.TreeMap 2009-07-25 15:41:43 -06:00
Joel Dice
3787985b25 implement basic finalization support
This implementation does not conform to the Java standard in that
finalize methods are called from whichever thread happens to be garbage
collecting, and that thread may hold locks, whereas the standard
guarantees that finalize will be run from a thread which holds no locks.
Also, an object will never be finalized more than once, even if its
finalize method "rescues" (i.e. makes reachable) the object such that it
might become unreachable a second time and thus a candidate for
finalization once more.  It's not clear to me from the standard if this
is OK or not.

Nonwithstanding the above, this implementation is useful for "normal"
finalize methods which simply release resources associated with an
object.
2009-07-21 18:57:55 -06:00
Joel Dice
d12b441aa1 restore state from subroutine after jsr to avoid later confusion determining basic block boundaries 2009-07-20 08:26:01 -06:00
Joel Dice
5f6f8039e6 various bugfixes in subroutine stack mapping code 2009-07-13 17:49:15 -06:00
Joel Dice
b308354a3a handle subroutines properly when generating frame maps (initial sketch) 2009-06-26 15:36:04 -06:00
Joel Dice
b35a5a6db6 add new test to Subroutine to trigger latent bug compiling multiple jsr instructions to the same address 2009-06-10 18:11:27 -06:00
Joel Dice
98be5c509e more progress towards GNU Classpath compatibility 2009-06-03 16:17:55 -06:00
Joel Dice
a8c836d2cb move continuations tests into test/extra 2009-05-25 23:30:40 -06:00
Joel Dice
cc6bf3f42b bugfixes and print statements in DynamicWind 2009-05-24 22:50:11 -06:00
Joel Dice
03e7a61bfd add test/DynamicWind.java 2009-05-24 18:20:50 -06:00
Joel Dice
db91c27441 move Continuations and Coroutines tests to top-level test directory 2009-05-18 09:17:49 -06:00
Joel Dice
8463bb4056 minor tweaks to test classes 2009-05-16 21:41:27 -06:00
Joel Dice
8573619720 refine Continuations.java and add Coroutines.java 2009-05-16 21:15:41 -06:00
Joel Dice
195d95d809 continuation bugfixes 2009-05-16 18:39:08 -06:00
Joel Dice
6dc6f01359 move extra tests (not run as part of "make test") into "extra" package 2009-05-16 02:01:32 -06:00
Joel Dice
06fd492b1a add Continuations test 2009-05-16 02:01:07 -06:00
Joel Dice
ef12477670 more work on Integers.java 2009-03-13 18:36:11 -06:00
Joel Dice
1f35e5efb4 fix cut-and-paste foolishness in Integers.java 2009-03-13 18:29:11 -06:00
Joel Dice
eb45ec7611 add some tests to Integers.java 2009-03-13 18:22:34 -06:00
Joel Dice
68ed5e6cb5 fix addC for case where bit 15 of constant is set 2009-03-08 20:09:06 -06:00
Joel Dice
a0e503ad0a optimize moveRR and fix andC 2009-03-05 20:21:15 -07:00
Joel Dice
ed9e54bca1 add a few more tests to Floats.java 2009-03-04 17:52:06 -07:00
Joel Dice
8410e1d683 ensure reads and writes of volatile 64-bit fields are atomic 2009-03-03 18:02:11 -07:00
Joel Dice
a1ec71423e Merge branch 'master' into powerpc
Conflicts:

	makefile
	src/assembler.h
	src/binaryToMacho.cpp
	src/compile.cpp
	src/compiler.cpp
	src/x86.cpp
2009-02-09 16:22:01 -07:00
Joel Dice
29616c4abc freeze target site when using temporary in maybeMove 2009-02-08 18:58:33 -07:00
Joel Dice
6297c8a906 add tests to Arrays.java and Longs.java 2009-02-02 19:12:07 -07:00
Joel Dice
5a76277b84 remove dead buddies from values so they don't accumulate without bound; when resolving sites, avoid picking those which belong to other values; various bugfixes 2009-01-11 15:53:51 -07:00
Joel Dice
54ad7c4e98 tolerate ConstantValue attributes on non-static fields, since the compiler ensures that they are initialized in any constructors for that class (i.e., the VM does not need to do anything special to initialize them) 2009-01-10 12:25:52 -07:00
Joel Dice
b23f7374e9 don't steal sites in pickJunctionSite 2008-12-20 17:45:52 -07:00
Joel Dice
75b3bf98ab pick only unfrozen frame sites in save 2008-12-20 11:13:58 -07:00
Joel Dice
d50febe088 various control-flow related bugfixes 2008-12-11 18:09:36 -07:00
Joel Dice
14e509dfd2 add additional jsr test to Subroutine 2008-11-17 08:21:20 -07:00
Joel Dice
fb770d10fb implement jsr/ret support
The Subroutine test won't pass due to a bug in the stack mapping code
such that objects may be missed during GC.
2008-11-13 17:59:21 -07:00
Joel Dice
4dd1d1eec8 add Subroutine test to cover jsr and ret instructions 2008-11-12 10:07:30 -07:00
Joel Dice
c80eb51c17 Merge branch 'master' into powerpc
Conflicts:

	makefile
	src/assembler.h
	src/compile.cpp
	src/compiler.cpp
	src/compiler.h
	src/finder.cpp
2008-11-11 08:21:48 -07:00
Joel Dice
cae5202be0 split Misc.java into four separate files 2008-11-10 17:07:15 -07:00
Joel Dice
1ba497d90a fix Exceptions test for amd64 2008-11-02 15:25:51 -07:00
Joel Dice
04da77e95b snapshot 2008-11-02 13:35:35 -07:00
Joel Dice
5eb905fd2d revert accidentally-committed change to Hello.java 2008-10-21 17:42:05 -06:00
Joel Dice
6a5116e7a7 implement primitive heap dump facility for memory profiling, accessible via Runtime.dumpHeap
The proper way to do this is to implement a subset of JVMTI, but this
will do the job for now.
2008-10-21 17:38:20 -06:00
Joel Dice
7d6ca28b2f snapshot 2008-10-18 18:15:57 -06:00
Joel Dice
4c307ae8c6 implement minimal, read-only versions of RandomAccessFile and ZipFile 2008-10-03 14:15:47 -06:00
Joel Dice
011cbe44e3 test a simple loop in Simple.java 2008-09-07 20:22:27 -06:00
Joel Dice
42123c4c8c Merge branch 'master' of oss.readytalk.com:/var/local/git/avian into powerpc 2008-09-06 19:40:50 -06:00
Joel Dice
ed806ca740 working towards compiling simple methods 2008-09-06 15:25:41 -06:00
Joel Dice
e0e827596e make Long.parseLong more efficient 2008-08-29 11:37:53 -06:00
Zsombor
e1d712ef71 java.util.BitSet implementation 2008-07-13 18:16:55 -06:00
Joel Dice
a016eeaba0 fix Long.toString for Long.MIN_VALUE case 2008-07-13 17:54:44 -06:00
Joel Dice
107ac01304 fix addCR and subtractCR for cases of 64-bit constants on amd64 2008-07-02 08:52:35 -06:00
Joel Dice
e9c37f5ffd add more tests of operations on longs to Misc.java 2008-06-12 11:00:43 -06:00
Joel Dice
fc8c5a2ea9 fix a few bugs revealed by ProGuard optimizations, including too-early constant propagation during array loads and stores 2008-06-10 08:49:13 -06:00
Joel Dice
f05318b787 fix thinkos in d2i and friends 2008-05-22 18:08:41 -06:00
Joel Dice
3326aafdac various 32-bit fixes 2008-05-22 11:15:18 -06:00
Joel Dice
21cb1c3c8f remove Event::validate, since it is no longer needed and actually causes trouble 2008-05-20 16:47:53 -06:00
Joel Dice
36dbf1ad14 fix another local variable caching bug 2008-05-20 15:24:10 -06:00
Joel Dice
d604efd8f5 fix local variable caching bug 2008-05-20 13:11:42 -06:00
Joel Dice
c9f06933e2 test long addition and subtraction in Misc, as well as multidimensional array creation 2008-05-18 09:45:52 -06:00
Joel Dice
b6b84af123 various bugfixes 2008-05-17 21:32:14 -06:00
Joel Dice
7f72a6469d more register marshalling bugfixes; simple swt apps now run on amd64 2008-05-15 17:19:23 -06:00
Joel Dice
bbd1ee5540 various register marshalling bugfixes 2008-05-15 14:00:57 -06:00
Joel Dice
bf08cc4c53 fix array bounds checks 2008-04-30 11:47:25 -06:00
Joel Dice
918193fa60 fix 32-bit right unsigned shifts on amd64 2008-04-30 11:15:21 -06:00
Joel Dice
e2b24263a2 various bugfixes 2008-04-30 09:44:17 -06:00
Joel Dice
1b5f14d847 re-enable tests in Misc and get them working 2008-04-28 09:53:48 -06:00
Joel Dice
d6c3b2327f bugfixes; enums test now succeeds 2008-04-20 13:35:36 -06:00
Joel Dice
525f733171 Merge branch 'master' into compiler
Conflicts:

	src/compile.cpp
	src/compiler.cpp
	src/compiler.h
2008-04-13 13:48:20 -06:00
Joel Dice
907382bcee fix broken field alignment in parseFieldTable which caused longs to overlap other fields on 32-bit systems in certain cases 2008-03-31 18:34:57 -06:00
Joel Dice
9e2e614a15 various fixes to get invokevirtual working 2008-03-10 16:37:21 -06:00
Joel Dice
7cfb89bd2a Merge branch 'master' into compiler 2008-03-09 11:31:55 -06:00
Joel Dice
ec3f42c66e allow test.sh to work in debug-fast and fast modes 2008-03-06 13:28:28 -07:00
Joel Dice
9fe00836f7 fix stack mapping code to do as many passes as necessary
Previously, we had been doing exactly two passes over the event log to
caculate the stack object reference map at each trace point.  It turns
out the correct number of passes depends on how many incorrect
assumptions we make about what the stack looks like at instructions with
multiple predecessors (i.e. targets of jumps and branches).

Each time we detect we've made one or more incorrect assumptions during
a pass, we must do another pass to correct those assumptions.  That pass
may in turn reveal further incorrect assumptions, and so on.
2008-03-05 14:44:17 -07:00
Joel Dice
d654c943f3 various bugfixes and tweaks in new compiler, primarily related to duplicating stack operands 2008-02-17 13:57:40 -07:00
Joel Dice
b9fa7179d9 more work on new compiler; addition now works 2008-02-11 17:20:32 -07:00
Joel Dice
88a8e74a53 fix register to memory mov1 implementation 2008-01-18 15:01:50 -07:00
Joel Dice
f0d556b0ec fix handling of call target resolution for non-virtual calls 2008-01-11 15:16:24 -07:00
Joel Dice
a9a0252209 add another test to Misc.java 2008-01-10 15:47:54 -07:00
Joel Dice
4c938d496e fix 64-bit bitshifts on 32-bit systems 2008-01-10 13:47:55 -07:00
Joel Dice
259dd643e0 fix over-agressive state reset in state mapping code; logging tweaks 2008-01-07 14:32:41 -07:00
Joel Dice
888dce8f3c bugfixes and cleanups for new stack mapping code 2008-01-07 09:01:35 -07:00
Joel Dice
7a0079e258 add object lifetime tests to GC.java, which currently fail with JIT 2008-01-06 12:20:30 -07:00
Joel Dice
4e3e12e9d4 test fixed-sized object support in GC.java 2008-01-01 18:09:05 -07:00
Joel Dice
f151d85f4e intercept SIGSEGV and throw NullPointerExceptions 2007-12-31 15:40:56 -07:00
Joel Dice
5d65e7c220 handle synchronized methods properly in JIT mode 2007-12-27 17:02:05 -07:00
Joel Dice
15857135c0 more JIT fixes; all tests now pass on x86-32 2007-12-23 11:48:22 -07:00
Joel Dice
31cf1754ce fix frame trace bug leading to incomplete stack coverage during GC; fix thinko pushing arguments in vmInvoke 2007-12-23 11:01:41 -07:00
Joel Dice
4c3a2575ba lots of JIT bugfixes; all top-level tests now pass 2007-12-17 13:55:31 -07:00
Joel Dice
796a64a426 lots of JIT bugfixes and cleanups 2007-12-15 17:24:15 -07:00
Joel Dice
b2147c2c99 lots of JIT bugfixes and a few new instructions 2007-12-12 15:19:13 -07:00
Joel Dice
fab77e4d96 don't call prologue and epilogue from compileDefault, since we want the original rbp and rsp values 2007-12-11 18:19:03 -07:00
Joel Dice
33b2a4a1e8 support absolute operands on virtual stack and absolute to memory movs 2007-12-11 17:27:04 -07:00
Joel Dice
d70e3aaefb JIT progress: new, invokespecial, etc. 2007-12-11 16:52:28 -07:00
Joel Dice
fdeafe46fd 2+2 test now works with new JIT code 2007-12-11 14:26:59 -07:00
James Sanders
3f8a370ba8 Implemented Runtime.exec, Process.waitFor and Process.exitValue for non-windows 2007-11-30 16:39:51 -07:00
James Sanders
8f652ce12d Implemented native Process.exitValue and Process.waitFor on windows 2007-11-29 18:01:07 -07:00
James Sanders
3f0e8a9777 Implemented Runtime.exec(String) and Runtime.exec(String[]) and added test class 2007-11-28 17:51:00 -07:00
Joel Dice
19d36cc463 implement impdep1 instruction for lazily loading bootstrap classes 2007-11-05 08:29:43 -07:00