12b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko/* 22b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * Copyright (C) 2013 The Android Open Source Project 32b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * 42b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * Licensed under the Apache License, Version 2.0 (the "License"); 52b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * you may not use this file except in compliance with the License. 62b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * You may obtain a copy of the License at 72b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * 82b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * http://www.apache.org/licenses/LICENSE-2.0 92b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * 102b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * Unless required by applicable law or agreed to in writing, software 112b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * distributed under the License is distributed on an "AS IS" BASIS, 122b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * See the License for the specific language governing permissions and 142b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko * limitations under the License. 152b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko */ 162b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 172b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#ifndef ART_RUNTIME_VERIFIER_METHOD_VERIFIER_INL_H_ 182b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#define ART_RUNTIME_VERIFIER_METHOD_VERIFIER_INL_H_ 192b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 202b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#include "base/logging.h" 212b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#include "method_verifier.h" 222b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#include "mirror/class_loader.h" 232b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#include "mirror/dex_cache.h" 24eb8167a4f4d27fce0530f6724ab8032610cd146bMathieu Chartier#include "handle_scope-inl.h" 252b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 262b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Markonamespace art { 272b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Markonamespace verifier { 282b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 290f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline const DexFile::CodeItem* MethodVerifier::CodeItem() const { 302b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return code_item_; 312b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 322b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 330f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline RegisterLine* MethodVerifier::GetRegLine(uint32_t dex_pc) { 342b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return reg_table_.GetLine(dex_pc); 352b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 362b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 370f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline const InstructionFlags& MethodVerifier::GetInstructionFlags(size_t index) const { 382b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return insn_flags_[index]; 39de40d478930d0889a2aea5cbf58aa63da24e5dfaMathieu Chartier} 40de40d478930d0889a2aea5cbf58aa63da24e5dfaMathieu Chartier 41de40d478930d0889a2aea5cbf58aa63da24e5dfaMathieu Chartierinline InstructionFlags& MethodVerifier::GetInstructionFlags(size_t index) { 42de40d478930d0889a2aea5cbf58aa63da24e5dfaMathieu Chartier return insn_flags_[index]; 432b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 442b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 450f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline mirror::ClassLoader* MethodVerifier::GetClassLoader() { 46bf99f77dda749e2b653e8c45259b1fb56e7bb012Mathieu Chartier return class_loader_.Get(); 472b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 482b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 490f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline mirror::DexCache* MethodVerifier::GetDexCache() { 50bf99f77dda749e2b653e8c45259b1fb56e7bb012Mathieu Chartier return dex_cache_.Get(); 512b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 522b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 53be10e8e99a78caae01fb65769218800d465144aeVladimir Markoinline ArtMethod* MethodVerifier::GetMethod() const { 54be10e8e99a78caae01fb65769218800d465144aeVladimir Marko return mirror_method_; 55be10e8e99a78caae01fb65769218800d465144aeVladimir Marko} 56be10e8e99a78caae01fb65769218800d465144aeVladimir Marko 570f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline MethodReference MethodVerifier::GetMethodReference() const { 582b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return MethodReference(dex_file_, dex_method_idx_); 592b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 602b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 610f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline uint32_t MethodVerifier::GetAccessFlags() const { 622b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return method_access_flags_; 632b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 642b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 650f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline bool MethodVerifier::HasCheckCasts() const { 662b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return has_check_casts_; 672b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 682b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 690f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline bool MethodVerifier::HasVirtualOrInterfaceInvokes() const { 702b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return has_virtual_or_interface_invokes_; 712b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 722b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 730f98205f10b982e3a5fd8c421d6f3332b5e46873Vladimir Markoinline bool MethodVerifier::HasFailures() const { 742b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return !failure_messages_.empty(); 752b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 762b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 77d8f69b086baf6717ce949d1c4de90d73b91083b0Ian Rogersinline const RegType& MethodVerifier::ResolveCheckedClass(uint32_t class_idx) { 782b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko DCHECK(!HasFailures()); 79d8f69b086baf6717ce949d1c4de90d73b91083b0Ian Rogers const RegType& result = ResolveClassAndCheckAccess(class_idx); 802b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko DCHECK(!HasFailures()); 812b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko return result; 822b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} 832b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 842b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} // namespace verifier 852b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko} // namespace art 862b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko 872b5eaa2b49f7489bafdadc4b4463ae27e4261817Vladimir Marko#endif // ART_RUNTIME_VERIFIER_METHOD_VERIFIER_INL_H_ 88