OSDN Git Service

android-x86/art.git
9 years agoam b8154d5c: resolved conflicts for merge of e8a4b652 to lmp-mr1-ub-dev
Vladimir Marko [Sat, 6 Jun 2015 00:06:18 +0000 (00:06 +0000)]
am b8154d5c: resolved conflicts for merge of e8a4b652 to lmp-mr1-ub-dev

* commit 'b8154d5cc707921fadf92fedc65a66a3e8901126':
  Revert "Quick: Create GC map based on compiler data. DO NOT MERGE"

9 years agoam 5d3acebd: resolved conflicts for merge of c8d000a1 to lmp-mr1-ub-dev
Vladimir Marko [Sat, 6 Jun 2015 00:06:16 +0000 (00:06 +0000)]
am 5d3acebd: resolved conflicts for merge of c8d000a1 to lmp-mr1-ub-dev

* commit '5d3acebd1fe859cbf6fb3831815eb7f3c1f3e442':
  Revert "Quick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE"

9 years agoam e279c0c4: resolved conflicts for merge of fad2cbf9 to lmp-mr1-ub-dev
Vladimir Marko [Sat, 6 Jun 2015 00:06:13 +0000 (00:06 +0000)]
am e279c0c4: resolved conflicts for merge of fad2cbf9 to lmp-mr1-ub-dev

* commit 'e279c0c4e9ecc464ab10c9d9cd3404c3b0ed6845':
  Quick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE

9 years agoam fb695b34: resolved conflicts for merge of 7cc8f9aa to lmp-mr1-ub-dev
Vladimir Marko [Sat, 6 Jun 2015 00:06:12 +0000 (00:06 +0000)]
am fb695b34: resolved conflicts for merge of 7cc8f9aa to lmp-mr1-ub-dev

* commit 'fb695b34268bb7f9270f07ecaac554e49b5b6a92':
  Quick: Create GC map based on compiler data. DO NOT MERGE

9 years agoUse runFinalizationWithTimeout for native allocations
Mathieu Chartier [Fri, 5 Jun 2015 20:21:05 +0000 (13:21 -0700)]
Use runFinalizationWithTimeout for native allocations

Prevents deadlocks by not waiting longer than 250ms for finalizers
to complete.

Bug: 21544853
Change-Id: I57b2f7ae8b74185922eb3c15ba0ab71a4d2348aa

9 years agoAdd atrace calls to runtime start and heap create
Richard Uhler [Tue, 7 Apr 2015 17:56:50 +0000 (10:56 -0700)]
Add atrace calls to runtime start and heap create

Bug: 20727525

Change-Id: I91a74b793fb9eda8ed580244a6a5fd313ef2eb27

9 years agoAdd optimization for LOW_4G allocator
Mathieu Chartier [Thu, 4 Jun 2015 20:42:14 +0000 (13:42 -0700)]
Add optimization for LOW_4G allocator

The optimization uses the maps_ field to skip over regions which we
know wont be large enough for the request.

Reduces time to create heap from 500-700ms to 100ms on N9.

Bug: 20727525

Change-Id: I4fa92d58c2e135ba31a03ababff46669089bb542

9 years agoresolved conflicts for merge of e8a4b652 to lmp-mr1-ub-dev
Vladimir Marko [Thu, 4 Jun 2015 10:14:23 +0000 (11:14 +0100)]
resolved conflicts for merge of e8a4b652 to lmp-mr1-ub-dev

9 years agoresolved conflicts for merge of c8d000a1 to lmp-mr1-ub-dev
Vladimir Marko [Thu, 4 Jun 2015 10:04:05 +0000 (11:04 +0100)]
resolved conflicts for merge of c8d000a1 to lmp-mr1-ub-dev

9 years agoresolved conflicts for merge of fad2cbf9 to lmp-mr1-ub-dev
Vladimir Marko [Thu, 4 Jun 2015 09:59:53 +0000 (10:59 +0100)]
resolved conflicts for merge of fad2cbf9 to lmp-mr1-ub-dev

9 years agoresolved conflicts for merge of 7cc8f9aa to lmp-mr1-ub-dev
Vladimir Marko [Thu, 4 Jun 2015 09:53:59 +0000 (10:53 +0100)]
resolved conflicts for merge of 7cc8f9aa to lmp-mr1-ub-dev

Change-Id: I6203b6d8be029440f635b9575559ba6add9a46d6

9 years agoMerge "Revert "Quick: Create GC map based on compiler data. DO NOT MERGE"" into cw...
Vladimir Marko [Thu, 4 Jun 2015 09:48:26 +0000 (09:48 +0000)]
Merge "Revert "Quick: Create GC map based on compiler data. DO NOT MERGE"" into cw-d-mr1-dev

9 years agoRevert "Quick: Create GC map based on compiler data. DO NOT MERGE"
Vladimir Marko [Thu, 4 Jun 2015 09:47:47 +0000 (09:47 +0000)]
Revert "Quick: Create GC map based on compiler data. DO NOT MERGE"

This reverts commit 7cc8f9aa1349fd6cb0814a653ee2d1164a7fb9f7.

Change-Id: Iadb4462bf8e834c6a847c01ee6eb332a325de22c

9 years agoRevert "Quick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE"
Vladimir Marko [Thu, 4 Jun 2015 09:47:21 +0000 (09:47 +0000)]
Revert "Quick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE"

This reverts commit fad2cbf97c71b9742ccd88cc1a5ba13fa918e677.

Change-Id: I175dd9e49014b71a300d987678032bd624a99cf1

9 years agoFix valgrind large_object_space_test
Mathieu Chartier [Thu, 4 Jun 2015 00:32:42 +0000 (17:32 -0700)]
Fix valgrind large_object_space_test

Also some cleanup.

Change-Id: I9c1a8093e6356f1b52e332009429b77fa5c1d448

9 years agoAdd a way to determine if a large object is a zygote object
Mathieu Chartier [Wed, 3 Jun 2015 20:32:15 +0000 (13:32 -0700)]
Add a way to determine if a large object is a zygote object

