147 lines
6.1 KiB
C++
147 lines
6.1 KiB
C++
/*
|
|
* 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);
|
|
|
|
// 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_
|