/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_RUNTIME_VERIFY_OBJECT_H_ #define ART_RUNTIME_VERIFY_OBJECT_H_ #include <stdint.h> #include "base/macros.h" namespace art { namespace mirror { class Class; class Object; } // namespace mirror // How we want to sanity check the heap's correctness. enum VerifyObjectMode { kVerifyObjectModeDisabled, // Heap verification is disabled. kVerifyObjectModeFast, // Sanity heap accesses quickly by using VerifyClassClass. kVerifyObjectModeAll // Sanity heap accesses thoroughly. }; enum VerifyObjectFlags { kVerifyNone = 0x0, // Verify self when we are doing an operation. kVerifyThis = 0x1, // Verify reads from objects. kVerifyReads = 0x2, // Verify writes to objects. kVerifyWrites = 0x4, // Verify all things. kVerifyAll = kVerifyThis | kVerifyReads | kVerifyWrites, }; static constexpr bool kVerifyStack = kIsDebugBuild; static constexpr VerifyObjectFlags kDefaultVerifyFlags = kVerifyNone; static constexpr VerifyObjectMode kVerifyObjectSupport = kDefaultVerifyFlags != 0 ? kVerifyObjectModeFast : kVerifyObjectModeDisabled; ALWAYS_INLINE void VerifyObject(mirror::Object* obj) NO_THREAD_SAFETY_ANALYSIS; // Check that c.getClass() == c.getClass().getClass(). ALWAYS_INLINE bool VerifyClassClass(mirror::Class* c) NO_THREAD_SAFETY_ANALYSIS; } // namespace art #endif // ART_RUNTIME_VERIFY_OBJECT_H_