Also fix a slight memory leak in LargeObjectMapSpace.

Bug: 20674158
Change-Id: I2416df484e5b84a8c5cc0b5664c8cb102dc235f6

9 years agoMerge "ART: Refactor Thread::Init" into mnc-dev
Andreas Gampe [Wed, 3 Jun 2015 20:27:44 +0000 (20:27 +0000)]
Merge "ART: Refactor Thread::Init" into mnc-dev

9 years agoART: Refactor Thread::Init
Andreas Gampe [Tue, 2 Jun 2015 05:29:51 +0000 (22:29 -0700)]
ART: Refactor Thread::Init

This refactor allows the parent thread to allocate the JNIEnvExt
for the child (with a fallback in place in Init). This allows to
throw an OOME in CreateNativeThread instead of aborting in the
child.

Bug: 21291279
Change-Id: Iccc1a5c202999f5bfacec706d9833e53135ba2fa

9 years agoQuick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE
Vladimir Marko [Wed, 25 Mar 2015 11:13:39 +0000 (11:13 +0000)]
Quick: Fix "select" pattern to update data used for GC maps. DO NOT MERGE

Follow-up to
    https://android-review.googlesource.com/143222

(cherry picked from commit 6e07183e822a32856da9eb60006989496e06a9cc)

Change-Id: I916743c845d9568063cd6a4b2ef71e9cbc43dee8

9 years agoQuick: Create GC map based on compiler data. DO NOT MERGE
Vladimir Marko [Fri, 20 Mar 2015 12:47:30 +0000 (12:47 +0000)]
Quick: Create GC map based on compiler data. DO NOT MERGE

The Quick compiler and verifier sometimes disagree on dalvik
register types (fp/core/ref) for 0/null constants and merged
registers involving 0/null constants. Since the verifier is
more lenient it can mark a register as a reference for GC
where Quick considers it a floating point register or a dead
register (which would have a ref/fp conflict if not dead).
If the compiler used an fp register to hold the zero value,
the core register or stack location used by GC based on the
verifier data can hold an invalid value.

Previously, as a workaround we stored the fp zero value also
in the stack location or core register where GC would look
for it. This wasn't precise and may have missed some cases.

To fix this properly, we now generate GC maps based on the
compiler's notion of references if register promotion is
enabled.

Bug: https://code.google.com/p/android/issues/detail?id=147187

(cherry picked from commit 767c752fddc64e280dba507457e4f06002b5f678)

Change-Id: Id75428fd0a2f6bdd2ccb20ce75cdeab01150e455

9 years agoMerge "Emit instance fields for java.lang.Object in hprof" into mnc-dev
Mathieu Chartier [Wed, 3 Jun 2015 18:08:22 +0000 (18:08 +0000)]
Merge "Emit instance fields for java.lang.Object in hprof" into mnc-dev

9 years agoEmit instance fields for java.lang.Object in hprof
Mathieu Chartier [Wed, 3 Jun 2015 17:51:13 +0000 (10:51 -0700)]
Emit instance fields for java.lang.Object in hprof

Previously we omitted these fields.

Bug: 20726205
Change-Id: I81c55919a4bd015bc0a4e7259a41a05dab534e11

9 years agoART: Prune FindArrayClass cache in image writer
Andreas Gampe [Wed, 3 Jun 2015 04:01:45 +0000 (21:01 -0700)]
ART: Prune FindArrayClass cache in image writer

The ClassLinker cache speeds up FindArrayClass requests, but all
entries are roots. It is possible that an entry is a non-image
class when creating the boot image, artificially keeping the
class around.

Bug: 21596650
Change-Id: Ief9b439945d0e293a3cb5dcddfeb189b5e174f06

9 years agoMerge "Add a way to SuspendAll for a long duration" into mnc-dev
Mathieu Chartier [Wed, 3 Jun 2015 00:16:33 +0000 (00:16 +0000)]
Merge "Add a way to SuspendAll for a long duration" into mnc-dev

9 years agoFix tracing
Mathieu Chartier [Tue, 2 Jun 2015 23:38:29 +0000 (16:38 -0700)]
Fix tracing

Move back to 32 bit method IDs, add a bijective map for method IDs.

Also some cleanup.

Bug: 19264997
Change-Id: Icdd36591df53ff975d30b9000cfe67d3ae8c51d5

9 years agoAdd more info for attempting to delete non-JNI local reference
Mathieu Chartier [Tue, 2 Jun 2015 20:40:12 +0000 (13:40 -0700)]
Add more info for attempting to delete non-JNI local reference

Now we print the stack trace of the method which tried to remove the
non-JNI local reference.

Added test, example output:
 Attempt to remove non-JNI local reference, dumping thread
 "main" prio=5 tid=1 Runnable
   | group="main" sCount=0 dsCount=0 obj=0x12c2b400 self=0xf878af28
   | sysTid=32662 nice=0 cgrp=default sched=0/0 handle=0xf73df700
   | state=R schedstat=( 154297228 636505 121 ) utm=5 stm=10 core=11 HZ=100
   | stack=0xff6f2000-0xff6f4000 stackSize=7MB
   | held mutexes= "mutator lock"(shared held)
   native: #00 pc 00455a7f  /out/host/linux-x86/lib/libartd.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::ArtMethod*, void*)+191)
   native: #01 pc 00425d79  /out/host/linux-x86/lib/libartd.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+473)
   native: #02 pc 0028c555  /out/host/linux-x86/lib/libartd.so (art::IndirectReferenceTable::Remove(unsigned int, void*)+421)
   native: #03 pc 003319c8  /out/host/linux-x86/lib/libartd.so (art::JNI::DeleteLocalRef(_JNIEnv*, _jobject*)+56)
   native: #04 pc 0012db14  /out/host/linux-x86/lib/libartd.so (art::CheckJNI::DeleteRef(char const*, _JNIEnv*, _jobject*, art::IndirectRefKind)+292)
   native: #05 pc 00122176  /out/host/linux-x86/lib/libartd.so (art::CheckJNI::DeleteLocalRef(_JNIEnv*, _jobject*)+54)
   native: #06 pc 00005724  /out/host/linux-x86/lib/libarttest.so (Java_Main_removeLocalObject+36)
   native: #07 pc 00004d6e  /tmp/test-32506/dalvik-cache/x86/tmp@mathieuc@test-32506@004-JniTest.jar@classes.dex (void Main.removeLocalObject(java.lang.Object)+130)
   at Main.removeLocalObject(Native method)
   at Main.testRemoveLocalObject(Main.java:118)
   at Main.main(Main.java:37)

