OSDN Git Service

android-x86/dalvik.git
13 years agoMerge "Use the card table to scan the immune region of the heap." into dalvik-dev
Carl Shapiro [Wed, 2 Mar 2011 23:45:23 +0000 (15:45 -0800)]
Merge "Use the card table to scan the immune region of the heap." into dalvik-dev

13 years agoUse the card table to scan the immune region of the heap.
Carl Shapiro [Wed, 2 Mar 2011 23:43:39 +0000 (15:43 -0800)]
Use the card table to scan the immune region of the heap.

Using the card table results in a dramatic cost reduction in scanning
time.  During a reboot, scanning each object in the zygote for
pointers to the application heap costs an average of 20ms of thread
time on a stingray with 8 megabyte zygote.  In comparison, scanning
dirty cards in the zygote costs 300us on average.

Change-Id: I1dba35646d509e6b1b4535e291a1eb6f66d7b218

13 years agoam bf0cce6d: Fix build.
Raphael [Wed, 2 Mar 2011 23:11:14 +0000 (15:11 -0800)]
am bf0cce6d: Fix build.

* commit 'bf0cce6d471ffcd65161eca6e027e1b66f02f054':
  Fix build.

13 years agoam 021b2229: am 7027ab61: am 88041260: am dd19f5b9: Merge "Fix for a crash when GC...
Romain Guy [Wed, 2 Mar 2011 23:11:11 +0000 (15:11 -0800)]
am 021b2229: am 7027ab61: am 88041260: am dd19f5b9: Merge "Fix for a crash when GC weak references."

* commit '021b222995fb625cc6f90855446a18ce911f2133':
  Fix for a crash when GC weak references.

13 years agoam b3086d3b: am 0c91e9d5: am 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in...
Raphael Moll [Wed, 2 Mar 2011 23:11:00 +0000 (15:11 -0800)]
am b3086d3b: am 0c91e9d5: am 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in binary mode."

* commit 'b3086d3b933b6942c32a3c9ef4d0ed8f6850afac':
  Open dexdump files in binary mode.

13 years agoFix build.
Raphael [Wed, 2 Mar 2011 22:37:37 +0000 (14:37 -0800)]
Fix build.

The build server is stuck waiting for the O_BINARY change
from system/core. This will unblock it.

Change-Id: Iedd5f7a6cb140ac07b5084948a69eb5d94e2070f

13 years agoMerge "Yak-shaving in support of the exception cleanup." into dalvik-dev
Dan Bornstein [Wed, 2 Mar 2011 22:14:22 +0000 (14:14 -0800)]
Merge "Yak-shaving in support of the exception cleanup." into dalvik-dev

13 years agoMerge "Change invoke-object-init to /range form" into dalvik-dev
Andy McFadden [Wed, 2 Mar 2011 22:01:59 +0000 (14:01 -0800)]
Merge "Change invoke-object-init to /range form" into dalvik-dev

13 years agoHandle OP_THROW in the method JIT.
Ben Cheng [Sat, 19 Feb 2011 01:12:42 +0000 (17:12 -0800)]
Handle OP_THROW in the method JIT.

The current implementation is to reconstruct the leaf Dalvik frame and
punt to the interpreter, since the amount of work involed to match
each catch block and walk through the stack frames is just not worth
JIT'ing.

Additional changes:
- Fixed a control-flow bug where a block that ends with a throw shouldn't
  have a fall-through block.
- Fixed a code cache lookup bug so that method-based compilation is
  guaranteed a slot in the profiling table.
- Created separate handler routines based on opcode format for the
  method-based JIT.
- Renamed a few core registers that also have special meanings to the
  VM or ARM architecture.

Change-Id: I429b3633f281a0e04d352ae17a1c4f4a41bab156

13 years agoYak-shaving in support of the exception cleanup.
Dan Bornstein [Wed, 2 Mar 2011 00:16:12 +0000 (16:16 -0800)]
Yak-shaving in support of the exception cleanup.

This change restructures where early class initialization happens in
the VM, moving a few chunks of it together into Init.c. The exception
classes get moved here as well as the super-core classes needed
particularly for dex optimization. This is all done to support a follow-up
change that will put more of the verifier's required exceptions into
the list. (Before this change, it would have been unsafe to do that.)

This change also paves the way for further consolidation of class and
member initialization, which I hope will make it easier to transition
the whole mess into the new copying-gc world, when that arrives on the
scene.

Bug: 3500987
Change-Id: I0caae09432a05287af53aa36a6663997ab310985

13 years agoChange invoke-object-init to /range form
Andy McFadden [Tue, 1 Mar 2011 23:47:46 +0000 (15:47 -0800)]
Change invoke-object-init to /range form

The invoke-object-init instruction pretends to be a regular invoke
that only knows how to call Object.<init>.  As such it always takes
one argument, and if we use the /range version we can specify the
"this" register with 16 bits instead of only 4.

Bug 3486699

Change-Id: I9ee4700c6935beee1dcbaa583b57befd33641414

