summaryrefslogtreecommitdiffstats
path: root/runtime
Commit message (Collapse)AuthorAgeFilesLines
* ART: Fix verifier mishandling erroneous array component typesAndreas Gampe2014-07-304-19/+37
| | | | | | | The verifier must not assume that component types are not erroneous. Bug: 16661259 Change-Id: I23b2f517259ca9c0b8a1aa38f6348fcd61e0b22e
* Add support for bump pointer spaces to DdmSendHeapSegments.Mathieu Chartier2014-07-302-13/+42
| | | | | | | | | | | | | | | Added support for bump pointer spaces as well as differentiating between DlMallocSpaces and RosAllocSpaces. Added logic to reset the start of next chunk to prevent inbetween space regions counted as free. Fixed a debug build bug where we were doing an mprotect after creating a rosalloc space. In debug builds, this writes a magic value in the page. This was faulting since it was set to PROT_NONE. The fix moves the mprotect before the RosAlloc space creation. Bug: 16408851 Change-Id: Ibe18198d05ff353fbb57d10b2f7719fdcbf1c5f0
* Merge "ART: Check for duplicate class definitions in dex file verifier"Andreas Gampe2014-07-252-0/+12
|\
| * ART: Check for duplicate class definitions in dex file verifierAndreas Gampe2014-07-292-0/+12
| | | | | | | | | | | | | | Reject dex files that try to define two classes with the same type id. Bug: 16016492 Change-Id: I82cc99c00b3e3cb2b3d537ec14beed9049fe900f
* | Merge "Stop thread from reattaching during runtime shutdown while tracing."Jeff Hao2014-07-284-30/+47
|\ \
| * | Stop thread from reattaching during runtime shutdown while tracing.Jeff Hao2014-07-294-30/+47
| | | | | | | | | | | | | | | Bug: 16024763 Change-Id: Iad5ba180241ff74b15baf5c3a15ed2d2ed60fcf0
* | | Add GcRoot to clean up and enforce read barriers.Hiroshi Yamauchi2014-07-2941-324/+397
|/ / | | | | | | | | | | | | | | | | | | | | | | | | Introduce a value-type wrapper around Object* for GC roots so that 1) we won't have to directly add the read barrier code in many places and 2) we can avoid accidentally bypassing/missing read barriers on GC roots (the GcRoot interface ensures that the read barrier is executed on a read). The jdwp test passed. Bug: 12687968 Change-Id: Ib167c7c325b3c7e3900133578815f04d219972a1
* | Merge "Revert "Fix proxy tracing and enable tests that now work with tracing.""Nicolas Geoffray2014-07-233-18/+14
|\ \ | |/ |/|
| * Revert "Fix proxy tracing and enable tests that now work with tracing."Nicolas Geoffray2014-07-293-18/+14
| | | | | | | | | | | | This reverts commit 0398e171f206cd3b140a358ac31b0a3760380df1. Change-Id: I1346ab01485cc7207be0ecb4d8788c500c0df903
* | AArch64: Clean up CalleeSaveMethod frame and the use of temp registers.Zheng Xu2014-07-297-291/+289
|/ | | | | | | | | | | | | | | | | | | | | | | | | | CalleeSaveMethod frame size changes : SaveAll : 368 -> 176 RefOnly : 176 -> 96 RefsAndArgs : 304 -> 224 JNI register spill size changes : 160 -> 88 In the transition assembly, use registers following the rules: 1. x0-x7 as temp/argument registers. 2. IP0, IP1 as scratch registers. 3. After correct type of callee-save-frame has been setup, all registers are scratch-able(probably except xSELF and xSUSPEND). 4. When restore callee-save-frame, IP0 and IP1 should be untouched. 5. From C to managed code, we assume all callee save register in AAPCS will be restored by managed code except x19(SUSPEND). In quick compiler: 1. Use IP0, IP1 as scratch register. 2. Use IP1 as hidden argument register(IP0 will be scratched by trampoline.) Change-Id: I05ed9d418b01b9e87218a7608536f57e7a286e4c
* Fix proxy tracing and enable tests that now work with tracing.Jeff Hao2014-07-283-14/+18
| | | | | Bug: 16386215 Change-Id: Iec2a372c921caceb050c6baf72d48b3d822899a4
* ART: Reject array-length on non-reference registerAndreas Gampe2014-07-281-0/+2
| | | | | | | | It should be a hard verifier failure if we detect an array-length instruction over a non-reference-type register. Bug: 16595896 Change-Id: I059510b15c846551b2f8ded86cfd8127543324f4
* ART: Rework quick entrypoint code in Mir2Lir, cleanupAndreas Gampe2014-07-283-105/+178
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To reduce the complexity of calling trampolines in generic code, introduce an enumeration for entrypoints. Introduce a header that lists the entrypoint enum and exposes a templatized method that translates an enum value to the corresponding thread offset value. Call helpers are rewritten to have an enum parameter instead of the thread offset. Also rewrite LoadHelper and GenConversionCall this way. It is now LoadHelper's duty to select the right thread offset size. Introduce InvokeTrampoline virtual method to Mir2Lir. This allows to further simplify the call helpers, as well as make OpThreadMem specific to X86 only (removed from Mir2Lir). Make GenInlinedCharAt virtual, move a copy to X86 backend, and simplify both copies. Remove LoadBaseIndexedDisp and OpRegMem from Mir2Lir, as they are now specific to X86 only. Remove StoreBaseIndexedDisp from Mir2Lir, as it was only ever used in the X86 backend. Remove OpTlsCmp from Mir2Lir, as it was only ever used in the X86 backend. Remove OpLea from Mir2Lir, as it was only ever defined in the X86 backend. Remove GenImmedCheck from Mir2Lir as it was neither used nor implemented. Change-Id: If0a6182288c5d57653e3979bf547840a4c47626e
* ART: Fix target test pathsAndreas Gampe2014-07-271-1/+13
| | | | | | Nativetest is now nativetest64 on 64b targets. Change-Id: I4c4c6bba1a56525df2993708caaae3e6f7f5f2f6
* Remove the per-project FDO support. Use the common FDO support from build/core.Dehao Chen2014-07-271-0/+1
| | | | | | LOCAL_FDO_SUPPORT indicates if the module should enable FDO builds. Change-Id: I1eab8bf418b7ceb060eea18bdd304a06597af3d3
* Merge "ART: Native bridge command-line parameter"Andreas Gampe2014-07-245-24/+70
|\
| * ART: Native bridge command-line parameterAndreas Gampe2014-07-265-24/+70
| | | | | | | | | | | | | | | | | | | | | | Add a command-line parameter for the native bridge library, slight refactor/cleanup. Add run-test 115 to test the native bridge interface. Currently the tests are black-listed for the target, as the setup for the test is too complicated in the current infrastructure. Change-Id: I6ccf19485e8c30b96e9f2fd5425278cb1ebd403f
* | Merge "ART: Allow arrays with erroneous component type"Andreas Gampe2014-07-251-1/+8
|\ \
| * | ART: Allow arrays with erroneous component typeAndreas Gampe2014-07-251-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | Array classes must tolerate having component type classes that are erroneous. Change CreateArrayClass to use LookupClass when FindClass failed. Bug: 16019155 Change-Id: Id4868c5498431c85c199aa3cbecd23566dce3601
* | | Merge "Tweaks to patchoat and other related things."Andreas Gampe2014-07-231-28/+25
|\ \ \ | |_|/ |/| |
| * | Tweaks to patchoat and other related things.Alex Light2014-07-251-28/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | Removed some flags from patchoat that were poorly specified and fixed some other issues with the relocation system. Bug: 15358152 Change-Id: Ia6d47b1a008f02373307d833ba45f00ea408d76f
* | | ART: Clean up API after change 102631Andreas Gampe2014-07-253-8/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | This adds an abort_on_error parameter to GetCurrentMethod, which is by default true. This restores all previous behavior, except for monitor installation, where it follows 101639. Bug: 16556938 Change-Id: I9a12b9a21ccb9f558c86236bb58d15ff2fafaec0
* | | Fix main space memory leak and add checks.Mathieu Chartier2014-07-252-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The hypothesis is that we were leaking the main space and its bitmaps, then eventually we would run out of virtual address space, which would cause a null bitmap (DCHECK). Finally when we tried adding the space with a null bitmap to the heap bitmap it segfaulted. Changed some non performance critical DCHECK -> CHECK. Bug: 16563323 Change-Id: I08a1f873752e28ebcf63ebbd90f92d994d7ca96b
* | | Fix dangling pointer bug when transitioning to background.Mathieu Chartier2014-07-251-11/+10
|/ / | | | | | | | | | | | | | | | | | | | | Dangling pointer left behind from the old rosalloc / dlmalloc spaces. We now avoid using this pointer by using main_space_ and non_moving_space_ as well as clear the pointer when we remove the space. Bug: 16567203 Change-Id: Ida9ff30783e89cd4a4d86a4d0e912701692101f1
* | Merge "Rename openDexFileNative to openDexFile."Narayan Kamath2014-07-231-2/+2
|\ \
| * | Rename openDexFileNative to openDexFile.Calin Juravle2014-07-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We no longer need two distinct methods. Bug: 15563230 (cherry picked from commit 8edcb9c8bc62fcbd181e136c32086f2b970306a4) Change-Id: Ib95098af0dd26733b5946d8e24ae4dfbcdbec3ba
* | | Merge "Add a new stack map scheme that encodes compilation info per pc."Nicolas Geoffray2014-07-232-7/+329
|\ \ \ | |/ / |/| |
| * | Add a new stack map scheme that encodes compilation info per pc.Nicolas Geoffray2014-07-212-7/+329
| | | | | | | | | | | | | | | | | | | | | | | | Encodes stack mask, register mask, dex register values, and inlining info. The encoding is currently very straightforward: there is no clever encoding, nor compression. Change-Id: I5fd9ae28189a5513cd9e3c8d52c648463207643d
* | | ART: Fix wrong CHECK in GetCurrentLocationForThrowAndreas Gampe2014-07-252-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | Under certain circumstances kDexNoIndex is actually an encoded dex pc. Change the setup of CurrentMethodVisitor to account for that. Bug: 16556938 Change-Id: I4671f8c71c76f3e17e02db10f6da8ecc8331c87d
* | | Merge "ART: Relax CurrentMethodVisitor requirements on GetDexPC"Andreas Gampe2014-07-232-1/+5
|\ \ \
| * | | ART: Relax CurrentMethodVisitor requirements on GetDexPCAndreas Gampe2014-07-252-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In case we want to dump a Java stack after an unhandled fault, in case we hold a thinlocked monitor, that monitor might get inflated. That can cause an abort as we may not have enough/correct information for the state at the bottom-most call. Relax GetDexPc in the CurrentMethodVisitor to not abort when it cannot find a dex pc. Instead, let the caller handle such a case. This CL allows the locking_dex_pc_ in Monitor to be DexFile::kDexNoIndex, which avoids the above abort. Bug: 16352802, 16556938 Change-Id: I3adf89b2d8f018a0c3e3abdd26e542f46ee59eef
* | | | Merge "ART: Account for multidex location strings in VMClassLoader"Andreas Gampe2014-07-232-7/+24
|\ \ \ \
| * | | | ART: Account for multidex location strings in VMClassLoaderAndreas Gampe2014-07-242-7/+24
| | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | To look up resources, look in the unadorned location. Bug: 16530747 Change-Id: Ia97e39366444f6666a78ade7298d3c22b4b79f8a
* | | | Integrate ART with NativeBridge interfacesYong WU2014-07-244-5/+358
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Native-bridge will provide the following interfaces to ART: struct NativeBridgeCallbacks { bool (*initialize )(NativeBridgeArtCallbacks* vm_itf); void* (*loadLibrary )(const char* libpath, int flag); void* (*getTrampoline)(void* handle, const char* name, const char* shorty, uint32_t len); bool (*isSupported )(const char* libpath); }; Native-bridge will expose a symbol NativeBridgeItf with the type of NativeBridgeCallbacks to ART. And ART will provide the interfaces below to native-bridge: struct NativeBridgeArtCallbacks { int (*logger )(int prio, const char* tag, const char* fmt, ...); const char* (*getMethodShorty)(JNIEnv* env, jmethodID mid); int (*getNativeMethodCount )(JNIEnv* env, jclass clazz); int (*getNativeMethods )(JNIEnv* env, jclass clazz, JNINativeMethod* methods, uint32_t method_count); }; Based on the interfaces, if an ART call to dlopen fails to open a native library, it queries the native bridge by using NativeBridgeCallbacks::isSupported(). If the native library is supported by native-bridge, ART can load the native library using NativeBridgeCallbacks::loadLibrary() and get a trampoline for a specific native method using NativeBridgeCallbacks::getTrampoline(). ART can then call the native method using the normal signature and the address of the trampoline. On the other side, in the case of a native method calling JNI native function CallXXXXMethodY(), native-bridge calls back to Art for the shorty of the method using NativeBridgeArtCallbacks::getMethodShorty() so that it can prepare based on host calling convention. In case of JNI function RegisterNatives()/UnregisterNatives(), native bridge can call back to NativeBridgeArtCallbacks::getNativeMethodCount() and NativeBridgeArtCallbacks ::getNativeMethods() to get all native methods of specified class so that all corresponding trampolines can be prepared/destroyed. Class NativeBridge is created to encapsulate the function pointers of NativeBridgeCallbacks and provides better abstraction to ART. Note: functionality is turned off in native_bridge.cc at the moment. Change-Id: I652755044957a7960254648652b538cce70dd011
* | | | Fix memory leak in RemoveRememberedSet.Mathieu Chartier2014-07-242-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | RemoveRememberedSet now deletes the remembered set. Bug: 16532086 Change-Id: I01092931cc20cd0688dd42eed3dde9ad140889b2
* | | | Fix stale remembered sets error.Mathieu Chartier2014-07-241-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were forgetting to remove the remembered set in transition to background. This resulted in remembered sets being added for spaces which no longer existed. This finally caused an error when a new space happened to have the same address as the old space, resulting in a CHECK failure. Also tuned the number of ParallelGC to prevent spurrious failures and removed the ParallelGC from broken tests in the make file. Bug: 16532086 Bug: 16406852 Change-Id: I00bbcbd7daa03c867732d165be62b72e6c43bce1
* | | | Merge "Fix access to long/double stack values from debugger"Sebastien Hertz2014-07-234-47/+197
|\ \ \ \
| * | | | Fix access to long/double stack values from debuggerSebastien Hertz2014-07-174-47/+197
| | |/ / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Long and double values live in a pair of DEX registers. When we compile DEX code with the Quick compiler, a DEX register either lives in the stack or is promoted to a physical register. In the case of a pair of DEX registers, the Quick compiler assumes both registers live in the same "area": both live in the stack or both are promoted to physical registers. From the debugger, we used to access these values by reading/writing each DEX register separately. However, this does not work when only one DEX register of a pair is promoted and the other lives in the stack. In this case, the compiled code reads from/writes to the stack only. To fix that, the debugger must follow the same rule than the Quick compiler: if both DEX registers are promoted, read/write them from/to physical registers, otherwise read/write them from/to the stack. We add StackVisitor:GetVRegPair and StackVisitor:SetVRegPair for this purpose. We also follow the same rule when deoptimizing. However we need to do that only when we know two consecutive DEX registers are part of a pair (long or double). We know that thanks to the verifier. Bug: 15527793 Change-Id: I04812285ff26ef0129f39792a1cf776f3591ca2d
* | | | ART: Fix x86_64 instrumentation_exit, also movsd -> movqAndreas Gampe2014-07-232-5/+5
| |/ / |/| | | | | | | | | | | | | | | | | Change movd/movsd to movq. Bug: 16386215 Change-Id: Icca71ca2aeeb2917aff46043051d6046f04395d4
* | | Fix x86 instrumentation exit entrypoint and trace size limit.Jeff Hao2014-07-221-7/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | The x86 instruction movd only copies a 32-bit value when used with a memory location. movsd properly copies 64-bits. Bug: 16386215 Change-Id: Ia59b2c2af72ce5202c7b62413687aedb48cfd25e
* | | Merge "Recycle mem-maps for collector transitions."Mathieu Chartier2014-07-2214-152/+215
|\ \ \
| * | | Recycle mem-maps for collector transitions.Mathieu Chartier2014-07-2214-152/+215
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We now create spaces when we need them for collector transitions or homogeneous compaction by recycling mem maps. Change the bump pointer space size to be as large as the heap capacity instead of 1/2 heap capacity like it used to be. For GSS, bump pointer spaces are set to 32MB currently. Changed GSS to have main space == non moving space since we don't need to copy from the main space. Fixes GC stress tests 074, 096. Fixed test 080 oom throw with -Xmx2m for GC stress test, this was broken since it was allocating a 4 MB array before starting the OOM process. Bug: 14059466 Bug: 16406852 Change-Id: I62877cfa24ec944a6f34ffac30334f454a8002fd
* | | | Fix build, missing spaces around =/<.Mingyao Yang2014-07-221-1/+1
|/ / / | | | | | | | | | Change-Id: I2e7824075626a07eccb0a5eb77ef157214fe70fb
* | | Merge "Set vtable in class object to null after linking."Mingyao Yang2014-07-229-49/+123
|\ \ \
| * | | Set vtable in class object to null after linking.Mingyao Yang2014-07-229-49/+123
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is follow-up work of embedding imt and vtable for faster interface/virtual call dispatching. Once vtable becomes embedded, the original vtable is nulled. Change-Id: I307696657d1e283654169dbecb8f7815c42bbabc
* | | | ART: Fix checks for relocation deltaAndreas Gampe2014-07-221-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Change < to <= and > to >=. Change-Id: I7579e3c13dc1b33801ace3a0f8d85cadaee41e6e
* | | | Runtime can now be set to require relocationAlex Light2014-07-2221-148/+834
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a pair of runtime flags -Xrelocate and -Xnorelocate that can force the runtime to require that all files that are run are relocated, to prevent attacks based on the known art base address. Add support for running patchoat on oat files compiled without an image. Change run-test to have new --prebuild and --relocate flags. Bug: 15358152 Change-Id: I91166c62dd1ab80e5cbcb7883a2cd0d56afca32d
* | | | Interpreter can kick in even when implicit checks are enabled.Nicolas Geoffray2014-07-223-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | Add a GetStackEndForInterpreter for its stack overfow check. Change-Id: I2d4fc229a8eb727fda509ff778e16d60d96ecc28
* | | | Merge "Avoid marking erroneous classes as erroneous twice."Ian Rogers2014-07-171-3/+9
|\ \ \ \
| * | | | Avoid marking erroneous classes as erroneous twice.Ian Rogers2014-07-221-3/+9
| | | | | | | | | | | | | | | | | | | | Change-Id: I1f340a6054cf36f6b4ba7d85cfd05b1c677dced7