Bug: 20683465
Change-Id: I56b99c77ae7020cabf1aaeb1d5317b1d5ba940e5

9 years agoAdd a way to SuspendAll for a long duration
Mathieu Chartier [Tue, 2 Jun 2015 18:42:18 +0000 (11:42 -0700)]
Add a way to SuspendAll for a long duration

Hprof uses this mode to not cause thread suspend timeouts if GC tries
while the hprof dump is running.

Bug: 21063989
Change-Id: Ic6304620afd1489719a7e0e4299f829c90fe27cc

9 years agoAdd clear cache for JIT
Mathieu Chartier [Tue, 2 Jun 2015 02:12:36 +0000 (19:12 -0700)]
Add clear cache for JIT

(cherry picked from commit 5783a74163878095475596fabc0b9cb04bec467b)

Bug: 21572270

Change-Id: I711a9ee2d9688a8e4b59380c401f10f42c6c068e

9 years agoUpdate IMT for stale miranda methods
Mathieu Chartier [Tue, 2 Jun 2015 16:56:04 +0000 (09:56 -0700)]
Update IMT for stale miranda methods

Fixes occasional crash in dex2oat.

Bug: 19264997
Change-Id: Icb1a323d8c44fa40309486e17aec56d2c2588e67

9 years agoMerge "Move mirror::ArtMethod to native" into mnc-dev
Mathieu Chartier [Tue, 2 Jun 2015 16:44:43 +0000 (16:44 +0000)]
Merge "Move mirror::ArtMethod to native" into mnc-dev

9 years agoMove mirror::ArtMethod to native
Mathieu Chartier [Wed, 22 Apr 2015 20:56:20 +0000 (13:56 -0700)]
Move mirror::ArtMethod to native

Optimizing + quick tests are passing, devices boot.

TODO: Test and fix bugs in mips64.

Saves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.
Some of the savings are from removal of virtual methods and direct
methods object arrays.

Bug: 19264997

(cherry picked from commit e401d146407d61eeb99f8d6176b2ac13c4df1e33)

Change-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d

Fix some ArtMethod related bugs

Added root visiting for runtime methods, not currently required
since the GcRoots in these methods are null.

Added missing GetInterfaceMethodIfProxy in GetMethodLine, fixes
--trace run-tests 005, 044.

Fixed optimizing compiler bug where we used a normal stack location
instead of double on ARM64, this fixes the debuggable tests.

TODO: Fix JDWP tests.

Bug: 19264997

Change-Id: I7c55f69c61d1b45351fd0dc7185ffe5efad82bd3

ART: Fix casts for 64-bit pointers on 32-bit compiler.

Bug: 19264997
Change-Id: Ief45cdd4bae5a43fc8bfdfa7cf744e2c57529457

Fix JDWP tests after ArtMethod change

Fixes Throwable::GetStackDepth for exception event detection after
internal stack trace representation change.

Adds missing ArtMethod::GetInterfaceMethodIfProxy call in case of
proxy method.

Bug: 19264997
Change-Id: I363e293796848c3ec491c963813f62d868da44d2

Fix accidental IMT and root marking regression

Was always using the conflict trampoline. Also included fix for
regression in GC time caused by extra roots. Most of the regression
was IMT.

Fixed bug in DumpGcPerformanceInfo where we would get SIGABRT due to
detached thread.

EvaluateAndApplyChanges:
From ~2500 -> ~1980
GC time: 8.2s -> 7.2s due to 1s less of MarkConcurrentRoots

Bug: 19264997
Change-Id: I4333e80a8268c2ed1284f87f25b9f113d4f2c7e0

Fix bogus image test assert

Previously we were comparing the size of the non moving space to
size of the image file.

Now we properly compare the size of the image space against the size
of the image file.

Bug: 19264997
Change-Id: I7359f1f73ae3df60c5147245935a24431c04808a

[MIPS64] Fix art_quick_invoke_stub argument offsets.

ArtMethod reference's size got bigger, so we need to move other args
and leave enough space for ArtMethod* and 'this' pointer.

This fixes mips64 boot.

Bug: 19264997
Change-Id: I47198d5f39a4caab30b3b77479d5eedaad5006ab

9 years agoFix another source of undeterministic inlining.
Nicolas Geoffray [Tue, 2 Jun 2015 10:25:09 +0000 (11:25 +0100)]
Fix another source of undeterministic inlining.

Needing an environment and throwing might depend in which
caller first tries to inline. HLoadClass has such logic. Therefore,
do not cache the non-inlineable flag for those cases.

Does not apply to aosp, as this code has been removed.

bug:20037935

Change-Id: I5e3d36ffb832fb3c3f3c604c79cdbf4f37c749e1

9 years agoMerge "Fix another source of undeterministic inlining." into mnc-dev
Nicolas Geoffray [Mon, 1 Jun 2015 17:13:34 +0000 (17:13 +0000)]
Merge "Fix another source of undeterministic inlining." into mnc-dev

9 years agoMerge "ART: Fix wrong hard-failure handling in verifier" into mnc-dev
Andreas Gampe [Mon, 1 Jun 2015 15:28:37 +0000 (15:28 +0000)]
Merge "ART: Fix wrong hard-failure handling in verifier" into mnc-dev

