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" 1898d1cc8033251c93786e2fa8c59a2e555a9493beMingyao Yang#include "entrypoints/entrypoint_utils-inl.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, 29ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers mirror::ArtMethod* referrer, 302dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers Thread* self, 31cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe StackReference<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, 41ef7d42fca18c16fbaf103822ad16f23246e2905dIan Rogers mirror::ArtMethod* referrer, 42cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe Thread* self, 43cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe StackReference<mirror::ArtMethod>* sp) 44b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 45e2645d3e2db211bfd75775a2185c135ff387161aIan Rogers // Called when method->dex_cache_resolved_types_[] misses. 4657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 4757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers return ResolveVerifyAndClinit(type_idx, referrer, self, false, false); 4857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 4957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 502dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersextern "C" mirror::Class* artInitializeTypeAndVerifyAccessFromCode(uint32_t type_idx, 51cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe mirror::ArtMethod* referrer, 52cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe Thread* self, 53cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe StackReference<mirror::ArtMethod>* sp) 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, 62cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe Thread* self, 63cf4035a4c41ccfcc3e89a0cee25f5218a11b0705Andreas Gampe StackReference<mirror::ArtMethod>* sp) 64b726dcb581bf72da46527378ccb6889020f0e6e9Ian Rogers SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { 6557b86d47b66322693a070185fadfb43cb9c12eabIan Rogers FinishCalleeSaveFrameSetup(self, sp, Runtime::kRefsOnly); 6657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers return ResolveStringFromCode(referrer, string_idx); 6757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 6857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 6957b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} // namespace art 70