13 years agoam 7027ab61: am 88041260: am dd19f5b9: Merge "Fix for a crash when GC weak references."
Romain Guy [Wed, 2 Mar 2011 20:53:48 +0000 (12:53 -0800)]
am 7027ab61: am 88041260: am dd19f5b9: Merge "Fix for a crash when GC weak references."

* commit '7027ab6198f9d27b376e467971d55f14b160e40f':
  Fix for a crash when GC weak references.

13 years agoam 0c91e9d5: am 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in binary mode."
Raphael Moll [Wed, 2 Mar 2011 20:53:46 +0000 (12:53 -0800)]
am 0c91e9d5: am 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in binary mode."

* commit '0c91e9d5a4078bc1c6da2c225bde5fb703fd9d58':
  Open dexdump files in binary mode.

13 years agoMerge "mterp generation cleanup" into dalvik-dev
buzbee [Wed, 2 Mar 2011 17:55:18 +0000 (09:55 -0800)]
Merge "mterp generation cleanup" into dalvik-dev

13 years agomterp generation cleanup
buzbee [Tue, 1 Mar 2011 23:42:31 +0000 (15:42 -0800)]
mterp generation cleanup

Change I3a22048a introduced a new interpreter breakout mechanism, and
with it a bit of hackish ugliness in the mechanism to automatically
generate interpreter source files.

This CL applies some Lipo and Botox:
   o New alt-op-start, alt-op-end commands removed - will just use
     existing op-start & op-end.
   o New command "handler-style" to explicitly declare interpreter
     style (computed-goto, jump-table or all-c).  Previous trigger
     on "handler-size==0" removed.
   o Alternate handler stub no longer using fixed file name, but
     intead is named by command asm-alt-stub (which is modelled on
     existing alt-stub command).
   o Previous CL stated requirement for explicitly called-out handler
     for the Dalvik dispatch opcode.  Turns out this was not necessary.
     Requirement removed.

Change-Id: I20f7411820715476533c2073d28f357e28c1ae52

13 years agoMerge "Fix PopLocalFrame" into dalvik-dev
Andy McFadden [Tue, 1 Mar 2011 23:14:20 +0000 (15:14 -0800)]
Merge "Fix PopLocalFrame" into dalvik-dev

13 years agoFix PopLocalFrame
Andy McFadden [Tue, 1 Mar 2011 22:28:30 +0000 (14:28 -0800)]
Fix PopLocalFrame

In an indirect-ref world we would return the wrong thing.

From http://b.android.com/15119

Change-Id: Iec02aaff1d0bdf6036ba6d5676d4ae15688c1622

13 years agoClean up a few more exceptions.
Dan Bornstein [Tue, 1 Mar 2011 21:22:13 +0000 (13:22 -0800)]
Clean up a few more exceptions.

Bug: 3500987
Change-Id: I9d6dcf429ca67a64a81e4489b1087948f9673e07

13 years agoam 88041260: am dd19f5b9: Merge "Fix for a crash when GC weak references."
Romain Guy [Tue, 1 Mar 2011 21:50:40 +0000 (13:50 -0800)]
am 88041260: am dd19f5b9: Merge "Fix for a crash when GC weak references."

* commit '88041260251335cc497db4708f0057d5367da8b4':
  Fix for a crash when GC weak references.

13 years agoam 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in binary mode."
Raphael Moll [Tue, 1 Mar 2011 21:50:37 +0000 (13:50 -0800)]
am 98e0347a: am 2b3d7e8e: Merge "Open dexdump files in binary mode."

* commit '98e0347a7f016764403384567267db6e9dcf8edf':
  Open dexdump files in binary mode.

13 years agoam dd19f5b9: Merge "Fix for a crash when GC weak references."
Romain Guy [Tue, 1 Mar 2011 20:39:47 +0000 (12:39 -0800)]
am dd19f5b9: Merge "Fix for a crash when GC weak references."

* commit 'dd19f5b91a1032e60871febb143850fd81000c5a':
  Fix for a crash when GC weak references.

13 years agoam 2b3d7e8e: Merge "Open dexdump files in binary mode."
Raphael Moll [Tue, 1 Mar 2011 20:39:44 +0000 (12:39 -0800)]
am 2b3d7e8e: Merge "Open dexdump files in binary mode."

* commit '2b3d7e8eccd7cbf64b2ac41c05073a9191d0d3b3':
  Open dexdump files in binary mode.

13 years agoMerge "Clean up a few more exceptions." into dalvik-dev
Dan Bornstein [Tue, 1 Mar 2011 19:20:27 +0000 (11:20 -0800)]
Merge "Clean up a few more exceptions." into dalvik-dev

13 years agoam 46413c1b: Add notice file for dx.jar and dexdump
Xavier Ducrohet [Tue, 1 Mar 2011 19:17:08 +0000 (11:17 -0800)]
am 46413c1b: Add notice file for dx.jar and dexdump

* commit '46413c1b857d2d25af800ffbb11b6eaefac0136a':
  Add notice file for dx.jar and dexdump

13 years agoClean up a few more exceptions.
Dan Bornstein [Tue, 1 Mar 2011 18:28:42 +0000 (10:28 -0800)]
Clean up a few more exceptions.