9 years agoMerge changes I3eee8df3,I78cc01fb into mnc-dev
Andreas Gampe [Mon, 1 Jun 2015 15:23:43 +0000 (15:23 +0000)]
Merge changes I3eee8df3,I78cc01fb into mnc-dev

* changes:
  Fix test 115-native-bridge for Mips.
  ART: Add support for special handlers in sigchainlib

9 years agoMerge "ART: Use v2 version of NativeBridge struct" into mnc-dev
Andreas Gampe [Mon, 1 Jun 2015 15:23:39 +0000 (15:23 +0000)]
Merge "ART: Use v2 version of NativeBridge struct" into mnc-dev

9 years agoFix another source of undeterministic inlining.
Nicolas Geoffray [Wed, 27 May 2015 11:53:36 +0000 (12:53 +0100)]
Fix another source of undeterministic inlining.

bug:20037935

(cherry picked from commit 5ae1325048f3d2143f62735ed41acebf28ee6742)

Change-Id: I4bbec76988cfd3061084055c16d2d9ef46845f0a

9 years agoMerge "Make inlining deterministic." into mnc-dev
Nicolas Geoffray [Mon, 1 Jun 2015 07:58:14 +0000 (07:58 +0000)]
Merge "Make inlining deterministic." into mnc-dev

9 years agoFix test 115-native-bridge for Mips.
Douglas Leung [Sat, 30 May 2015 02:50:02 +0000 (19:50 -0700)]
Fix test 115-native-bridge for Mips.

(cherry picked from commit d0af5479d61013362e43ae15cb69c9f8da915e08)

Change-Id: I3eee8df39e774d233f11c43a5578f407bfdebca1

9 years agoART: Add support for special handlers in sigchainlib
Andreas Gampe [Sat, 23 May 2015 01:31:50 +0000 (18:31 -0700)]
ART: Add support for special handlers in sigchainlib

Add support for a special managed handler in sigchainlib that
will be called as the first user handler.

Use this support for native bridge v2. Extend test 115-native-bridge
to test the functionality.

Bug: 20217701

(cherry picked from commit 03c2cc89428914adf52229d6a3867eef6127911a)

Change-Id: I78cc01fbdabe169154ff6b94c9f3ddb95b5c7448

9 years agoART: Use v2 version of NativeBridge struct
Andreas Gampe [Thu, 21 May 2015 01:01:30 +0000 (18:01 -0700)]
ART: Use v2 version of NativeBridge struct

Update the struct to the new version, but without implementation.

Bug: 20217701

(cherry picked from commit 540cc3d49c858e670591d8c00fcd87576cdbede6)

Change-Id: Ic23a60b949f119c7d8b0e7cb27a61e6c16532a23

9 years agoAdd unstarted runtime test for String.<init>.
Jeff Hao [Fri, 29 May 2015 17:53:17 +0000 (10:53 -0700)]
Add unstarted runtime test for String.<init>.

Bug: 21173514
Change-Id: I369806644879fffc01bdc123d81a551e6eedf465

9 years agoFix double-exception in super-class method validation.
Vladimir Marko [Fri, 8 May 2015 11:26:59 +0000 (12:26 +0100)]
Fix double-exception in super-class method validation.

Bug: 19333589

(cherry picked from commit d5e5a0e61b5b1fe0aaa7edc25a08adebd5a92353)

Change-Id: If394a678ef6271c1119dac3f959773f23e789c56

9 years agoMerge "ART: Add Mips o32 callee-save registers to SaveAll frame" into mnc-dev
Andreas Gampe [Fri, 29 May 2015 00:49:39 +0000 (00:49 +0000)]
Merge "ART: Add Mips o32 callee-save registers to SaveAll frame" into mnc-dev

9 years agoART: Add Mips o32 callee-save registers to SaveAll frame
Andreas Gampe [Thu, 28 May 2015 01:31:42 +0000 (18:31 -0700)]
ART: Add Mips o32 callee-save registers to SaveAll frame

The floating point registers f20-f31 are callee-save in the Mips
ABI. While the managed code does not touch them, they need to be
saved when throwing an exception, so that they will be correctly
restored and not smashed.

Bug: 21266656

(cherry picked from commit a4e0e67611f54180694e0807d6599c1132269b6c)

Change-Id: Ia96d52ce7fb41bf604da1797ce4d7a703e292415

9 years agoAdd JNI String.<init> test for global and weak global refs.
Jeff Hao [Thu, 28 May 2015 21:32:07 +0000 (14:32 -0700)]
Add JNI String.<init> test for global and weak global refs.

Test for change:
https://googleplex-android-review.git.corp.google.com/#/c/698642/

Change-Id: I3e1182d42f9e24448d8616000de58ebfe1e50fb8

9 years agoFix single-step in native thread
Sebastien Hertz [Thu, 28 May 2015 09:00:57 +0000 (11:00 +0200)]
Fix single-step in native thread

If we attempt to single-step in a thread that is not running Java
code, there is no current method on the stack. So we need to check
for null before trying to decode debug info.

Bug: 21320157

(cherry picked from commit 52f5f93873ec244320e05b033243c5c7a3ae40e2)

Change-Id: I961108071dd58a23f6327370b00c35a4cabe0aa7

9 years agoMerge "Fix updating of JNI references for String.<init>." into mnc-dev
Jeff Hao [Thu, 28 May 2015 02:46:01 +0000 (02:46 +0000)]
Merge "Fix updating of JNI references for String.<init>." into mnc-dev

9 years agoFix updating of JNI references for String.<init>.
Jeff Hao [Thu, 28 May 2015 02:29:29 +0000 (19:29 -0700)]
Fix updating of JNI references for String.<init>.

Was missing updates to globals and weak globals.

Bug: 21288130
Bug: 21440428
Change-Id: I5f801f68b61f6b066b441b92ace367e6ba434789

