blob: ea077889ee313b65e0879f752aa4a2521c6b2d50 [file] [log] [blame]
/*
* 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<void*>(art_jni_dlsym_lookup_stub);
jpoints->pDlsymLookupCritical = reinterpret_cast<void*>(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);
qpoints->SetJniMethodEntryHook(art_jni_method_entry_hook);
// 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_