This includes a fix for ExceptionInInitializerError, which previously
could have gotten thrown before itself being initialized.

Change-Id: I3f27091f79b1a7e965c6261d3ff78109e0e4a23f

13 years agoMerge "Improved register allocation for check-cast instructions." into dalvik-dev
jeffhao [Tue, 1 Mar 2011 19:04:03 +0000 (11:04 -0800)]
Merge "Improved register allocation for check-cast instructions." into dalvik-dev

13 years agoException cleanup in the assembly interpreters
buzbee [Tue, 1 Mar 2011 00:38:50 +0000 (16:38 -0800)]
Exception cleanup in the assembly interpreters

Removed the last of the "exception as strings" calls from the
assembly interpreters, replacing them with the helper functions.

Change-Id: I4c44cde348ed7d2ea99f908bc22166afeb5e3d37

13 years agoMerge "New interpreter breakout mechanism" into dalvik-dev
buzbee [Tue, 1 Mar 2011 17:25:57 +0000 (09:25 -0800)]
Merge "New interpreter breakout mechanism" into dalvik-dev

13 years agoAdd notice file for dx.jar and dexdump
Xavier Ducrohet [Tue, 1 Mar 2011 02:16:32 +0000 (18:16 -0800)]
Add notice file for dx.jar and dexdump

Change-Id: I0094d382e866b8767383516abd367c98712da594

13 years agoMerge "Add comments describing the dump references visitor." into dalvik-dev
Carl Shapiro [Tue, 1 Mar 2011 02:27:32 +0000 (18:27 -0800)]
Merge "Add comments describing the dump references visitor." into dalvik-dev

13 years agoNew interpreter breakout mechanism
buzbee [Thu, 24 Feb 2011 17:38:17 +0000 (09:38 -0800)]
New interpreter breakout mechanism

Introduce parallel handler entry points for mterp interpreters as a step
towards fully supporting debug, profile and JIT within mterp (instead of
bailing out to the portable debug interpreter).

This CL contains most of the structural changes that need to happen,
but does not yet enable the new switch mode.  In short, within the
mterp assembly interpreter register rIBASE points to an array of handlers
for Dalvik opcodes.  Instead of periodically checking for suspend,
debug, profiling and JIT trace selection breakouts, rIBASE may simply
be altered to point to the parallel breakout handlers when control needs
to be rerouted.  This will enable us to eliminate the separate portable
debug interpreter and the entire mechanism of switching between the fast
and portable interpreters.

The x86 implementation required a large number of changes because of the
need to dedicate a register to holding the table base.  It will now use %edx
(which was previously scratch).

Changes include:

  o Support for two styles of mterp assembly code generation: computed goto
    and jump table (ARM uses computed goto, x86 uses jump table)
  o New mterp config operators to trigger generation of alternate entry points.
  o Alternate entries route execution through new dvmCheckInst().  That's
    where the checking code will go.
  o For x86, reserved register edx as dedicated rIBASE.
  o For jump-table mterps, ignore "%break" operator and allow variable-sized
    handlers with no "sister" region.

Note that the x86-atom implementation will need substantial changes
to function in this new model.

Change-Id: I3a22048adb7dcfdeba4f94fbb977b26c3ab2fcb3

13 years agoAdd comments describing the dump references visitor.
Carl Shapiro [Tue, 1 Mar 2011 02:14:22 +0000 (18:14 -0800)]
Add comments describing the dump references visitor.

Change-Id: I9346cb7254c76c60b7d4feb412bfc4be4df4d73a

13 years agoImproved register allocation for check-cast instructions.
jeffhao [Mon, 28 Feb 2011 19:05:08 +0000 (11:05 -0800)]
Improved register allocation for check-cast instructions.

Check-cast instructions that don't use the same register for source and
destination no longer use an intermediate register due to expansion.
This saves a move instruction and, in some cases, a register.

Change-Id: Ib704fe51ec172e05efbff708e8b63004457cc8cb

13 years agoMerge "Fix a minor typo." into dalvik-dev
Dan Bornstein [Mon, 28 Feb 2011 22:26:05 +0000 (14:26 -0800)]
Merge "Fix a minor typo." into dalvik-dev

13 years agoFix a minor typo.
Dan Bornstein [Mon, 28 Feb 2011 22:25:24 +0000 (14:25 -0800)]
Fix a minor typo.

Change-Id: I3d697b23ad5249b0a8bd772b7cd9947ab8d30f62

13 years agoMerge "More exception cleanup." into dalvik-dev
Dan Bornstein [Mon, 28 Feb 2011 21:00:33 +0000 (13:00 -0800)]
Merge "More exception cleanup." into dalvik-dev

13 years agoMerge "Use new negative array size exception reporting" into dalvik-dev
buzbee [Mon, 28 Feb 2011 19:31:06 +0000 (11:31 -0800)]
Merge "Use new negative array size exception reporting" into dalvik-dev

13 years agoMore exception cleanup.
Dan Bornstein [Mon, 28 Feb 2011 19:23:26 +0000 (11:23 -0800)]
More exception cleanup.