9 years agoFix valgrind includes
Dmitriy Ivanov [Wed, 27 May 2015 22:34:38 +0000 (15:34 -0700)]
Fix valgrind includes

 external/valgrind structure has been changed
 to reflect upstream projects struture.

 Making corresponding changes to art includes.

Bug: http://b/21471495
Change-Id: I2434a270f88502528df82c4820afedb002b65b8d
(cherry picked from commit 6130f739d8f35e01037ba5c3ec5e5a1057900479)

9 years agoReset libc targetSdkVersion
Dmitriy Ivanov [Sat, 23 May 2015 01:03:34 +0000 (18:03 -0700)]
Reset libc targetSdkVersion

 This will let libc/linker know which sdk version
 is targeted by the app. This is needed to work around
 incorrect DT_NEEDED entries in old apps.

Bug: http://b/21364029
Change-Id: I2f2907104106aac6c8831381ca171dc0302e6a9d
(cherry picked from commit 15efde2badd80b8b124f8e1444165e4afbac17f0)

9 years agoART: Fix wrong hard-failure handling in verifier
Andreas Gampe [Tue, 26 May 2015 20:35:39 +0000 (13:35 -0700)]
ART: Fix wrong hard-failure handling in verifier

Correctly return null for the method when a hard failure is
encountered. Also improve logging for order failures. Add a
regression test.

Bug: 20224106
Change-Id: I6e08202617147378b204af169308b67fc69f92c6

9 years agoART: Use kBadFprBase on mips64 and arm64.
Vladimir Marko [Wed, 27 May 2015 13:07:08 +0000 (14:07 +0100)]
ART: Use kBadFprBase on mips64 and arm64.

Fix incorrect usage of kBadGprBase to avoid misleading and
ambiguous data in crash investigations.

Bug: 21266656

(cherry picked from commit 5b09ea0af468d9232cf725ac7f7e73c145892c5c)

Change-Id: Ia4fc60a5d61471c7a6c8fd0545a897ace43d90be

9 years agoAdd missing oatdump test dependency
Mathieu Chartier [Wed, 27 May 2015 02:48:16 +0000 (19:48 -0700)]
Add missing oatdump test dependency

(cherry picked from commit ea216b3abf96d4121a96e8fdab5ce97d7f4d1c2b)

Bug: 18000316
Change-Id: Ic828e8be8e5d3ef7e112facd0db57013740d449a

9 years agoAdd oatdump test
Mathieu Chartier [Tue, 26 May 2015 21:44:35 +0000 (14:44 -0700)]
Add oatdump test

(cherry picked from commit 19510f02b011e545665f6219e6144c8e47aed5f0)

Bug: 18000316

Change-Id: Ic22d63dc64a9b7a492b5e6bfbd4c75f30c35dfd5

9 years agoFix mac build: cast fpr callee save addresses.
Vladimir Marko [Tue, 26 May 2015 19:42:30 +0000 (20:42 +0100)]
Fix mac build: cast fpr callee save addresses.

Bring back reinterpret_cast<>s removed by
    https://android-review.googlesource.com/151309 .
They are needed for mac builds.

Bug : 13925192

(cherry picked from commit 0eb42511405f3919572a480a009426dfb776cfb5)

Change-Id: If6e0cdbadcc84a046abe03d7eca5cccd0a50d141

9 years agoFix mac build: include <sys/time.h> in time_utils.cc .
Vladimir Marko [Tue, 26 May 2015 18:57:30 +0000 (19:57 +0100)]
Fix mac build: include <sys/time.h> in time_utils.cc .

Required for gettimeofday(). Not needed in utils.cc .

Bug: 13925192

(cherry picked from commit ce39200492e2715a94d96fbd39fa42b46115c255)

Change-Id: If40694965b84605819cac11a7937821aa74db82b

9 years agoART: Clean up arm64 kNumberOfXRegisters usage.
Vladimir Marko [Tue, 19 May 2015 17:08:00 +0000 (18:08 +0100)]
ART: Clean up arm64 kNumberOfXRegisters usage.

Avoid undefined behavior for arm64 stemming from 1u << 32 in
loops with upper bound kNumberOfXRegisters.

Create iterators for enumerating bits in an integer either
from high to low or from low to high and use them for
<arch>Context::FillCalleeSaves() on all architectures.

Refactor runtime/utils.{h,cc} by moving all bit-fiddling
functions to runtime/base/bit_utils.{h,cc} (together with
the new bit iterators) and all time-related functions to
runtime/base/time_utils.{h,cc}. Improve test coverage and
fix some corner cases for the bit-fiddling functions.

Bug: 13925192

(cherry picked from commit 80afd02024d20e60b197d3adfbb43cc303cf29e0)

Change-Id: I905257a21de90b5860ebe1e39563758f721eab82

9 years agoJDWP: fix breakpoint on catch statement
Sebastien Hertz [Tue, 26 May 2015 09:53:39 +0000 (11:53 +0200)]
JDWP: fix breakpoint on catch statement

Setting a breakpoint on a catch statement in the source actually
installs the breakpoint on a DEX move-exception instruction. At this
point, an exception is pending in the current thread.

The issue is no exception must be pending in the current thread to
report the breakpoint event. This is required to be able to call JNI
functions to create JDWP ids.

This CL fixes it by clearing the pending exception before reporting
event and restore it after reporting the event.

Bug: 21382373

(cherry picked from commit de48aa6708a3d5dacf7db3d64965e23261fb15d3)

Change-Id: Ie107eb47b6f2559c4fa5297f4033e07baad06f38

9 years agoMake inlining deterministic.
Nicolas Geoffray [Tue, 26 May 2015 13:35:06 +0000 (14:35 +0100)]
Make inlining deterministic.

Only the case where two methods are not in the same dex
file could lead to undeterministic behavior.

bug:20037935

(cherry picked from commit ff199d84b02efe6cd7162a3c414db99240592454)

Change-Id: If1b0bff3a228be4caec9a068210b1d4d2a7bae1f

