report.hh revision 13401
13914Ssaidi@eecs.umich.edu/* 23914Ssaidi@eecs.umich.edu * Copyright 2018 Google, Inc. 33914Ssaidi@eecs.umich.edu * 43914Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 53914Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 63914Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 73914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 83914Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 93914Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 103914Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 113914Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 123914Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 133914Ssaidi@eecs.umich.edu * this software without specific prior written permission. 143914Ssaidi@eecs.umich.edu * 153914Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 163914Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 173914Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 183914Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 193914Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 203914Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 213914Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 223914Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 233914Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 243914Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 253914Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 263914Ssaidi@eecs.umich.edu * 273914Ssaidi@eecs.umich.edu * Authors: Gabe Black 283914Ssaidi@eecs.umich.edu */ 293914Ssaidi@eecs.umich.edu 303914Ssaidi@eecs.umich.edu#ifndef __SYSTEMC_UTILS_REPORT_HH__ 313914Ssaidi@eecs.umich.edu#define __SYSTEMC_UTILS_REPORT_HH__ 323914Ssaidi@eecs.umich.edu 333914Ssaidi@eecs.umich.edu#include <initializer_list> 343914Ssaidi@eecs.umich.edu#include <map> 353914Ssaidi@eecs.umich.edu#include <memory> 363914Ssaidi@eecs.umich.edu#include <string> 373914Ssaidi@eecs.umich.edu#include <utility> 383914Ssaidi@eecs.umich.edu 393914Ssaidi@eecs.umich.edu#include "systemc/ext/utils/sc_report.hh" 403914Ssaidi@eecs.umich.edu#include "systemc/ext/utils/sc_report_handler.hh" 413914Ssaidi@eecs.umich.edu 423914Ssaidi@eecs.umich.edunamespace sc_gem5 433914Ssaidi@eecs.umich.edu{ 443914Ssaidi@eecs.umich.edu 453914Ssaidi@eecs.umich.edustruct ReportMsgInfo 463914Ssaidi@eecs.umich.edu{ 473914Ssaidi@eecs.umich.edu explicit ReportMsgInfo() : 483914Ssaidi@eecs.umich.edu actions(sc_core::SC_UNSPECIFIED), count(0), limit(-1), 493914Ssaidi@eecs.umich.edu sevActions{ sc_core::SC_UNSPECIFIED, sc_core::SC_UNSPECIFIED, 503914Ssaidi@eecs.umich.edu sc_core::SC_UNSPECIFIED, sc_core::SC_UNSPECIFIED }, 513914Ssaidi@eecs.umich.edu sevCounts{0, 0, 0, 0}, sevLimits{-1, -1, -1, -1}, id(-1) 523943Sbinkertn@umich.edu {} 533914Ssaidi@eecs.umich.edu 543914Ssaidi@eecs.umich.edu void 553914Ssaidi@eecs.umich.edu checkLimits(sc_core::sc_severity severity, sc_core::sc_actions &actions) 563914Ssaidi@eecs.umich.edu { 573943Sbinkertn@umich.edu int sevLimit = sevLimits[severity]; 583943Sbinkertn@umich.edu int sevCount = sevCounts[severity]; 593943Sbinkertn@umich.edu if ((limit != -1 && limit >= count) || 603914Ssaidi@eecs.umich.edu (sevLimit != 1 && sevLimit >= sevCount)) { 613914Ssaidi@eecs.umich.edu actions |= sc_core::SC_STOP; 623914Ssaidi@eecs.umich.edu } 633914Ssaidi@eecs.umich.edu } 643914Ssaidi@eecs.umich.edu 653914Ssaidi@eecs.umich.edu sc_core::sc_actions actions; 663914Ssaidi@eecs.umich.edu int count; 673914Ssaidi@eecs.umich.edu int limit; 683914Ssaidi@eecs.umich.edu 693914Ssaidi@eecs.umich.edu sc_core::sc_actions sevActions[sc_core::SC_MAX_SEVERITY]; 703914Ssaidi@eecs.umich.edu int sevCounts[sc_core::SC_MAX_SEVERITY]; 713914Ssaidi@eecs.umich.edu int sevLimits[sc_core::SC_MAX_SEVERITY]; 723914Ssaidi@eecs.umich.edu 733914Ssaidi@eecs.umich.edu int id; 743914Ssaidi@eecs.umich.edu}; 753914Ssaidi@eecs.umich.edu 763914Ssaidi@eecs.umich.edustruct ReportSevInfo 773914Ssaidi@eecs.umich.edu{ 783914Ssaidi@eecs.umich.edu explicit ReportSevInfo(sc_core::sc_actions actions) : 793914Ssaidi@eecs.umich.edu actions(actions), count(0), limit(-1) 803914Ssaidi@eecs.umich.edu {} 813914Ssaidi@eecs.umich.edu 823914Ssaidi@eecs.umich.edu void 833914Ssaidi@eecs.umich.edu checkLimit(sc_core::sc_actions &actions) 843914Ssaidi@eecs.umich.edu { 853914Ssaidi@eecs.umich.edu if (limit != -1 && limit >= count) 863914Ssaidi@eecs.umich.edu actions |= sc_core::SC_STOP; 873914Ssaidi@eecs.umich.edu } 883914Ssaidi@eecs.umich.edu 893914Ssaidi@eecs.umich.edu sc_core::sc_actions actions; 903914Ssaidi@eecs.umich.edu int count; 913943Sbinkertn@umich.edu int limit; 923914Ssaidi@eecs.umich.edu}; 933914Ssaidi@eecs.umich.edu 943914Ssaidi@eecs.umich.eduextern const char *reportSeverityNames[sc_core::SC_MAX_SEVERITY]; 953914Ssaidi@eecs.umich.eduextern ReportSevInfo reportSevInfos[sc_core::SC_MAX_SEVERITY]; 963914Ssaidi@eecs.umich.edu 973914Ssaidi@eecs.umich.edustd::map<std::string, ReportMsgInfo> &reportMsgInfoMap(); 983914Ssaidi@eecs.umich.edustd::map<int, std::string> &reportIdToMsgMap(); 993914Ssaidi@eecs.umich.edu 1003914Ssaidi@eecs.umich.eduextern int reportVerbosityLevel; 1013943Sbinkertn@umich.edu 1023914Ssaidi@eecs.umich.eduextern sc_core::sc_actions reportSuppressedActions; 1033914Ssaidi@eecs.umich.eduextern sc_core::sc_actions reportForcedActions; 1043914Ssaidi@eecs.umich.eduextern sc_core::sc_actions reportCatchActions; 1053914Ssaidi@eecs.umich.edu 1063914Ssaidi@eecs.umich.eduextern sc_core::sc_report_handler_proc reportHandlerProc; 1073914Ssaidi@eecs.umich.edu 1083914Ssaidi@eecs.umich.eduextern std::unique_ptr<sc_core::sc_report> globalReportCache; 1093914Ssaidi@eecs.umich.edu 1103914Ssaidi@eecs.umich.eduextern bool reportWarningsAsErrors; 1113914Ssaidi@eecs.umich.edu 1123914Ssaidi@eecs.umich.edustruct DefaultReportMessages 1133914Ssaidi@eecs.umich.edu{ 1143914Ssaidi@eecs.umich.edu protected: 1153914Ssaidi@eecs.umich.edu static DefaultReportMessages *&top(); 1163914Ssaidi@eecs.umich.edu DefaultReportMessages *next; 1173914Ssaidi@eecs.umich.edu 118 std::initializer_list<std::pair<int, const char *>> msgs; 119 void install(); 120 121 public: 122 DefaultReportMessages(std::initializer_list<std::pair<int, const char *>>); 123 124 static void installAll(); 125}; 126 127} // namespace sc_gem5 128 129#endif // __SYSTEMC_UTILS_REPORT_HH__ 130