quick_dexcache_entrypoints.cc revision ea46f950e7a51585db293cd7f047de190a482414
157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers/* 257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Copyright (C) 2012 The Android Open Source Project 357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * you may not use this file except in compliance with the License. 657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * You may obtain a copy of the License at 757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * http://www.apache.org/licenses/LICENSE-2.0 957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * 1057b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * Unless required by applicable law or agreed to in writing, software 1157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * distributed under the License is distributed on an "AS IS" BASIS, 1257b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * See the License for the specific language governing permissions and 1457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers * limitations under the License. 1557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers */ 1657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 1757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers#include "callee_save_frame.h" 187655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "entrypoints/entrypoint_utils.h" 192dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "class_linker-inl.h" 20fa46d3ee8cba2985c5c8bdfe47d15daf0613ebdcIan Rogers#include "dex_file-inl.h" 217655f29fabc0a12765de828914a18314382e5a35Ian Rogers#include "gc/accounting/card_table-inl.h" 22ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom#include "mirror/art_method-inl.h" 232dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "mirror/object_array-inl.h" 244f6ad8ab428038129b2d0d6c40b7fd625cca15e1Ian Rogers#include "mirror/object-inl.h" 2557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 2657b86d47b66322693a070185fadfb43cb9c12eabIan Rogersnamespace art { 2757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 282dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersextern "C" mirror::Class* artInitializeStaticStorageFromCode(uint32_t type_idx, 29ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom const mirror::ArtMethod* referrer, 302dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers Thread* self, 31ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom mirror::ArtMethod** sp) 32b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 33e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // Called to ensure static storage base is initialized for direct static field reads and writes. 34e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // A class may be accessing another class' fields when it doesn't have access, as access has been 35e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // given by inheritance. 3657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 37e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers return ResolveVerifyAndClinit(type_idx, referrer, self, true, false); 3857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 3957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 402dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersextern "C" mirror::Class* artInitializeTypeFromCode(uint32_t type_idx, 41ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom const mirror::ArtMethod* referrer, 42ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom Thread* self, mirror::ArtMethod** sp) 43b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 44e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // Called when method->dex_cache_resolved_types_[] misses. 4557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 4657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers return ResolveVerifyAndClinit(type_idx, referrer, self, false, false); 4757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 4857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 492dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersextern "C" mirror::Class* artInitializeTypeAndVerifyAccessFromCode(uint32_t type_idx, 50ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom const mirror::ArtMethod* referrer, 512dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers Thread* self, 52ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom mirror::ArtMethod** sp) 53b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 5457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers // Called when caller isn't guaranteed to have access to a type and the dex cache may be 55e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // unpopulated. 5657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 5757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers return ResolveVerifyAndClinit(type_idx, referrer, self, false, true); 5857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 5957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 60ea46f950e7a51585db293cd7f047de190a482414Brian Carlstromextern "C" mirror::String* artResolveStringFromCode(mirror::ArtMethod* referrer, 612dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers int32_t string_idx, 62ea46f950e7a51585db293cd7f047de190a482414Brian Carlstrom Thread* self, mirror::ArtMethod** sp) 63b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 6457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 6557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers return ResolveStringFromCode(referrer, string_idx); 6657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 6757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 6857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} // namespace art 69