9 years agoMerge "Fix for potential moving GC bugs around proxy class." into mnc-dev
Hiroshi Yamauchi [Fri, 22 May 2015 22:32:42 +0000 (22:32 +0000)]
Merge "Fix for potential moving GC bugs around proxy class." into mnc-dev

9 years agoFix for potential moving GC bugs around proxy class.
Hiroshi Yamauchi [Thu, 21 May 2015 19:05:27 +0000 (12:05 -0700)]
Fix for potential moving GC bugs around proxy class.

- Handlerize proxy_class which is live across multiple allocation
  points in ClassLinker::CreateProxyClass().

- In ClassLinker::CreateProxyClass(), insert a proxy class into the
  class table before creating ArtFields for it (and update it later in
  LinkClass()) because the field roots (ArtField::declaring_class_)
  won't be updated by GC unless the class is in the class table. If GC
  happens before they are updated by FixupTemporaryDeclaringClass()
  from LinkClass(), FixupTemporaryDeclaringClass() may not update the
  field roots correctly because the old class may already be moved but
  the fields roots may not. Reduce a window of time where the fields
  roots could be stale.

- In ClassLinker::LinkClass(), directly wrap a new class in a handle
  to avoid a window of time where new_class may be potentially stale.

- Print more diagnostic info about the holder of the field upon a mark
  sweep invalid ref crash.

- Add an additional sanity check in Field::GetArtField().

Bug: 20557050

Change-Id: I9ad32d304922da96b7e1fad262d97de21cbac776

9 years agoMerge "ART: Sometimes even empty methods take forever to verify" into mnc-dev
Andreas Gampe [Thu, 21 May 2015 21:34:05 +0000 (21:34 +0000)]
Merge "ART: Sometimes even empty methods take forever to verify" into mnc-dev

9 years agoMerge "Revert "DO NOT MERGE ART: Turn off duplicate-classes checking"" into mnc-dev
Andreas Gampe [Thu, 21 May 2015 21:15:37 +0000 (21:15 +0000)]
Merge "Revert "DO NOT MERGE ART: Turn off duplicate-classes checking"" into mnc-dev

9 years agoART: Sometimes even empty methods take forever to verify
Andreas Gampe [Thu, 21 May 2015 21:06:46 +0000 (14:06 -0700)]
ART: Sometimes even empty methods take forever to verify

In cases of very high load and/or bad scheduling, the verifier may
take longer than the threshold duration to verify an empty method.
The LargeMethod detection needs to accept that the code_item may
be null.

Bug: 21364300
Change-Id: Iceff3e4688cc1a5fe7a836f7a9bf6c49a392b618

9 years agoRevert "DO NOT MERGE ART: Turn off duplicate-classes checking"
Andreas Gampe [Thu, 21 May 2015 20:33:40 +0000 (20:33 +0000)]
Revert "DO NOT MERGE ART: Turn off duplicate-classes checking"

This reverts commit aafcfca5fe545365ef377fff2897b8a908f03e71.

Bug: 21333911
Change-Id: Ibbc6b1be8bebc1d0ab9c5955b34eb89f40577baa

9 years agoART: Refactor UnstartedRuntime for testing
Andreas Gampe [Sat, 16 May 2015 02:24:12 +0000 (19:24 -0700)]
ART: Refactor UnstartedRuntime for testing

Expose the UnstartedRuntime implementation functions as private static
methods of a class. Add a gtest that can invoke these functions. Add
sample tests for String and Memory.

Bug: 21173514

(cherry picked from commit 799681b176ad25437ce2849639f54f610dcbf684)

Change-Id: Ib5bde6347fafaf7607c642542ea7d5938ff4b1df

9 years agoMerge "DO NOT MERGE ART: Turn off duplicate-classes checking" into mnc-dev
Andreas Gampe [Thu, 21 May 2015 15:49:28 +0000 (15:49 +0000)]
Merge "DO NOT MERGE ART: Turn off duplicate-classes checking" into mnc-dev

9 years agoMerge "Intercept JNI invocation of String.<init> methods." into mnc-dev
Jeff Hao [Thu, 21 May 2015 01:39:36 +0000 (01:39 +0000)]
Merge "Intercept JNI invocation of String.<init> methods." into mnc-dev

9 years agoIntercept JNI invocation of String.<init> methods.
Jeff Hao [Wed, 20 May 2015 03:30:23 +0000 (20:30 -0700)]
Intercept JNI invocation of String.<init> methods.

libmono uses JNI AllocObject and CallNonvirtualVoidMethod to create and
initialize a string instead of using the recommended NewObject. This
change adds an intercept to change the String.<init> call to a
StringFactory call instead. Then, it uses the object id of the original
string object referrer and maps it to the result of the StringFactory.

Bug: 21288130
Change-Id: Ib4db402c178bc37188d5c5faf30b6e4fdc747b17

9 years agoMerge "ART: Fix RegisterNative order" into mnc-dev
Andreas Gampe [Thu, 21 May 2015 01:15:36 +0000 (01:15 +0000)]
Merge "ART: Fix RegisterNative order" into mnc-dev

9 years agoART: Fix gtest dependency
Andreas Gampe [Wed, 20 May 2015 23:09:36 +0000 (16:09 -0700)]
ART: Fix gtest dependency

Gtests should depend on the debug version of libart-disassembler.

Bug: 21273194

(cherry picked from commit 0ae3bf872d3898ed6826216f3f8a04c819e1426b)

Change-Id: Iaf216a1c0cff650296ebf83fe4e8352f5614cb28

9 years agoMerge "Fix a cts crash around proxy class fields." into mnc-dev
Hiroshi Yamauchi [Wed, 20 May 2015 23:10:39 +0000 (23:10 +0000)]
Merge "Fix a cts crash around proxy class fields." into mnc-dev

9 years agoFix a cts crash around proxy class fields.
Hiroshi Yamauchi [Wed, 20 May 2015 22:51:29 +0000 (15:51 -0700)]
Fix a cts crash around proxy class fields.

