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