Most notable is that StringIndexOutOfBoundsException now gets two
argument-specific helper functions.

Change-Id: Ia4353589f1ee14ac337cdf637a66b89bca99a48a

13 years agoMerge "Minor improvements to marking convenience functions." into dalvik-dev
Carl Shapiro [Mon, 28 Feb 2011 19:15:03 +0000 (11:15 -0800)]
Merge "Minor improvements to marking convenience functions." into dalvik-dev

13 years agoMinor improvements to marking convenience functions.
Carl Shapiro [Sat, 26 Feb 2011 03:36:34 +0000 (19:36 -0800)]
Minor improvements to marking convenience functions.

* Refine the type signature of isMarked to improve its type safety.

* Remove the untagging operation from isUnmarked required by an
  earlier string intern table implementation.

Change-Id: Ib3beace789b5c43ead25f6e2ad7b6dc3e2427e51

13 years agoUse new negative array size exception reporting
buzbee [Mon, 28 Feb 2011 19:10:33 +0000 (11:10 -0800)]
Use new negative array size exception reporting

Follow-up to change 98624 to enhance assembly interpreters to use
the new dvmThrowNegativeArraySizeException.

Change-Id: I9c8b425b3255d42afa1dc466024c03eeeb4eec23

13 years agoMerge "Assert that objects passed to scanObject are marked." into dalvik-dev
Carl Shapiro [Mon, 28 Feb 2011 18:46:53 +0000 (10:46 -0800)]
Merge "Assert that objects passed to scanObject are marked." into dalvik-dev

13 years agoMerge "Expand away some infrequently used logging macros." into dalvik-dev
Carl Shapiro [Mon, 28 Feb 2011 18:44:06 +0000 (10:44 -0800)]
Merge "Expand away some infrequently used logging macros." into dalvik-dev

13 years agoMerge "More exception cleanup." into dalvik-dev
Dan Bornstein [Mon, 28 Feb 2011 18:38:32 +0000 (10:38 -0800)]
Merge "More exception cleanup." into dalvik-dev

13 years agoMerge "Update dexopt control logic" into dalvik-dev
Andy McFadden [Mon, 28 Feb 2011 15:43:17 +0000 (07:43 -0800)]
Merge "Update dexopt control logic" into dalvik-dev

13 years agoAssert that objects passed to scanObject are marked.
Carl Shapiro [Sat, 26 Feb 2011 03:42:07 +0000 (19:42 -0800)]
Assert that objects passed to scanObject are marked.

This condition could be assumed true as scanObject was only passed
objects that had been popped from the mark stack.  With the new
garbage collector objects to scan may be coming from bitmap or card
table scans.  Improper use of the scanning primitives can result in
unmarked objects being scanned.

Change-Id: I416cad2638c512a88a14fdfa693eb62392b5e63b

13 years agoExpand away some infrequently used logging macros.
Carl Shapiro [Sat, 26 Feb 2011 02:59:44 +0000 (18:59 -0800)]
Expand away some infrequently used logging macros.

Change-Id: I642c8dbf794d5a6f73b539eb5f47140368c2f397

13 years agoMore exception cleanup.
Dan Bornstein [Fri, 25 Feb 2011 23:49:29 +0000 (15:49 -0800)]
More exception cleanup.

Added a few more classes to the list and tweaked
dvmThrowNegativeArraySizeException() to actually take the size as an
argument. Still pending: Changing the assembly interp files to make
better calls.

Change-Id: I3a470f5fd4c9a1f7f55fc875900096c00c4ac010

13 years agoMore exception cleanup.
Dan Bornstein [Fri, 25 Feb 2011 21:31:45 +0000 (13:31 -0800)]
More exception cleanup.

I added a few more exception class objects, and migrated existing
uses of those exceptions away from naming the class as a string.

I left one TODO in the x86-atom interp, as there is nobody actively
maintaining that codebase.

Change-Id: I9226a2d81b0389a14f7a3770d978a9bbe98c2898

13 years agoUpdate dexopt control logic
Andy McFadden [Fri, 25 Feb 2011 00:53:55 +0000 (16:53 -0800)]
Update dexopt control logic

This adds a new mode, -Xdexopt:full.  In most ways it behaves like
-Xdexopt:verified (the default), but when an un-optimized class is
loaded we will do a full set of optimizations instead of just the
"essential" set.

For classes that are verified and optimized by dexopt (which is to
say, most of them), this has no effect.  For the others, this trades
off speed for space, substituting quickened instructions but causing
copy-on-write of pages mapped from the DEX file.

This also demotes the substitution of execute-inline opcodes to
"non-essential" status.

Change-Id: I392fb2ff0bf0af83c000937079895d25ce7f0cb1

13 years agoMerge "Add a bit of structure to the Exception startup code." into dalvik-dev
Dan Bornstein [Fri, 25 Feb 2011 20:30:59 +0000 (12:30 -0800)]
Merge "Add a bit of structure to the Exception startup code." into dalvik-dev

