Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/gc_implementation/shenandoah/shenandoahAsserts.hpp
38920 views
/*1* Copyright (c) 2018, Red Hat, Inc. All rights reserved.2*3* This code is free software; you can redistribute it and/or modify it4* under the terms of the GNU General Public License version 2 only, as5* published by the Free Software Foundation.6*7* This code is distributed in the hope that it will be useful, but WITHOUT8* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or9* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License10* version 2 for more details (a copy is included in the LICENSE file that11* accompanied this code).12*13* You should have received a copy of the GNU General Public License version14* 2 along with this work; if not, write to the Free Software Foundation,15* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.16*17* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA18* or visit www.oracle.com if you need additional information or have any19* questions.20*21*/2223#ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP24#define SHARE_VM_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP2526#include "oops/oop.hpp"27#include "utilities/debug.hpp"2829typedef FormatBuffer<8192> ShenandoahMessageBuffer;3031class ShenandoahAsserts {32public:33enum SafeLevel {34_safe_unknown,35_safe_oop,36_safe_oop_fwd,37_safe_all38};3940static void print_obj(ShenandoahMessageBuffer &msg, oop obj);4142static void print_non_obj(ShenandoahMessageBuffer &msg, void *loc);4344static void print_obj_safe(ShenandoahMessageBuffer &msg, void *loc);4546static void print_failure(SafeLevel level, oop obj, void *interior_loc, oop loc,47const char *phase, const char *label,48const char *file, int line);4950static void print_rp_failure(const char *label, BoolObjectClosure* actual,51const char *file, int line);5253static void assert_in_heap(void* interior_loc, oop obj, const char* file, int line);54static void assert_in_correct_region(void* interior_loc, oop obj, const char* file, int line);5556static void assert_correct(void* interior_loc, oop obj, const char* file, int line);57static void assert_forwarded(void* interior_loc, oop obj, const char* file, int line);58static void assert_not_forwarded(void* interior_loc, oop obj, const char* file, int line);59static void assert_marked(void* interior_loc, oop obj, const char* file, int line);60static void assert_in_cset(void* interior_loc, oop obj, const char* file, int line);61static void assert_not_in_cset(void* interior_loc, oop obj, const char* file, int line);62static void assert_not_in_cset_loc(void* interior_loc, const char* file, int line);6364static void assert_rp_isalive_not_installed(const char *file, int line);65static void assert_rp_isalive_installed(const char *file, int line);6667static void assert_heaplocked(const char* file, int line);68static void assert_not_heaplocked(const char* file, int line);69static void assert_heaplocked_or_safepoint(const char* file, int line);7071#ifdef ASSERT72#define shenandoah_assert_in_heap(interior_loc, obj) \73ShenandoahAsserts::assert_in_heap(interior_loc, obj, __FILE__, __LINE__)74#define shenandoah_assert_in_correct_region(interior_loc, obj) \75ShenandoahAsserts::assert_in_correct_region(interior_loc, obj, __FILE__, __LINE__)7677#define shenandoah_assert_correct_if(interior_loc, obj, condition) \78if (condition) ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)79#define shenandoah_assert_correct_except(interior_loc, obj, exception) \80if (!(exception)) ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)81#define shenandoah_assert_correct(interior_loc, obj) \82ShenandoahAsserts::assert_correct(interior_loc, obj, __FILE__, __LINE__)8384#define shenandoah_assert_forwarded_if(interior_loc, obj, condition) \85if (condition) ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)86#define shenandoah_assert_forwarded_except(interior_loc, obj, exception) \87if (!(exception)) ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)88#define shenandoah_assert_forwarded(interior_loc, obj) \89ShenandoahAsserts::assert_forwarded(interior_loc, obj, __FILE__, __LINE__)9091#define shenandoah_assert_not_forwarded_if(interior_loc, obj, condition) \92if (condition) ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)93#define shenandoah_assert_not_forwarded_except(interior_loc, obj, exception) \94if (!(exception)) ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)95#define shenandoah_assert_not_forwarded(interior_loc, obj) \96ShenandoahAsserts::assert_not_forwarded(interior_loc, obj, __FILE__, __LINE__)9798#define shenandoah_assert_marked_if(interior_loc, obj, condition) \99if (condition) ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)100#define shenandoah_assert_marked_except(interior_loc, obj, exception) \101if (!(exception)) ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)102#define shenandoah_assert_marked(interior_loc, obj) \103ShenandoahAsserts::assert_marked(interior_loc, obj, __FILE__, __LINE__)104105#define shenandoah_assert_in_cset_if(interior_loc, obj, condition) \106if (condition) ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)107#define shenandoah_assert_in_cset_except(interior_loc, obj, exception) \108if (!(exception)) ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)109#define shenandoah_assert_in_cset(interior_loc, obj) \110ShenandoahAsserts::assert_in_cset(interior_loc, obj, __FILE__, __LINE__)111112#define shenandoah_assert_not_in_cset_if(interior_loc, obj, condition) \113if (condition) ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)114#define shenandoah_assert_not_in_cset_except(interior_loc, obj, exception) \115if (!(exception)) ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)116#define shenandoah_assert_not_in_cset(interior_loc, obj) \117ShenandoahAsserts::assert_not_in_cset(interior_loc, obj, __FILE__, __LINE__)118119#define shenandoah_assert_not_in_cset_loc_if(interior_loc, condition) \120if (condition) ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)121#define shenandoah_assert_not_in_cset_loc_except(interior_loc, exception) \122if (!(exception)) ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)123#define shenandoah_assert_not_in_cset_loc(interior_loc) \124ShenandoahAsserts::assert_not_in_cset_loc(interior_loc, __FILE__, __LINE__)125126#define shenandoah_assert_rp_isalive_installed() \127ShenandoahAsserts::assert_rp_isalive_installed(__FILE__, __LINE__)128#define shenandoah_assert_rp_isalive_not_installed() \129ShenandoahAsserts::assert_rp_isalive_not_installed(__FILE__, __LINE__)130131#define shenandoah_assert_heaplocked() \132ShenandoahAsserts::assert_heaplocked(__FILE__, __LINE__)133134#define shenandoah_assert_not_heaplocked() \135ShenandoahAsserts::assert_not_heaplocked(__FILE__, __LINE__)136137#define shenandoah_assert_heaplocked_or_safepoint() \138ShenandoahAsserts::assert_heaplocked_or_safepoint(__FILE__, __LINE__)139#else140#define shenandoah_assert_in_heap(interior_loc, obj)141#define shenandoah_assert_in_correct_region(interior_loc, obj)142143#define shenandoah_assert_correct_if(interior_loc, obj, condition)144#define shenandoah_assert_correct_except(interior_loc, obj, exception)145#define shenandoah_assert_correct(interior_loc, obj)146147#define shenandoah_assert_forwarded_if(interior_loc, obj, condition)148#define shenandoah_assert_forwarded_except(interior_loc, obj, exception)149#define shenandoah_assert_forwarded(interior_loc, obj)150151#define shenandoah_assert_not_forwarded_if(interior_loc, obj, condition)152#define shenandoah_assert_not_forwarded_except(interior_loc, obj, exception)153#define shenandoah_assert_not_forwarded(interior_loc, obj)154155#define shenandoah_assert_marked_if(interior_loc, obj, condition)156#define shenandoah_assert_marked_except(interior_loc, obj, exception)157#define shenandoah_assert_marked(interior_loc, obj)158159#define shenandoah_assert_in_cset_if(interior_loc, obj, condition)160#define shenandoah_assert_in_cset_except(interior_loc, obj, exception)161#define shenandoah_assert_in_cset(interior_loc, obj)162163#define shenandoah_assert_not_in_cset_if(interior_loc, obj, condition)164#define shenandoah_assert_not_in_cset_except(interior_loc, obj, exception)165#define shenandoah_assert_not_in_cset(interior_loc, obj)166167#define shenandoah_assert_not_in_cset_loc_if(interior_loc, condition)168#define shenandoah_assert_not_in_cset_loc_except(interior_loc, exception)169#define shenandoah_assert_not_in_cset_loc(interior_loc)170171#define shenandoah_assert_rp_isalive_installed()172#define shenandoah_assert_rp_isalive_not_installed()173174#define shenandoah_assert_heaplocked()175#define shenandoah_assert_not_heaplocked()176#define shenandoah_assert_heaplocked_or_safepoint()177#endif178179#define shenandoah_not_implemented \180{ fatal("Deliberately not implemented."); }181#define shenandoah_not_implemented_return(v) \182{ fatal("Deliberately not implemented."); return v; }183184};185186#endif //SHARE_VM_GC_SHENANDOAH_SHENANDOAHASSERTS_HPP187188189