112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_report.h -- Run-time logging and reporting facilities 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Interface design by SystemC Verification Working Group. 2512027Sjungma@eit.uni-kl.de Implementation by Alex Riesen, Synopsys Inc. 2612027Sjungma@eit.uni-kl.de Original implementation by Martin Janssen, Synopsys Inc. 2712027Sjungma@eit.uni-kl.de Reference implementation by Cadence Design Systems, Inc., 2002-09-23: 2812027Sjungma@eit.uni-kl.de Norris Ip, Dean Shea, John Rose, Jasvinder Singh, William Paulsen, 2912027Sjungma@eit.uni-kl.de John Pierce, Rachida Kebichi, Ted Elkind, David Bailey. 3012027Sjungma@eit.uni-kl.de 3112027Sjungma@eit.uni-kl.de CHANGE LOG AT END OF FILE 3212027Sjungma@eit.uni-kl.de *****************************************************************************/ 3312027Sjungma@eit.uni-kl.de 3412027Sjungma@eit.uni-kl.de#ifndef SC_REPORT_H 3512027Sjungma@eit.uni-kl.de#define SC_REPORT_H 1 3612027Sjungma@eit.uni-kl.de 3712027Sjungma@eit.uni-kl.de#include <exception> 3812027Sjungma@eit.uni-kl.de#include <string> 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.denamespace sc_core { 4112027Sjungma@eit.uni-kl.de 4212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4312027Sjungma@eit.uni-kl.de// ENUM : sc_severity 4412027Sjungma@eit.uni-kl.de// 4512027Sjungma@eit.uni-kl.de// Enumeration of possible exception severity levels 4612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 4712027Sjungma@eit.uni-kl.de 4812027Sjungma@eit.uni-kl.deenum sc_severity { 4912027Sjungma@eit.uni-kl.de SC_INFO = 0, // informative only 5012027Sjungma@eit.uni-kl.de SC_WARNING, // indicates potentially incorrect condition 5112027Sjungma@eit.uni-kl.de SC_ERROR, // indicates a definite problem 5212027Sjungma@eit.uni-kl.de SC_FATAL, // indicates a problem from which we cannot recover 5312027Sjungma@eit.uni-kl.de SC_MAX_SEVERITY 5412027Sjungma@eit.uni-kl.de}; 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.detypedef unsigned sc_actions; 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 5912027Sjungma@eit.uni-kl.de// ENUM : sc_verbosity 6012027Sjungma@eit.uni-kl.de// 6112027Sjungma@eit.uni-kl.de// Enumeration of message verbosity. 6212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 6312027Sjungma@eit.uni-kl.de 6412027Sjungma@eit.uni-kl.de enum sc_verbosity { 6512027Sjungma@eit.uni-kl.de SC_NONE = 0, 6612027Sjungma@eit.uni-kl.de SC_LOW = 100, 6712027Sjungma@eit.uni-kl.de SC_MEDIUM = 200, 6812027Sjungma@eit.uni-kl.de SC_HIGH = 300, 6912027Sjungma@eit.uni-kl.de SC_FULL = 400, 7012027Sjungma@eit.uni-kl.de SC_DEBUG = 500 7112027Sjungma@eit.uni-kl.de }; 7212027Sjungma@eit.uni-kl.de 7312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7412027Sjungma@eit.uni-kl.de// ENUM : 7512027Sjungma@eit.uni-kl.de// 7612027Sjungma@eit.uni-kl.de// Enumeration of actions on an exception (implementation specific) 7712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7812027Sjungma@eit.uni-kl.de 7912027Sjungma@eit.uni-kl.deenum { 8012027Sjungma@eit.uni-kl.de SC_UNSPECIFIED = 0x0000, // look for lower-priority rule 8112027Sjungma@eit.uni-kl.de SC_DO_NOTHING = 0x0001, // take no action (ignore if other bits set) 8212027Sjungma@eit.uni-kl.de SC_THROW = 0x0002, // throw an exception 8312027Sjungma@eit.uni-kl.de SC_LOG = 0x0004, // add report to report log 8412027Sjungma@eit.uni-kl.de SC_DISPLAY = 0x0008, // display report to screen 8512027Sjungma@eit.uni-kl.de SC_CACHE_REPORT = 0x0010, // save report to cache 8612027Sjungma@eit.uni-kl.de SC_INTERRUPT = 0x0020, // call sc_interrupt_here(...) 8712027Sjungma@eit.uni-kl.de SC_STOP = 0x0040, // call sc_stop() 8812027Sjungma@eit.uni-kl.de SC_ABORT = 0x0080 // call abort() 8912027Sjungma@eit.uni-kl.de}; 9012027Sjungma@eit.uni-kl.de 9112027Sjungma@eit.uni-kl.declass sc_object; 9212027Sjungma@eit.uni-kl.declass sc_time; 9312027Sjungma@eit.uni-kl.destruct sc_msg_def; 9412027Sjungma@eit.uni-kl.declass sc_report; 9512027Sjungma@eit.uni-kl.declass sc_report_handler; 9612027Sjungma@eit.uni-kl.deconst std::string sc_report_compose_message( const sc_report& ); 9712027Sjungma@eit.uni-kl.de 9812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 9912027Sjungma@eit.uni-kl.de// CLASS : sc_report 10012027Sjungma@eit.uni-kl.de// 10112027Sjungma@eit.uni-kl.de// Exception reporting 10212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.declass sc_report : public std::exception 10512027Sjungma@eit.uni-kl.de{ 10612027Sjungma@eit.uni-kl.de friend class sc_report_handler; 10712027Sjungma@eit.uni-kl.de friend sc_report* sc_handle_exception(); 10812027Sjungma@eit.uni-kl.de 10912027Sjungma@eit.uni-kl.de sc_report(); // used internally by sc_handle_exception 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.depublic: 11212027Sjungma@eit.uni-kl.de 11312027Sjungma@eit.uni-kl.de sc_report(const sc_report&); 11412027Sjungma@eit.uni-kl.de 11512027Sjungma@eit.uni-kl.de sc_report & operator=(const sc_report&); 11612027Sjungma@eit.uni-kl.de 11712027Sjungma@eit.uni-kl.de virtual ~sc_report() throw(); 11812027Sjungma@eit.uni-kl.de 11912027Sjungma@eit.uni-kl.de const char * get_msg_type() const; 12012027Sjungma@eit.uni-kl.de 12112027Sjungma@eit.uni-kl.de const char * get_msg() const 12212027Sjungma@eit.uni-kl.de { return msg; } 12312027Sjungma@eit.uni-kl.de 12412027Sjungma@eit.uni-kl.de sc_severity get_severity() const 12512027Sjungma@eit.uni-kl.de { return severity; } 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de const char * get_file_name() const 12812027Sjungma@eit.uni-kl.de { return file; } 12912027Sjungma@eit.uni-kl.de 13012027Sjungma@eit.uni-kl.de int get_line_number() const 13112027Sjungma@eit.uni-kl.de { return line; } 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.de const sc_time & get_time() const 13412027Sjungma@eit.uni-kl.de { return *timestamp; } 13512027Sjungma@eit.uni-kl.de 13612027Sjungma@eit.uni-kl.de const char* get_process_name() const; 13712027Sjungma@eit.uni-kl.de 13812027Sjungma@eit.uni-kl.de int get_verbosity() const { return m_verbosity_level; } 13912027Sjungma@eit.uni-kl.de 14012027Sjungma@eit.uni-kl.de bool valid () const 14112027Sjungma@eit.uni-kl.de { 14212027Sjungma@eit.uni-kl.de return process != 0; 14312027Sjungma@eit.uni-kl.de } 14412027Sjungma@eit.uni-kl.de 14512027Sjungma@eit.uni-kl.de virtual const char* what() const throw() 14612027Sjungma@eit.uni-kl.de { 14712027Sjungma@eit.uni-kl.de return m_what; 14812027Sjungma@eit.uni-kl.de } 14912027Sjungma@eit.uni-kl.de 15012027Sjungma@eit.uni-kl.de void swap( sc_report& ); 15112027Sjungma@eit.uni-kl.de 15212027Sjungma@eit.uni-kl.deprotected: 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.de sc_report(sc_severity, 15512027Sjungma@eit.uni-kl.de const sc_msg_def*, 15612027Sjungma@eit.uni-kl.de const char* msg, 15712027Sjungma@eit.uni-kl.de const char* file, 15812027Sjungma@eit.uni-kl.de int line, 15912027Sjungma@eit.uni-kl.de int verbosity_level=SC_MEDIUM); 16012027Sjungma@eit.uni-kl.de 16112027Sjungma@eit.uni-kl.de sc_severity severity; 16212027Sjungma@eit.uni-kl.de const sc_msg_def* md; 16312027Sjungma@eit.uni-kl.de char* msg; 16412027Sjungma@eit.uni-kl.de char* file; 16512027Sjungma@eit.uni-kl.de int line; 16612027Sjungma@eit.uni-kl.de sc_time* timestamp; 16712027Sjungma@eit.uni-kl.de sc_object* process; 16812027Sjungma@eit.uni-kl.de int m_verbosity_level; 16912027Sjungma@eit.uni-kl.de char* m_what; 17012027Sjungma@eit.uni-kl.de 17112027Sjungma@eit.uni-kl.depublic: // backward compatibility with 2.0+ 17212027Sjungma@eit.uni-kl.de 17312027Sjungma@eit.uni-kl.de static const char* get_message(int id); 17412027Sjungma@eit.uni-kl.de static bool is_suppressed(int id); 17512027Sjungma@eit.uni-kl.de static void make_warnings_errors(bool); 17612027Sjungma@eit.uni-kl.de static void register_id(int id, const char* msg); 17712027Sjungma@eit.uni-kl.de static void suppress_id(int id, bool); // only for info or warning 17812027Sjungma@eit.uni-kl.de static void suppress_infos(bool); 17912027Sjungma@eit.uni-kl.de static void suppress_warnings(bool); 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.de int get_id() const; 18212027Sjungma@eit.uni-kl.de}; 18312027Sjungma@eit.uni-kl.detypedef std::exception sc_exception; 18412027Sjungma@eit.uni-kl.de 18512027Sjungma@eit.uni-kl.de#define SC_DEFAULT_INFO_ACTIONS \ 18612027Sjungma@eit.uni-kl.de (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY) 18712027Sjungma@eit.uni-kl.de#define SC_DEFAULT_WARNING_ACTIONS \ 18812027Sjungma@eit.uni-kl.de (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY) 18912027Sjungma@eit.uni-kl.de#define SC_DEFAULT_ERROR_ACTIONS \ 19012027Sjungma@eit.uni-kl.de (::sc_core::SC_LOG | ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_THROW) 19112027Sjungma@eit.uni-kl.de#define SC_DEFAULT_FATAL_ACTIONS \ 19212027Sjungma@eit.uni-kl.de (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY | \ 19312027Sjungma@eit.uni-kl.de ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_ABORT) 19412027Sjungma@eit.uni-kl.de 19512027Sjungma@eit.uni-kl.de 19612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 19712027Sjungma@eit.uni-kl.de// Report macros. 19812027Sjungma@eit.uni-kl.de// 19912027Sjungma@eit.uni-kl.de// Use these macros to report an info, warning, error, or fatal. 20012027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 20112027Sjungma@eit.uni-kl.de 20212027Sjungma@eit.uni-kl.de#define SC_REPORT_INFO( msg_type, msg ) \ 20312027Sjungma@eit.uni-kl.de ::sc_core::sc_report_handler::report( \ 20412027Sjungma@eit.uni-kl.de ::sc_core::SC_INFO, msg_type, msg, __FILE__, __LINE__ ) 20512027Sjungma@eit.uni-kl.de 20612027Sjungma@eit.uni-kl.de#define SC_REPORT_INFO_VERB( msg_type, msg, verbosity ) \ 20712027Sjungma@eit.uni-kl.de ::sc_core::sc_report_handler::report( \ 20812027Sjungma@eit.uni-kl.de ::sc_core::SC_INFO, msg_type, msg, verbosity, \ 20912027Sjungma@eit.uni-kl.de __FILE__ , __LINE__ ) 21012027Sjungma@eit.uni-kl.de 21112027Sjungma@eit.uni-kl.de#define SC_REPORT_WARNING( msg_type, msg ) \ 21212027Sjungma@eit.uni-kl.de ::sc_core::sc_report_handler::report( \ 21312027Sjungma@eit.uni-kl.de ::sc_core::SC_WARNING, msg_type, msg, __FILE__, __LINE__ ) 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.de#define SC_REPORT_ERROR( msg_type, msg ) \ 21612027Sjungma@eit.uni-kl.de ::sc_core::sc_report_handler::report( \ 21712027Sjungma@eit.uni-kl.de ::sc_core::SC_ERROR, msg_type, msg, __FILE__, __LINE__ ) 21812027Sjungma@eit.uni-kl.de 21912027Sjungma@eit.uni-kl.de#define SC_REPORT_FATAL( msg_type, msg ) \ 22012027Sjungma@eit.uni-kl.de ::sc_core::sc_report_handler::report( \ 22112027Sjungma@eit.uni-kl.de ::sc_core::SC_FATAL, msg_type, msg, __FILE__, __LINE__ ) 22212027Sjungma@eit.uni-kl.de 22312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 22412027Sjungma@eit.uni-kl.de// MACRO : sc_assert(expr) 22512027Sjungma@eit.uni-kl.de// 22612027Sjungma@eit.uni-kl.de// Like assert(), but additionally prints the current process name 22712027Sjungma@eit.uni-kl.de// and simulation time, if the simulation is running. 22812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 22912027Sjungma@eit.uni-kl.de 23012027Sjungma@eit.uni-kl.de#ifdef NDEBUG 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de#define sc_assert(expr) \ 23312027Sjungma@eit.uni-kl.de ((void) 0) 23412027Sjungma@eit.uni-kl.de 23512027Sjungma@eit.uni-kl.de#else 23612027Sjungma@eit.uni-kl.de 23712027Sjungma@eit.uni-kl.de#define sc_assert(expr) \ 23812027Sjungma@eit.uni-kl.de ((void)((expr) ? 0 : \ 23912027Sjungma@eit.uni-kl.de (SC_REPORT_FATAL( ::sc_core::SC_ID_ASSERTION_FAILED_, #expr ), 0))) 24012027Sjungma@eit.uni-kl.de 24112027Sjungma@eit.uni-kl.de#endif // NDEBUG 24212027Sjungma@eit.uni-kl.de 24312027Sjungma@eit.uni-kl.deextern const char SC_ID_UNKNOWN_ERROR_[]; 24412027Sjungma@eit.uni-kl.deextern const char SC_ID_WITHOUT_MESSAGE_[]; 24512027Sjungma@eit.uni-kl.deextern const char SC_ID_NOT_IMPLEMENTED_[]; 24612027Sjungma@eit.uni-kl.deextern const char SC_ID_INTERNAL_ERROR_[]; 24712027Sjungma@eit.uni-kl.deextern const char SC_ID_ASSERTION_FAILED_[]; 24812027Sjungma@eit.uni-kl.deextern const char SC_ID_OUT_OF_BOUNDS_[]; 24912027Sjungma@eit.uni-kl.de 25012027Sjungma@eit.uni-kl.de// backward compatibility with 2.0+ 25112027Sjungma@eit.uni-kl.deextern const char SC_ID_REGISTER_ID_FAILED_[]; 25212027Sjungma@eit.uni-kl.de 25312027Sjungma@eit.uni-kl.de} // namespace sc_core 25412027Sjungma@eit.uni-kl.de 25512027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report_handler.h" 25612027Sjungma@eit.uni-kl.de 25712027Sjungma@eit.uni-kl.de/***************************************************************************** 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 26012027Sjungma@eit.uni-kl.de changes you are making here. 26112027Sjungma@eit.uni-kl.de 26212027Sjungma@eit.uni-kl.de Name, Affiliation, Date: Alex Riesen, Synopsys Inc., Jan 28, 2003 26312027Sjungma@eit.uni-kl.de Description of Modification: Implementation for SytemC 2.1 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de *****************************************************************************/ 26612027Sjungma@eit.uni-kl.de 26712027Sjungma@eit.uni-kl.de// $Log: sc_report.h,v $ 26812027Sjungma@eit.uni-kl.de// Revision 1.8 2011/08/26 20:46:19 acg 26912027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 27012027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 27112027Sjungma@eit.uni-kl.de// 27212027Sjungma@eit.uni-kl.de// Revision 1.7 2011/05/05 17:46:04 acg 27312027Sjungma@eit.uni-kl.de// Philip A. Hartmann: changes in "swap" support. 27412027Sjungma@eit.uni-kl.de// 27512027Sjungma@eit.uni-kl.de// Revision 1.6 2011/04/19 02:39:44 acg 27612027Sjungma@eit.uni-kl.de// Andy Goodrich: set proper name for get_verbosity(). 27712027Sjungma@eit.uni-kl.de// 27812027Sjungma@eit.uni-kl.de// Revision 1.5 2011/03/23 16:16:48 acg 27912027Sjungma@eit.uni-kl.de// Andy Goodrich: finish message verbosity support. 28012027Sjungma@eit.uni-kl.de// 28112027Sjungma@eit.uni-kl.de// Revision 1.4 2011/02/18 20:38:44 acg 28212027Sjungma@eit.uni-kl.de// Andy Goodrich: Updated Copyright notice. 28312027Sjungma@eit.uni-kl.de// 28412027Sjungma@eit.uni-kl.de// Revision 1.3 2011/02/01 23:02:05 acg 28512027Sjungma@eit.uni-kl.de// Andy Goodrich: IEEE 1666 2011 changes. 28612027Sjungma@eit.uni-kl.de// 28712027Sjungma@eit.uni-kl.de// Revision 1.2 2008/05/20 20:42:50 acg 28812027Sjungma@eit.uni-kl.de// Andy Goodrich: added sc_core namespace prefix for ID value in sc_assert() 28912027Sjungma@eit.uni-kl.de// macro. 29012027Sjungma@eit.uni-kl.de// 29112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:06 acg 29212027Sjungma@eit.uni-kl.de// SystemC 2.3 29312027Sjungma@eit.uni-kl.de// 29412027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:53:11 acg 29512027Sjungma@eit.uni-kl.de// Andy Goodrich: Added $Log command so that CVS comments are reproduced in 29612027Sjungma@eit.uni-kl.de// the source. 29712027Sjungma@eit.uni-kl.de// 29812027Sjungma@eit.uni-kl.de 29912027Sjungma@eit.uni-kl.de#endif // SC_REPORT_H 300