13 years agoAdd a bit of structure to the Exception startup code.
Dan Bornstein [Thu, 24 Feb 2011 23:47:20 +0000 (15:47 -0800)]
Add a bit of structure to the Exception startup code.

This is in preparation for having a *lot* more exception classes get
looked up at startup time.

Change-Id: Id464c5b19a6a15f6779d8959f5d6397a0c6c5842

13 years agoMerge "Fix a divide-by-zero" into dalvik-dev
Andy McFadden [Fri, 25 Feb 2011 01:13:26 +0000 (17:13 -0800)]
Merge "Fix a divide-by-zero" into dalvik-dev

13 years agoFix a divide-by-zero
Andy McFadden [Fri, 25 Feb 2011 00:55:40 +0000 (16:55 -0800)]
Fix a divide-by-zero

Only happened when JIT was enabled, you selected libdvm_assert.so, and
the JIT didn't find anything useful to do before the VM exited.

Change-Id: I031d6c1c589a90f7c4580c262caa9e986cda9e63

13 years agoMerge "Changed dx register allocator to place more phis and reuse locals." into dalvi...
jeffhao [Thu, 24 Feb 2011 23:26:48 +0000 (15:26 -0800)]
Merge "Changed dx register allocator to place more phis and reuse locals." into dalvik-dev

13 years agoChanged dx register allocator to place more phis and reuse locals.
jeffhao [Thu, 24 Feb 2011 01:45:51 +0000 (17:45 -0800)]
Changed dx register allocator to place more phis and reuse locals.

This change makes the register allocator try to place all phis earlier,
by using whichever register is most common among its sources and result.

In addition, the code tries much harder to reuse registers originally
reserved for locals if they are no longer live. This leads to fewer
registers in many methods.

Change-Id: I5f69320686184f784384f5cf3a1d9c97e44ec19d

13 years agoMerge "Fix for a crash when GC weak references."
Romain Guy [Thu, 24 Feb 2011 19:24:47 +0000 (11:24 -0800)]
Merge "Fix for a crash when GC weak references."

13 years agoRound three of exception cleanup.
Dan Bornstein [Thu, 24 Feb 2011 18:32:47 +0000 (10:32 -0800)]
Round three of exception cleanup.

I expanded AIOOBE since it was the odd one out, migrated the wrappers
in Exception.h to the end of the file where they're less disruptive,
and tweaked a couple other throws in the main vm code.

Change-Id: Iae11fda2c47989ce7579483df226124ffeb2ac84

13 years agoam 75144030: Add new comparator function.
Dan Bornstein [Thu, 24 Feb 2011 01:32:06 +0000 (17:32 -0800)]
am 75144030: Add new comparator function.

* commit '75144030732a492207f594ae6bf73f0308d6be6c':
  Add new comparator function.

13 years agoAdd new comparator function.
Dan Bornstein [Wed, 23 Feb 2011 23:30:24 +0000 (15:30 -0800)]
Add new comparator function.

This one compares a DexProto with a list of method parameter types,
and it is immediately useful in the new getMethod() reflection code,
to avoid doing a bunch of extra string manipulation.

While I was in the territory, I removed some comment redundancy.

Change-Id: I5049e2ac4606e44a65c3c426ac2f880a891c51f9

13 years agoAdd new comparator function.
Dan Bornstein [Wed, 23 Feb 2011 23:30:24 +0000 (15:30 -0800)]
Add new comparator function.

This one compares a DexProto with a list of method parameter types,
and it is immediately useful in the new getMethod() reflection code,
to avoid doing a bunch of extra string manipulation.

While I was in the territory, I removed some comment redundancy.

Change-Id: I1d3c8df534601890165b2e251c036579e4caccdc

13 years agoMerge "Round two." into dalvik-dev
Dan Bornstein [Wed, 23 Feb 2011 22:56:56 +0000 (14:56 -0800)]
Merge "Round two." into dalvik-dev

13 years agoRound two.
Dan Bornstein [Wed, 23 Feb 2011 22:11:27 +0000 (14:11 -0800)]
Round two.

This gets most of the rest of the cases where a simple(ish) message
is included with a throw.

Change-Id: Id081966e5c505063c4d4dcf936037cf4d55fc8bf

13 years agoMerge "Bump up the Dalvik versions" into dalvik-dev
Andy McFadden [Wed, 23 Feb 2011 21:53:53 +0000 (13:53 -0800)]
Merge "Bump up the Dalvik versions" into dalvik-dev

13 years agoam 5945bc11: Merge "Optimize Class.getMethod() by loading only one method."
Jesse Wilson [Wed, 23 Feb 2011 21:44:21 +0000 (13:44 -0800)]
am 5945bc11: Merge "Optimize Class.getMethod() by loading only one method."

* commit '5945bc11f354083d24f952992dc579a1fd77dba8':
  Optimize Class.getMethod() by loading only one method.

13 years agoMerge "Factor out class names from throw statements." into dalvik-dev
Dan Bornstein [Wed, 23 Feb 2011 21:42:15 +0000 (13:42 -0800)]
Merge "Factor out class names from throw statements." into dalvik-dev

