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