/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_INIT_ENTRYPOINTS_H_ #define ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_INIT_ENTRYPOINTS_H_ #include "base/logging.h" // FOR VLOG_IS_ON. #include "entrypoints/jni/jni_entrypoints.h" #include "entrypoints/runtime_asm_entrypoints.h" #include "quick_alloc_entrypoints.h" #include "quick_default_externs.h" #include "quick_entrypoints.h" namespace art { static void DefaultInitEntryPoints(JniEntryPoints* jpoints, QuickEntryPoints* qpoints, bool monitor_jni_entry_exit) { // JNI jpoints->pDlsymLookup = reinterpret_cast(art_jni_dlsym_lookup_stub); jpoints->pDlsymLookupCritical = reinterpret_cast(art_jni_dlsym_lookup_critical_stub); // Alloc ResetQuickAllocEntryPoints(qpoints); // Resolution and initialization qpoints->SetInitializeStaticStorage(art_quick_initialize_static_storage); qpoints->SetResolveTypeAndVerifyAccess(art_quick_resolve_type_and_verify_access); qpoints->SetResolveType(art_quick_resolve_type); qpoints->SetResolveMethodHandle(art_quick_resolve_method_handle); qpoints->SetResolveMethodType(art_quick_resolve_method_type); qpoints->SetResolveString(art_quick_resolve_string); // Field qpoints->SetSet8Instance(art_quick_set8_instance); qpoints->SetSet8Static(art_quick_set8_static); qpoints->SetSet16Instance(art_quick_set16_instance); qpoints->SetSet16Static(art_quick_set16_static); qpoints->SetSet32Instance(art_quick_set32_instance); qpoints->SetSet32Static(art_quick_set32_static); qpoints->SetSet64Instance(art_quick_set64_instance); qpoints->SetSet64Static(art_quick_set64_static); qpoints->SetSetObjInstance(art_quick_set_obj_instance); qpoints->SetSetObjStatic(art_quick_set_obj_static); qpoints->SetGetByteInstance(art_quick_get_byte_instance); qpoints->SetGetBooleanInstance(art_quick_get_boolean_instance); qpoints->SetGetShortInstance(art_quick_get_short_instance); qpoints->SetGetCharInstance(art_quick_get_char_instance); qpoints->SetGet32Instance(art_quick_get32_instance); qpoints->SetGet64Instance(art_quick_get64_instance); qpoints->SetGetObjInstance(art_quick_get_obj_instance); qpoints->SetGetByteStatic(art_quick_get_byte_static); qpoints->SetGetBooleanStatic(art_quick_get_boolean_static); qpoints->SetGetShortStatic(art_quick_get_short_static); qpoints->SetGetCharStatic(art_quick_get_char_static); qpoints->SetGet32Static(art_quick_get32_static); qpoints->SetGet64Static(art_quick_get64_static); qpoints->SetGetObjStatic(art_quick_get_obj_static); // Array qpoints->SetAputObject(art_quick_aput_obj); // JNI qpoints->SetJniMethodStart(art_jni_method_start); qpoints->SetJniMethodEnd(art_jni_method_end); qpoints->SetQuickGenericJniTrampoline(art_quick_generic_jni_trampoline); qpoints->SetJniDecodeReferenceResult(JniDecodeReferenceResult); qpoints->SetJniReadBarrier(art_jni_read_barrier); // Locks if (UNLIKELY(VLOG_IS_ON(systrace_lock_logging))) { qpoints->SetJniLockObject(art_jni_lock_object_no_inline); qpoints->SetJniUnlockObject(art_jni_unlock_object_no_inline); qpoints->SetLockObject(art_quick_lock_object_no_inline); qpoints->SetUnlockObject(art_quick_unlock_object_no_inline); } else { qpoints->SetJniLockObject(art_jni_lock_object); qpoints->SetJniUnlockObject(art_jni_unlock_object); qpoints->SetLockObject(art_quick_lock_object); qpoints->SetUnlockObject(art_quick_unlock_object); } // Invocation qpoints->SetQuickImtConflictTrampoline(art_quick_imt_conflict_trampoline); qpoints->SetQuickResolutionTrampoline(art_quick_resolution_trampoline); qpoints->SetQuickToInterpreterBridge(art_quick_to_interpreter_bridge); qpoints->SetInvokeDirectTrampolineWithAccessCheck( art_quick_invoke_direct_trampoline_with_access_check); qpoints->SetInvokeInterfaceTrampolineWithAccessCheck( art_quick_invoke_interface_trampoline_with_access_check); qpoints->SetInvokeStaticTrampolineWithAccessCheck( art_quick_invoke_static_trampoline_with_access_check); qpoints->SetInvokeSuperTrampolineWithAccessCheck( art_quick_invoke_super_trampoline_with_access_check); qpoints->SetInvokeVirtualTrampolineWithAccessCheck( art_quick_invoke_virtual_trampoline_with_access_check); qpoints->SetInvokePolymorphic(art_quick_invoke_polymorphic); qpoints->SetInvokeCustom(art_quick_invoke_custom); // Thread qpoints->SetTestSuspend(art_quick_test_suspend); // Throws qpoints->SetDeliverException(art_quick_deliver_exception); qpoints->SetThrowArrayBounds(art_quick_throw_array_bounds); qpoints->SetThrowDivZero(art_quick_throw_div_zero); qpoints->SetThrowNullPointer(art_quick_throw_null_pointer_exception); qpoints->SetThrowStackOverflow(art_quick_throw_stack_overflow); qpoints->SetThrowStringBounds(art_quick_throw_string_bounds); // Deoptimize qpoints->SetDeoptimize(art_quick_deoptimize_from_compiled_code); // StringBuilder append qpoints->SetStringBuilderAppend(art_quick_string_builder_append); // Tiered JIT support qpoints->SetUpdateInlineCache(art_quick_update_inline_cache); qpoints->SetCompileOptimized(art_quick_compile_optimized); // Tracing hooks qpoints->SetMethodEntryHook(art_quick_method_entry_hook); qpoints->SetMethodExitHook(art_quick_method_exit_hook); if (monitor_jni_entry_exit) { qpoints->SetJniMethodStart(art_jni_monitored_method_start); qpoints->SetJniMethodEnd(art_jni_monitored_method_end); } } } // namespace art #endif // ART_RUNTIME_ENTRYPOINTS_QUICK_QUICK_DEFAULT_INIT_ENTRYPOINTS_H_