13 years agoFactor out class names from throw statements.
Dan Bornstein [Wed, 23 Feb 2011 21:07:07 +0000 (13:07 -0800)]
Factor out class names from throw statements.

Most exception throwing now happens via purpose-built wrapper
functions, each of which encapsulates the actual exception class name,
reducing one source of error (examples of which I fixed during this
exercise) and generally tidying things up.

This change doesn't fix all uses of exception class names, nor even
all throws, because (a) there were classes I didn't get to; (b)
because I didn't make wrappers for all the possible throw function
variants (e.g. the one that takes a cause, the one that takes varargs
for string formatting, etc.); and (c) there are uses of exception
classes in contexts other than throwing. But this change at least makes
a dent in the problem.

Change-Id: I6586ddd3e66ac0fc32c23181b17600ded0b914b2

13 years agoMerge "Optimize Class.getMethod() by loading only one method."
Jesse Wilson [Wed, 23 Feb 2011 21:32:57 +0000 (13:32 -0800)]
Merge "Optimize Class.getMethod() by loading only one method."

13 years agoOptimize Class.getMethod() by loading only one method.
Jesse Wilson [Wed, 23 Feb 2011 04:20:36 +0000 (20:20 -0800)]
Optimize Class.getMethod() by loading only one method.

Change-Id: Ia2cd776c0a14914264e8d94e978d55854ed75623
http://b/3431686

13 years agoBump up the Dalvik versions
Andy McFadden [Tue, 22 Feb 2011 22:04:19 +0000 (14:04 -0800)]
Bump up the Dalvik versions

Increase the human-readable form to differentiate from HC.

Increase the build number because we need to re-DEX stuff after
some recent changes (e.g. we've increased the number of methods
that need to use return-void-barrier).

Change-Id: I8f2c94694f7a11e86de882963ba509711f668f47

13 years agoam 636ed3eb: Bump Dalvik version.
Andy McFadden [Wed, 23 Feb 2011 05:33:24 +0000 (21:33 -0800)]
am 636ed3eb: Bump Dalvik version.

* commit '636ed3eba9e28d9630c8d8177b2ae601e7990f0e':
  Bump Dalvik version.

13 years agoRemove a comment about cloning partially initialized objects.
Carl Shapiro [Wed, 23 Feb 2011 00:51:27 +0000 (16:51 -0800)]
Remove a comment about cloning partially initialized objects.

The compiler and verifier should make this situation impossible.

Change-Id: I0be561108ff7ed221ab98172919c59e80a0365b7

13 years agoMerge "Open dexdump files in binary mode."
Raphael Moll [Tue, 22 Feb 2011 22:55:59 +0000 (14:55 -0800)]
Merge "Open dexdump files in binary mode."

13 years agoMerge "Added flags to dvmCloneObject" into dalvik-dev
Andy McFadden [Tue, 22 Feb 2011 22:26:27 +0000 (14:26 -0800)]
Merge "Added flags to dvmCloneObject" into dalvik-dev

13 years agoBump Dalvik version.
Andy McFadden [Tue, 22 Feb 2011 22:09:19 +0000 (14:09 -0800)]
Bump Dalvik version.

Minor increase to differentiate HC MR1 from HC.

Change-Id: I2ccd57d4952c19c2df2fe948ce60c476819450d4

13 years agoFix for 3477749 WITH_TRACKREF_CHECKS
buzbee [Tue, 22 Feb 2011 22:01:46 +0000 (14:01 -0800)]
Fix for 3477749 WITH_TRACKREF_CHECKS

Failed to specify grouping struct on access to debugTrackedRefStart
in recent InterpState/Thread consolidation.  Fixed.

Change-Id: Ib996b96fa1f322e3c433377bea79293eb984fca9

13 years agoAdded flags to dvmCloneObject
Andy McFadden [Tue, 22 Feb 2011 21:56:47 +0000 (13:56 -0800)]
Added flags to dvmCloneObject

Updated the call site to use "don't track".

Change-Id: Ibd4b5a9d93b0043c3906ad86b9ae19d1bf70541d

13 years agoMerge "Retain annotations when merging dex files." into dalvik-dev
Jesse Wilson [Tue, 22 Feb 2011 03:16:46 +0000 (19:16 -0800)]
Merge "Retain annotations when merging dex files." into dalvik-dev

13 years agoMerge "Interpreter restructuring: eliminate InterpState" into dalvik-dev
buzbee [Sun, 20 Feb 2011 17:41:25 +0000 (09:41 -0800)]
Merge "Interpreter restructuring: eliminate InterpState" into dalvik-dev

13 years agoInterpreter restructuring: eliminate InterpState
buzbee [Sat, 12 Feb 2011 01:48:20 +0000 (17:48 -0800)]
Interpreter restructuring: eliminate InterpState

The key datastructure for the interpreter is InterpState.
This change eliminates it, merging its data with the Thread structure.

Here's why:

In principio creavit Fadden Thread et InterpState.  And it was good.

