report.cc revision 13401:3bf529b4bc51
1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution; 11 * neither the name of the copyright holders nor the names of its 12 * contributors may be used to endorse or promote products derived from 13 * this software without specific prior written permission. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 * Authors: Gabe Black 28 */ 29 30#include "systemc/utils/report.hh" 31 32#include "systemc/core/python.hh" 33 34namespace sc_gem5 35{ 36 37const char *reportSeverityNames[] = { 38 [sc_core::SC_INFO] = "Info", 39 [sc_core::SC_WARNING] = "Warning", 40 [sc_core::SC_ERROR] = "Error", 41 [sc_core::SC_FATAL] = "Fatal" 42}; 43 44ReportSevInfo reportSevInfos[sc_core::SC_MAX_SEVERITY] = 45{ 46 [sc_core::SC_INFO] = ReportSevInfo(sc_core::SC_DEFAULT_INFO_ACTIONS), 47 [sc_core::SC_WARNING] = ReportSevInfo(sc_core::SC_DEFAULT_WARNING_ACTIONS), 48 [sc_core::SC_ERROR] = ReportSevInfo(sc_core::SC_DEFAULT_ERROR_ACTIONS), 49 [sc_core::SC_FATAL] = ReportSevInfo(sc_core::SC_DEFAULT_FATAL_ACTIONS) 50}; 51 52std::map<std::string, ReportMsgInfo> & 53reportMsgInfoMap() 54{ 55 static std::map<std::string, ReportMsgInfo> m; 56 return m; 57} 58 59std::map<int, std::string> & 60reportIdToMsgMap() 61{ 62 static std::map<int, std::string> m; 63 return m; 64} 65 66int reportVerbosityLevel = sc_core::SC_MEDIUM; 67 68sc_core::sc_actions reportSuppressedActions = sc_core::SC_UNSPECIFIED; 69sc_core::sc_actions reportForcedActions = sc_core::SC_UNSPECIFIED; 70sc_core::sc_actions reportCatchActions = sc_core::SC_DISPLAY; 71 72sc_core::sc_report_handler_proc reportHandlerProc = 73 &sc_core::sc_report_handler::default_handler; 74 75std::unique_ptr<sc_core::sc_report> globalReportCache; 76 77bool reportWarningsAsErrors = false; 78 79DefaultReportMessages *& 80DefaultReportMessages::top() 81{ 82 static DefaultReportMessages *top_ptr = nullptr; 83 return top_ptr; 84} 85 86void 87DefaultReportMessages::install() 88{ 89 for (auto &p: msgs) 90 sc_core::sc_report::register_id(p.first, p.second); 91} 92 93DefaultReportMessages::DefaultReportMessages( 94 std::initializer_list<std::pair<int, const char *>> msgs) : 95 next(top()), msgs(msgs) 96{ 97 top() = this; 98} 99 100void 101DefaultReportMessages::installAll() 102{ 103 for (DefaultReportMessages *ptr = top(); ptr; ptr = ptr->next) 104 ptr->install(); 105} 106 107namespace 108{ 109 110struct InstallDefaultReportMessages : public PythonReadyFunc 111{ 112 void run() override { DefaultReportMessages::installAll(); } 113} messageInstaller; 114 115} // anonymous namespace 116 117} // namespace sc_gem5 118