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 17e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier#include "art_method-inl.h" 1857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers#include "callee_save_frame.h" 192dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers#include "mirror/array.h" 20832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers#include "entrypoints/entrypoint_utils.h" 2157b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 2257b86d47b66322693a070185fadfb43cb9c12eabIan Rogersnamespace art { 2357b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 2457b86d47b66322693a070185fadfb43cb9c12eabIan Rogers/* 25832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers * Handle fill array data by copying appropriate part of dex file into array. 2657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers */ 27832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogersextern "C" int artHandleFillArrayDataFromCode(uint32_t payload_offset, mirror::Array* array, 28e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier ArtMethod* method, Thread* self) 2990443477f9a0061581c420775ce3b7eeae7468bcMathieu Chartier SHARED_REQUIRES(Locks::mutator_lock_) { 301d8cdbc5202378a5f1a4b3a1fba610675ed4dcd5Ian Rogers ScopedQuickEntrypointChecks sqec(self); 31832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers const uint16_t* const insns = method->GetCodeItem()->insns_; 32832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers const Instruction::ArrayDataPayload* payload = 33832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers reinterpret_cast<const Instruction::ArrayDataPayload*>(insns + payload_offset); 34832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers bool success = FillArrayData(array, payload); 35832336b3c9eb892045a8de1bb12c9361112ca3c5Ian Rogers return success ? 0 : -1; 3657b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} 3757b86d47b66322693a070185fadfb43cb9c12eabIan Rogers 3857b86d47b66322693a070185fadfb43cb9c12eabIan Rogers} // namespace art 39