org.apache.harmony.tests.java.io.SerializationStressTest4#test_writeObject_Proxy

As the static fields of proxy classes share the dex file indices, they
shouldn't be resolved in the dex cache or else Field::GetArtField()
may return a wrong art field that belong to a different proxy class.

Bug: 20557050

Change-Id: If672c0e67bc49e672e34d75ffbe29c65f5a423b9

9 years agoDO NOT MERGE ART: Turn off duplicate-classes checking
Andreas Gampe [Wed, 20 May 2015 21:48:10 +0000 (14:48 -0700)]
DO NOT MERGE ART: Turn off duplicate-classes checking

Bug: 21333911
Change-Id: I9832526a6d2996aadb459e3ec0930cbaf151478a

9 years agoART: Fix RegisterNative order
Andreas Gampe [Mon, 18 May 2015 22:52:22 +0000 (15:52 -0700)]
ART: Fix RegisterNative order

First check for both direct and virtual methods in the current class,
then move to the parent.

Optimize registration by checking first whether the current method
under test is native. This slows down registering implementations
in parent classes. Add a CheckJNI warning for this.

Add a run-test to check the behavior. Fix host comparison testing.

Bug: 19569721

(cherry picked from commit 3f1dc56914177993b1b018bf21ce7d39d7feecda)

Change-Id: I61e77117d96310632aad123d7f1279d0f834dc99

9 years agoMerge "Fix debuggable compiler flag detection for secondary dex files" into mnc-dev
Sebastien Hertz [Wed, 20 May 2015 06:55:21 +0000 (06:55 +0000)]
Merge "Fix debuggable compiler flag detection for secondary dex files" into mnc-dev

9 years agoART: Change huge-method warning in verifier
Andreas Gampe [Tue, 19 May 2015 03:50:12 +0000 (20:50 -0700)]
ART: Change huge-method warning in verifier

Change the logging to be included in the took-a-long-time warning,
instead of being a non-descriptive standalone. This should reduce
the noise.

Bug: 21149450

(cherry picked from commit a4f5bf6ea99d6b3095a4ca261352729633bc44c5)

Change-Id: Ia4493dd12f54a8452a46541f6da86530584016ea

9 years agoFix debuggable compiler flag detection for secondary dex files
Sebastien Hertz [Wed, 13 May 2015 10:14:05 +0000 (12:14 +0200)]
Fix debuggable compiler flag detection for secondary dex files

Compiles secondary dex files like the primary dex file: if it has
been compiled with the --debuggable flag, compile secondary dex files
with the --debuggable flag too.

Therefore, dex files loaded at runtime are compiled the same way as
dex files compiled at install time on the classpath (excluding the
boot image that is not compiled debuggable).

Also adds debuggable key in the oat header and bump the oat version.

Bug: 20944228

(cherry picked from commit 0de1133ba600f299b3d67938f650720d9f859eb2)

Change-Id: If6b2236e7fe547cc421f57b573043748018d3ae0

9 years agoMerge "Test and fix bug checking status of secondary multidex files." into mnc-dev
Richard Uhler [Mon, 18 May 2015 15:18:55 +0000 (15:18 +0000)]
Merge "Test and fix bug checking status of secondary multidex files." into mnc-dev

9 years agoTest and fix bug checking status of secondary multidex files.
Richard Uhler [Thu, 14 May 2015 20:21:13 +0000 (13:21 -0700)]
Test and fix bug checking status of secondary multidex files.

We were accidentally returning 'false' instead of 'true' to indicate a native
multidex file with an up-to-date primary dex file checksum but out-of-date
secondary dex file checksum is out of date.

Bug: 21022815
Change-Id: I43d360ca9251d0df38ad7f8289f6ef339c0a3280

9 years agoJDWP: more GC safety
Sebastien Hertz [Wed, 8 Apr 2015 07:36:07 +0000 (09:36 +0200)]
JDWP: more GC safety

Ensures GC safety when keeping references that may be moved by GC:
- SingleStepControl: stores ArtMethod* in a GcRoot
- ModBasket: stores references in a StackHandleScope

Bug: 18166750

(cherry picked from commit 261bc044a3575512869586593e99e97cd8b1c321)

Change-Id: I35971a901537956739d1f089d61cb4ea9dc6c93d

9 years agoMerge "Undo arm64 workaround." into mnc-dev
Chih-Hung Hsieh [Fri, 15 May 2015 23:09:19 +0000 (23:09 +0000)]
Merge "Undo arm64 workaround." into mnc-dev

9 years agoUndo arm64 workaround.
Chih-Hung Hsieh [Tue, 12 May 2015 19:06:57 +0000 (12:06 -0700)]
Undo arm64 workaround.

Now we have new llvm to compile art for arm64 without -fno-vectorize.
BUG: 21080674

Change-Id: Id1b3a88ab9d4cf78b7f0dfd8cb435ed6e7ab7cb2
(cherry picked from commit b6cee946d44dc1e961c9656830b567e38104f896)

9 years agoMerge "Print more info on mark sweep invalid ref crash." into mnc-dev
Hiroshi Yamauchi [Fri, 15 May 2015 22:47:18 +0000 (22:47 +0000)]
Merge "Print more info on mark sweep invalid ref crash." into mnc-dev

9 years agoPrint more info on mark sweep invalid ref crash.
Hiroshi Yamauchi [Fri, 15 May 2015 22:23:30 +0000 (15:23 -0700)]
Print more info on mark sweep invalid ref crash.

- Add extra info about the field holder.
- Suspend threads when verifying roots.

Bug: 20557050
Change-Id: Ia1f2269aaa3b1a81d0594e781e439a5decfb82f9

9 years agoAdd new style String operations during compilation init, part 2
Kenny Root [Thu, 14 May 2015 22:58:17 +0000 (15:58 -0700)]
Add new style String operations during compilation init, part 2

This allows some class initializers that deal with Strings to run during
compilation. However, java.lang.Character.toUpperCase() is blocking
initialization for some parts.