Thread holds thread-private state, while InterpState captures data
associated with a Dalvik interpreter activation.  Because JNI calls
can result in nested interpreter invocations, we can have more than one
InterpState for each actual thread.  InterpState was relatively small,
and it all worked well.  It was used enough that in the Arm version
a register (rGLUE) was dedicated to it.

Then, along came the JIT guys, who saw InterpState as a convenient place
to dump all sorts of useful data that they wanted quick access to through
that dedicated register.  InterpState grew and grew.  In terms of
space, this wasn't a big problem - but it did mean that the initialization
cost of each interpreter activation grew as well.  For applications
that do a lot of callbacks from native code into Dalvik, this is
measurable.  It's also mostly useless cost because much of the JIT-related
InterpState initialization was setting up useful constants - things that
don't need to be saved and restored all the time.

The biggest problem, though, deals with thread control.  When something
interesting is happening that needs all threads to be stopped (such as
GC and debugger attach), we have access to all of the Thread structures,
but we don't have access to all of the InterpState structures (which
may be buried/nested on the native stack).  As a result, polling for
thread suspension is done via a one-indirection pointer chase.  InterpState
itself can't hold the stop bits because we can't always find it, so
instead it holds a pointer to the global or thread-specific stop control.

Yuck.

With this change, we eliminate InterpState and merge all needed data
into Thread.  Further, we replace the decidated rGLUE register with a
pointer to the Thread structure (rSELF).  The small subset of state
data that needs to be saved and restored across nested interpreter
activations is collected into a record that is saved to the interpreter
frame, and restored on exit.  Further, these small records are linked
together to allow tracebacks to show nested activations.  Old InterpState
variables that simply contain useful constants are initialized once at
thread creation time.

This CL is large enough by itself that the new ability to streamline
suspend checks is not done here - that will happen in a future CL.  Here
we just focus on consolidation.

Change-Id: Ide6b2fb85716fea454ac113f5611263a96687356

13 years agoRetain annotations when merging dex files.
Jesse Wilson [Sat, 19 Feb 2011 20:03:49 +0000 (12:03 -0800)]
Retain annotations when merging dex files.

This change has one major limitation: it doesn't deduplicate
equal annotation directories or annotation sets across dex
files. That will result in unnecessarily large dex files.

Change-Id: If63273d16eba1d989c6b5695d102b378d4047119
http://b/3447216

13 years agoam 6c360b86: Fix prelink for libdvm.
Ying Wang [Sat, 19 Feb 2011 01:25:54 +0000 (17:25 -0800)]
am 6c360b86: Fix prelink for libdvm.

* commit '6c360b86f5774376140636ff60ad4af3814fef21':
  Fix prelink for libdvm.

13 years agoFix an off-by-one error.
Elliott Hughes [Sat, 19 Feb 2011 01:09:20 +0000 (17:09 -0800)]
Fix an off-by-one error.

I can't believe I wrote this, but I can't find an original that would let me
pass this off as a copy & paste of someone else's bug.

Bug: 3471497
Change-Id: I40a33f62a1551147adaf8e3bdf0e796ab1918398

13 years agoFix prelink for libdvm.
Ying Wang [Sat, 19 Feb 2011 00:56:41 +0000 (16:56 -0800)]
Fix prelink for libdvm.

Change-Id: If91f46f80c1b1947683720e8187cecb0f7077b94
Bug: 3470019

13 years agoMerge "Remove system properties that are now handled in libcore." into dalvik-dev
Elliott Hughes [Fri, 18 Feb 2011 21:52:48 +0000 (13:52 -0800)]
Merge "Remove system properties that are now handled in libcore." into dalvik-dev

13 years agoMerge "Defer marking of objects as finalizable" into dalvik-dev
Andy McFadden [Fri, 18 Feb 2011 21:47:56 +0000 (13:47 -0800)]
Merge "Defer marking of objects as finalizable" into dalvik-dev

13 years agoDefer marking of objects as finalizable
Andy McFadden [Thu, 17 Feb 2011 00:50:40 +0000 (16:50 -0800)]
Defer marking of objects as finalizable

