Commit Graph

2333 Commits

Author SHA1 Message Date
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