(cherry picked from commit 57f91e8956f4496391bff028a1b990540cc91c22)

Bug: 21036900
Change-Id: Ia969c6a643f510bc798f94fb10bca1a68fe2ae67

9 years agoStop wrapping close(2) with TEMP_FAILURE_RETRY in art.
Elliott Hughes [Fri, 15 May 2015 15:25:58 +0000 (08:25 -0700)]
Stop wrapping close(2) with TEMP_FAILURE_RETRY in art.

Note that all the TEMP_FAILURE_RETRY([A-Z] calls in this file are
wrong. The member functions return -errno, so only an EPERM failure
will return -1 (but errno should be EPERM, so you won't loop).

Bug: http://b/20501816
Change-Id: Ibde6a2c7bf92469d008d6d510f9391669ae37a84
(cherry picked from commit 6a887d6a1d1ca089b48663a5ae11f973b98785a9)

9 years agoMerge "In hprof, use an address within string for char array of empty string." into...
Jeff Hao [Fri, 15 May 2015 00:56:57 +0000 (00:56 +0000)]
Merge "In hprof, use an address within string for char array of empty string." into mnc-dev

9 years agoMerge changes I2ea008b7,Ibd7a643d into mnc-dev
Kenny Root [Fri, 15 May 2015 00:26:26 +0000 (00:26 +0000)]
Merge changes I2ea008b7,Ibd7a643d into mnc-dev

* changes:
  Add new style String operations during compilation init
  Fix non-range String init calls

9 years agoIn hprof, use an address within string for char array of empty string.
Jeff Hao [Fri, 15 May 2015 00:19:15 +0000 (17:19 -0700)]
In hprof, use an address within string for char array of empty string.

Bug: 21089461
Change-Id: I203345caf74fba2e9bf0549256147d84d1bb829e

9 years agoAdd new style String operations during compilation init
Kenny Root [Thu, 14 May 2015 22:58:17 +0000 (15:58 -0700)]
Add new style String operations during compilation init

This allows some class initializers that deal with Strings to run during
compilation. This includes the current implementation of
java.security.Security because it reads the "java.security" resource.

Bug: 21036900
Change-Id: I2ea008b774d4ed359e155318e0d06c1566186c34

9 years agoFix non-range String init calls
Kenny Root [Thu, 14 May 2015 23:48:22 +0000 (16:48 -0700)]
Fix non-range String init calls

When the String constructor was called via invoke-direct, it is changed
to the new StringFactory which is static. That means that the args need
to be shifted by one to deal with the change from non-static to static.
However, the non-range version of the invoke-direct was not shifted
correctly causing unstarted runtime initialization to get the wrong
first_dest_reg argument.

Bug: 21036900
Change-Id: Ibd7a643d877514ea396d7e4ab0dea327207cb78f

9 years agoRemove doublequoted command to adb sh -c.
Hiroshi Yamauchi [Thu, 14 May 2015 20:42:06 +0000 (13:42 -0700)]
Remove doublequoted command to adb sh -c.

(cherry pick commit 0a4c61db049f7ddcd9cbebb54e67a1285d621da9)

Change-Id: I0e0fceedf927df25b8d6b0cf235f43f928cb3534

9 years agoMerge "In hprof, set string class instance size to that of an empty string." into...
Jeff Hao [Thu, 14 May 2015 21:49:08 +0000 (21:49 +0000)]
Merge "In hprof, set string class instance size to that of an empty string." into mnc-dev

9 years agoIn hprof, set string class instance size to that of an empty string.
Jeff Hao [Wed, 13 May 2015 01:58:32 +0000 (18:58 -0700)]
In hprof, set string class instance size to that of an empty string.

Bug: 21066704
Change-Id: Ic52193f5801117ca642055ea700fc4bc21b690e8

9 years agoPrint field info on mark sweep invalid ref crash.
Hiroshi Yamauchi [Thu, 14 May 2015 04:14:22 +0000 (21:14 -0700)]
Print field info on mark sweep invalid ref crash.

(cherry pick commit eb2baaf20d9059c0fc38141780ec05bea0486c40)

Bug: 20557050
Change-Id: I3abb7a44e3b7ed3256653824fd1705aac5f7d72c

9 years agoQuick: Fix marking high words in DCE.
Vladimir Marko [Thu, 14 May 2015 10:47:39 +0000 (11:47 +0100)]
Quick: Fix marking high words in DCE.

This CL properly fixes the high word marking and reverts
    https://android-review.googlesource.com/150352
which was just covering up the underlying issue. A unit test
for the encountered issue is provided, though it does not
expose the deficiency in the cover-up CL.

Bug: 20640451

(cherry picked from commit 9cacef6e811940c2f21e7e54055379a2c43f0d06)

Change-Id: I4c4ca82fe4b2e34feb38090d88a5d5c754914f89

9 years agoART: Do not relocate app program headers in patchoat.
Vladimir Marko [Wed, 13 May 2015 18:06:30 +0000 (19:06 +0100)]
ART: Do not relocate app program headers in patchoat.

Change the check whether to relocate program headers in
patchoat to simply look whether there is a PT_LOAD section
with p_vaddr == 0. If there is, don't relocate the headers,
it should be an app. Otherwise, it's a boot image and needs
to be relocated.

Add overflow checking to ElfFileImpl<>::GetLoadedSize().

Bug: 21047854

(cherry picked from commit 3fc9903407c6e89ffbbc92ded9e272d9de58e9b6)

Change-Id: Ib3e1295fc06993bcfbaadd8f253ee4f5498f52e9

9 years agoAlso print class for NoSuchFieldException
Mathieu Chartier [Wed, 13 May 2015 20:13:24 +0000 (13:13 -0700)]
Also print class for NoSuchFieldException

Example message:
Caused by: java.lang.NoSuchFieldException: No field value in class Ljava/lang/String;

Added test.

Bug: 20881251

Change-Id: I4043cbf26c3077952b6c151da0d0edd980da26b1