Path: blob/master/src/hotspot/share/gc/shenandoah/shenandoahAsserts.hpp
40961 views
/*1* Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#ifndef SHARE_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP25#define SHARE_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP2627#include "memory/iterator.hpp"28#include "runtime/mutex.hpp"29#include "utilities/formatBuffer.hpp"3031typedef FormatBuffer<8192> ShenandoahMessageBuffer;3233class ShenandoahAsserts {34public:35enum SafeLevel {36_safe_unknown,37_safe_oop,38_safe_oop_fwd,39_safe_all40};4142static void print_obj(ShenandoahMessageBuffer &msg, oop obj);4344static void print_non_obj(ShenandoahMessageBuffer &msg, void *loc);4546static void print_obj_safe(ShenandoahMessageBuffer &msg, void *loc);4748static void print_failure(SafeLevel level, oop obj, void *interior_loc, oop loc,49const char *phase, const char *label,50const char *file, int line);5152static void print_rp_failure(const char *label, BoolObjectClosure* actual,53const char *file, int line);5455static void assert_in_heap(void* interior_loc, oop obj, const char* file, int line);56static void assert_in_heap_or_null(void* interior_loc, oop obj, const char* file, int line);57static void assert_in_correct_region(void* interior_loc, oop obj, const char* file, int line);5859static void assert_correct(void* interior_loc, oop obj, const char* file, int line);60static void assert_forwarded(void* interior_loc, oop obj, const char* file, int line);61static void assert_not_forwarded(void* interior_loc, oop obj, const char* file, int line);62static void assert_marked(void* interior_loc, oop obj, const char* file, int line);63static void assert_in_cset(void* interior_loc, oop obj, const char* file, int line);64static void assert_not_in_cset(void* interior_loc, oop obj, const char* file, int line);65static void assert_not_in_cset_loc(void* interior_loc, const char* file, int line);6667static void assert_locked_or_shenandoah_safepoint(Mutex* lock, const char* file, int line);6869static void assert_heaplocked(const char* file, int line);70static void assert_not_heaplocked(const char* file, int line);71static void assert_heaplocked_or_safepoint(const char* file, int line);7273#ifdef ASSERT74#define shenandoah_assert_in_heap(interior_loc, obj) \75ShenandoahAsserts::assert_in_heap(interior_loc, obj, __FILE__, __LINE__)76#define shenandoah_assert_in_heap_or_null(interior_loc, obj) \77ShenandoahAsserts::assert_in_heap_or_null(interior_loc, obj, __FILE__, __LINE__)78#define shenandoah_assert_in_correct_region(interior_loc, obj) \79ShenandoahAsserts::assert_in_correct_region(interior_loc, obj, __FILE__, __LINE__)8081#define shenandoah_assert_correct_if(interior_loc, obj, condition) \82if (condition) ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)83#define shenandoah_assert_correct_except(interior_loc, obj, exception) \84if (!(exception)) ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)85#define shenandoah_assert_correct(interior_loc, obj) \86ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)8788#define shenandoah_assert_forwarded_if(interior_loc, obj, condition) \89if (condition) ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)90#define shenandoah_assert_forwarded_except(interior_loc, obj, exception) \91if (!(exception)) ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)92#define shenandoah_assert_forwarded(interior_loc, obj) \93ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)9495#define shenandoah_assert_not_forwarded_if(interior_loc, obj, condition) \96if (condition) ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)97#define shenandoah_assert_not_forwarded_except(interior_loc, obj, exception) \98if (!(exception)) ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)99#define shenandoah_assert_not_forwarded(interior_loc, obj) \100ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)101102#define shenandoah_assert_marked_if(interior_loc, obj, condition) \103if (condition) ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)104#define shenandoah_assert_marked_except(interior_loc, obj, exception) \105if (!(exception)) ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)106#define shenandoah_assert_marked(interior_loc, obj) \107ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)108109#define shenandoah_assert_in_cset_if(interior_loc, obj, condition) \110if (condition) ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)111#define shenandoah_assert_in_cset_except(interior_loc, obj, exception) \112if (!(exception)) ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)113#define shenandoah_assert_in_cset(interior_loc, obj) \114ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)115116#define shenandoah_assert_not_in_cset_if(interior_loc, obj, condition) \117if (condition) ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)118#define shenandoah_assert_not_in_cset_except(interior_loc, obj, exception) \119if (!(exception)) ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)120#define shenandoah_assert_not_in_cset(interior_loc, obj) \121ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)122123#define shenandoah_assert_not_in_cset_loc_if(interior_loc, condition) \124if (condition) ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)125#define shenandoah_assert_not_in_cset_loc_except(interior_loc, exception) \126if (!(exception)) ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)127#define shenandoah_assert_not_in_cset_loc(interior_loc) \128ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)129130#define shenandoah_assert_rp_isalive_installed() \131ShenandoahAsserts::assert_rp_isalive_installed(__FILE__, __LINE__)132#define shenandoah_assert_rp_isalive_not_installed() \133ShenandoahAsserts::assert_rp_isalive_not_installed(__FILE__, __LINE__)134135#define shenandoah_assert_safepoint() \136assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "Should be at Shenandoah Safepoints")137138#define shenandoah_assert_locked_or_safepoint(lock) \139ShenandoahAsserts::assert_locked_or_shenandoah_safepoint(lock, __FILE__, __LINE__)140141#define shenandoah_assert_heaplocked() \142ShenandoahAsserts::assert_heaplocked(__FILE__, __LINE__)143144#define shenandoah_assert_not_heaplocked() \145ShenandoahAsserts::assert_not_heaplocked(__FILE__, __LINE__)146147#define shenandoah_assert_heaplocked_or_safepoint() \148ShenandoahAsserts::assert_heaplocked_or_safepoint(__FILE__, __LINE__)149#else150#define shenandoah_assert_in_heap(interior_loc, obj)151#define shenandoah_assert_in_heap_or_null(interior_loc, obj)152#define shenandoah_assert_in_correct_region(interior_loc, obj)153154#define shenandoah_assert_correct_if(interior_loc, obj, condition)155#define shenandoah_assert_correct_except(interior_loc, obj, exception)156#define shenandoah_assert_correct(interior_loc, obj)157158#define shenandoah_assert_forwarded_if(interior_loc, obj, condition)159#define shenandoah_assert_forwarded_except(interior_loc, obj, exception)160#define shenandoah_assert_forwarded(interior_loc, obj)161162#define shenandoah_assert_not_forwarded_if(interior_loc, obj, condition)163#define shenandoah_assert_not_forwarded_except(interior_loc, obj, exception)164#define shenandoah_assert_not_forwarded(interior_loc, obj)165166#define shenandoah_assert_marked_if(interior_loc, obj, condition)167#define shenandoah_assert_marked_except(interior_loc, obj, exception)168#define shenandoah_assert_marked(interior_loc, obj)169170#define shenandoah_assert_in_cset_if(interior_loc, obj, condition)171#define shenandoah_assert_in_cset_except(interior_loc, obj, exception)172#define shenandoah_assert_in_cset(interior_loc, obj)173174#define shenandoah_assert_not_in_cset_if(interior_loc, obj, condition)175#define shenandoah_assert_not_in_cset_except(interior_loc, obj, exception)176#define shenandoah_assert_not_in_cset(interior_loc, obj)177178#define shenandoah_assert_not_in_cset_loc_if(interior_loc, condition)179#define shenandoah_assert_not_in_cset_loc_except(interior_loc, exception)180#define shenandoah_assert_not_in_cset_loc(interior_loc)181182#define shenandoah_assert_rp_isalive_installed()183#define shenandoah_assert_rp_isalive_not_installed()184185#define shenandoah_assert_safepoint()186#define shenandoah_assert_locked_or_safepoint(lock)187188#define shenandoah_assert_heaplocked()189#define shenandoah_assert_not_heaplocked()190#define shenandoah_assert_heaplocked_or_safepoint()191192#endif193194#define shenandoah_not_implemented \195{ fatal("Deliberately not implemented."); }196#define shenandoah_not_implemented_return(v) \197{ fatal("Deliberately not implemented."); return v; }198199};200201#endif // SHARE_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP202203204