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_
 |