This shifts responsibility for marking an object as "finalizable" from
object creation to object initialization.  We want to make the object
finalizable when Object.<init> completes.  For performance reasons we
skip the call to the Object constructor (which doesn't do anything)
and just take the opportunity to check the class flag.

Handling of clone()d object isn't quite right yet.

Also, fixed a minor glitch in stubdefs.

Bug 3342343

Change-Id: I5b7b819079e5862dc9cbd1830bb445a852dc63bf

13 years agoMerge "[JIT] Fix profile trace dump" into dalvik-dev
buzbee [Fri, 18 Feb 2011 19:19:01 +0000 (11:19 -0800)]
Merge "[JIT] Fix profile trace dump" into dalvik-dev

13 years ago[JIT] Fix profile trace dump
buzbee [Fri, 18 Feb 2011 19:13:56 +0000 (11:13 -0800)]
[JIT] Fix profile trace dump

The debugging profile mode prints out a list of the top ten traces,
followed by recompilations.  In some cases, it is possible that a trace
was requested, but did not finish compiling before the run ended.  If
so, that could cause the dump to fail.  This CL adds a check for null
codeAddress to detect those cases.

Change-Id: I415fd94d8fa9e270f75d5114fa5cc5d993bd6997

13 years agoRemove system properties that are now handled in libcore.
Elliott Hughes [Fri, 18 Feb 2011 18:49:24 +0000 (10:49 -0800)]
Remove system properties that are now handled in libcore.

Change-Id: Ifc954f422fd73e7bd8ebbcc69f890d041acbc2e2

13 years agoMerge "Return unsigned shorts in ShortArrayCodeInput." into dalvik-dev
Jesse Wilson [Fri, 18 Feb 2011 06:38:33 +0000 (22:38 -0800)]
Merge "Return unsigned shorts in ShortArrayCodeInput." into dalvik-dev

13 years agoReturn unsigned shorts in ShortArrayCodeInput.
Jesse Wilson [Fri, 18 Feb 2011 03:16:28 +0000 (19:16 -0800)]
Return unsigned shorts in ShortArrayCodeInput.

Follow up to I9a77541b994f184da0e389840e5cac728ad6c072
http://b/3447216

Change-Id: I0746ab58aa765d83274931a95ecea0b56c3581d7

13 years agoMerge "This test stopped being useful quite a while ago." into dalvik-dev
Dan Bornstein [Thu, 17 Feb 2011 22:22:55 +0000 (14:22 -0800)]
Merge "This test stopped being useful quite a while ago." into dalvik-dev

13 years agoThis test stopped being useful quite a while ago.
Dan Bornstein [Thu, 17 Feb 2011 22:20:55 +0000 (14:20 -0800)]
This test stopped being useful quite a while ago.

Change-Id: I2069770f9b7456e4f3cde692d9a6b929ec7fe067

13 years agoPerform a bit of spec hygiene.
Dan Bornstein [Thu, 17 Feb 2011 20:47:58 +0000 (12:47 -0800)]
Perform a bit of spec hygiene.

Change-Id: Iabb7fa8ff20155a018d40bd2e23b21f19d14de1e

13 years agoMerge "Ensure we always call inline natives." into dalvik-dev
Elliott Hughes [Thu, 17 Feb 2011 00:12:03 +0000 (16:12 -0800)]
Merge "Ensure we always call inline natives." into dalvik-dev

13 years agoMerge "Add support to do suspend polling on backward branches in JIT'ed code." into...
Ben Cheng [Thu, 17 Feb 2011 00:02:33 +0000 (16:02 -0800)]
Merge "Add support to do suspend polling on backward branches in JIT'ed code." into dalvik-dev

13 years agoMerge "Fix for complex jsr nesting causing NullPointerException." into dalvik-dev
jeffhao [Wed, 16 Feb 2011 23:55:26 +0000 (15:55 -0800)]
Merge "Fix for complex jsr nesting causing NullPointerException." into dalvik-dev

13 years agoAdd support to do suspend polling on backward branches in JIT'ed code.
Ben Cheng [Thu, 3 Feb 2011 22:02:06 +0000 (14:02 -0800)]
Add support to do suspend polling on backward branches in JIT'ed code.

The polling is expensive for now as it is done through three
instructions: ld/ld/branch. As a result, a bunch of bonus stuff has
been worked on to mitigate the extra overhead:

- Cleaned up resource flags for memory disambiguation.
- Rewrote load/store elimination and scheduler routines to hide
  the ld/ld latency for GC flag. Seperate the dependency checking into
  memory disambiguation part and resource conflict part.
- Allowed code motion for Dalvik/constant/non-aliasing loads to be
  hoisted above branches for null/range checks.
- Created extended basic blocks following goto instructions so that
  longer instruction streams can be optimized as a whole.

Without the bonus stuff, the performance dropped about ~5-10% on some
benchmarks because of the lack of headroom to hide the polling latency
in tight loops. With the bonus stuff, the performance delta is between
+/-5% with polling code generated. With the bonus stuff but disabling
polling, the new bonus stuff provides consistent performance
improvements:

CaffeineMark  3.6%
Linpack      11.1%
Scimark       9.7%
Sieve        33.0%
Checkers      6.0%

As a result, GC polling is disabled by default but can be turned on
through the -Xjitsuspendpoll flag for experimental purposes.

Change-Id: Ia81fc85de3e2b70e6cc93bc37c2b845892003cdb

13 years agoEnsure we always call inline natives.
Elliott Hughes [Wed, 16 Feb 2011 22:30:45 +0000 (14:30 -0800)]
Ensure we always call inline natives.

Even though execute-inline is now a mandatory optimization, you can't be sure
the inline natives will be invoked that way. There's reflection and JNI, for
example, and there's the special case of String.equals that might be invoked
as Object.equals. This patch adds a regular native method corresponding to
each inline native, so that a corresponding libcore patch can drop its
implementations. (For example, despite the fact that we all believed last week
that the Java implementation of String.equals is never used, that turned out
not to be true: every HashMap lookup will have used it. This pair of patches
brings reality in line with our existing belief.)

Change-Id: I19e64c23bea83e91696206ca40ce4e3faf853040