sc_report_handler.cc revision 13401
113772Sjavier.bueno@metempsy.com/* 213772Sjavier.bueno@metempsy.com * Copyright 2018 Google, Inc. 313772Sjavier.bueno@metempsy.com * 413772Sjavier.bueno@metempsy.com * Redistribution and use in source and binary forms, with or without 513772Sjavier.bueno@metempsy.com * modification, are permitted provided that the following conditions are 613772Sjavier.bueno@metempsy.com * met: redistributions of source code must retain the above copyright 713772Sjavier.bueno@metempsy.com * notice, this list of conditions and the following disclaimer; 813772Sjavier.bueno@metempsy.com * redistributions in binary form must reproduce the above copyright 913772Sjavier.bueno@metempsy.com * notice, this list of conditions and the following disclaimer in the 1013772Sjavier.bueno@metempsy.com * documentation and/or other materials provided with the distribution; 1113772Sjavier.bueno@metempsy.com * neither the name of the copyright holders nor the names of its 1213772Sjavier.bueno@metempsy.com * contributors may be used to endorse or promote products derived from 1313772Sjavier.bueno@metempsy.com * this software without specific prior written permission. 1413772Sjavier.bueno@metempsy.com * 1513772Sjavier.bueno@metempsy.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1613772Sjavier.bueno@metempsy.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1713772Sjavier.bueno@metempsy.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1813772Sjavier.bueno@metempsy.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1913772Sjavier.bueno@metempsy.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2013772Sjavier.bueno@metempsy.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2113772Sjavier.bueno@metempsy.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2213772Sjavier.bueno@metempsy.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2313772Sjavier.bueno@metempsy.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2413772Sjavier.bueno@metempsy.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2513772Sjavier.bueno@metempsy.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2613772Sjavier.bueno@metempsy.com * 2713772Sjavier.bueno@metempsy.com * Authors: Gabe Black 2813772Sjavier.bueno@metempsy.com */ 2913772Sjavier.bueno@metempsy.com 3013772Sjavier.bueno@metempsy.com#include <fstream> 3113772Sjavier.bueno@metempsy.com#include <map> 3213772Sjavier.bueno@metempsy.com#include <sstream> 3313772Sjavier.bueno@metempsy.com#include <string> 3413772Sjavier.bueno@metempsy.com 3513772Sjavier.bueno@metempsy.com#include "base/cprintf.hh" 3613772Sjavier.bueno@metempsy.com#include "systemc/core/process.hh" 3713772Sjavier.bueno@metempsy.com#include "systemc/core/scheduler.hh" 3813772Sjavier.bueno@metempsy.com#include "systemc/ext/core/sc_main.hh" 3913772Sjavier.bueno@metempsy.com#include "systemc/ext/utils/messages.hh" 4013772Sjavier.bueno@metempsy.com#include "systemc/ext/utils/sc_report_handler.hh" 4113772Sjavier.bueno@metempsy.com#include "systemc/utils/report.hh" 4213772Sjavier.bueno@metempsy.com 4313772Sjavier.bueno@metempsy.comnamespace sc_core 4413963Sodanrc@yahoo.com.br{ 4513963Sodanrc@yahoo.com.br 4613772Sjavier.bueno@metempsy.comnamespace 4713772Sjavier.bueno@metempsy.com{ 4813772Sjavier.bueno@metempsy.com 4913772Sjavier.bueno@metempsy.comstd::unique_ptr<std::string> logFileName; 5013772Sjavier.bueno@metempsy.comstd::unique_ptr<std::ofstream> logFile; 5113772Sjavier.bueno@metempsy.com 5213772Sjavier.bueno@metempsy.com} // anonymous namespace 5313772Sjavier.bueno@metempsy.com 5413772Sjavier.bueno@metempsy.comvoid 5513772Sjavier.bueno@metempsy.comsc_report_handler::report(sc_severity severity, const char *msg_type, 5613775SAndrea.Mondelli@ucf.edu const char *msg, const char *file, int line) 5713775SAndrea.Mondelli@ucf.edu{ 5813772Sjavier.bueno@metempsy.com report(severity, msg_type, msg, SC_MEDIUM, file, line); 5913772Sjavier.bueno@metempsy.com} 6013772Sjavier.bueno@metempsy.com 6113772Sjavier.bueno@metempsy.comvoid 6213772Sjavier.bueno@metempsy.comsc_report_handler::report(sc_severity severity, const char *msg_type, 6313772Sjavier.bueno@metempsy.com const char *msg, int verbosity, const char *file, 6413772Sjavier.bueno@metempsy.com int line) 6513772Sjavier.bueno@metempsy.com{ 6613772Sjavier.bueno@metempsy.com if (!msg_type) 6713772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 6813772Sjavier.bueno@metempsy.com 6913772Sjavier.bueno@metempsy.com if (severity == SC_INFO && verbosity > sc_gem5::reportVerbosityLevel) 7013772Sjavier.bueno@metempsy.com return; 7113772Sjavier.bueno@metempsy.com 7213772Sjavier.bueno@metempsy.com sc_gem5::ReportSevInfo &sevInfo = sc_gem5::reportSevInfos[severity]; 7313772Sjavier.bueno@metempsy.com sc_gem5::ReportMsgInfo &msgInfo = sc_gem5::reportMsgInfoMap()[msg_type]; 7413772Sjavier.bueno@metempsy.com 7513772Sjavier.bueno@metempsy.com sevInfo.count++; 7613772Sjavier.bueno@metempsy.com msgInfo.count++; 7713772Sjavier.bueno@metempsy.com msgInfo.sevCounts[severity]++; 7813772Sjavier.bueno@metempsy.com 7913772Sjavier.bueno@metempsy.com sc_actions actions = SC_UNSPECIFIED; 8013772Sjavier.bueno@metempsy.com if (msgInfo.sevActions[severity] != SC_UNSPECIFIED) 8113772Sjavier.bueno@metempsy.com actions = msgInfo.sevActions[severity]; 8213772Sjavier.bueno@metempsy.com else if (msgInfo.actions != SC_UNSPECIFIED) 8313772Sjavier.bueno@metempsy.com actions = msgInfo.actions; 8413772Sjavier.bueno@metempsy.com else if (sevInfo.actions != SC_UNSPECIFIED) 8513772Sjavier.bueno@metempsy.com actions = sevInfo.actions; 8613772Sjavier.bueno@metempsy.com 8713772Sjavier.bueno@metempsy.com actions &= ~sc_gem5::reportSuppressedActions; 8813772Sjavier.bueno@metempsy.com actions |= sc_gem5::reportForcedActions; 8913772Sjavier.bueno@metempsy.com 9013772Sjavier.bueno@metempsy.com msgInfo.checkLimits(severity, actions); 9113772Sjavier.bueno@metempsy.com sevInfo.checkLimit(actions); 9213772Sjavier.bueno@metempsy.com 9313772Sjavier.bueno@metempsy.com ::sc_gem5::Process *current = ::sc_gem5::scheduler.current(); 9413772Sjavier.bueno@metempsy.com sc_report report(severity, msg_type, msg, verbosity, file, line, 9513772Sjavier.bueno@metempsy.com sc_time::from_value(::sc_gem5::scheduler.getCurTick()), 9613772Sjavier.bueno@metempsy.com current ? current->name() : nullptr, msgInfo.id); 9713772Sjavier.bueno@metempsy.com 9813772Sjavier.bueno@metempsy.com if (actions & SC_CACHE_REPORT) { 9913772Sjavier.bueno@metempsy.com if (current) { 10013772Sjavier.bueno@metempsy.com current->lastReport(&report); 10113772Sjavier.bueno@metempsy.com } else { 10213772Sjavier.bueno@metempsy.com sc_gem5::globalReportCache = 10313772Sjavier.bueno@metempsy.com std::unique_ptr<sc_report>(new sc_report(report)); 10413772Sjavier.bueno@metempsy.com } 10513772Sjavier.bueno@metempsy.com } 10613772Sjavier.bueno@metempsy.com 10713772Sjavier.bueno@metempsy.com sc_gem5::reportHandlerProc(report, actions); 10813772Sjavier.bueno@metempsy.com} 10913772Sjavier.bueno@metempsy.com 11013772Sjavier.bueno@metempsy.comvoid 11113827Sjavier.bueno@metempsy.comsc_report_handler::report(sc_severity severity, int id, const char *msg, 11213772Sjavier.bueno@metempsy.com const char *file, int line) 11313772Sjavier.bueno@metempsy.com{ 11413772Sjavier.bueno@metempsy.com std::string &msg_type = sc_gem5::reportIdToMsgMap()[id]; 11513772Sjavier.bueno@metempsy.com 11613772Sjavier.bueno@metempsy.com if (sc_gem5::reportWarningsAsErrors && severity == SC_WARNING) 11713772Sjavier.bueno@metempsy.com severity = SC_ERROR; 11813772Sjavier.bueno@metempsy.com 11913772Sjavier.bueno@metempsy.com report(severity, msg_type.c_str(), msg, file, line); 12013772Sjavier.bueno@metempsy.com} 12113772Sjavier.bueno@metempsy.com 12213772Sjavier.bueno@metempsy.comsc_actions 12313772Sjavier.bueno@metempsy.comsc_report_handler::set_actions(sc_severity severity, sc_actions actions) 12413772Sjavier.bueno@metempsy.com{ 12513772Sjavier.bueno@metempsy.com sc_gem5::ReportSevInfo &info = sc_gem5::reportSevInfos[severity]; 12613827Sjavier.bueno@metempsy.com sc_actions previous = info.actions; 12713827Sjavier.bueno@metempsy.com info.actions = actions; 12813772Sjavier.bueno@metempsy.com return previous; 12913827Sjavier.bueno@metempsy.com} 13013772Sjavier.bueno@metempsy.com 13113772Sjavier.bueno@metempsy.comsc_actions 13213772Sjavier.bueno@metempsy.comsc_report_handler::set_actions(const char *msg_type, sc_actions actions) 13313772Sjavier.bueno@metempsy.com{ 13413827Sjavier.bueno@metempsy.com if (!msg_type) 13513772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 13613772Sjavier.bueno@metempsy.com 13713772Sjavier.bueno@metempsy.com sc_gem5::ReportMsgInfo &info = sc_gem5::reportMsgInfoMap()[msg_type]; 13813963Sodanrc@yahoo.com.br sc_actions previous = info.actions; 13913772Sjavier.bueno@metempsy.com info.actions = actions; 14013772Sjavier.bueno@metempsy.com return previous; 14113772Sjavier.bueno@metempsy.com} 14213772Sjavier.bueno@metempsy.com 14313772Sjavier.bueno@metempsy.comsc_actions 14413772Sjavier.bueno@metempsy.comsc_report_handler::set_actions( 14513772Sjavier.bueno@metempsy.com const char *msg_type, sc_severity severity, sc_actions actions) 14613772Sjavier.bueno@metempsy.com{ 14713963Sodanrc@yahoo.com.br if (!msg_type) 14813963Sodanrc@yahoo.com.br msg_type = SC_ID_UNKNOWN_ERROR_; 14913772Sjavier.bueno@metempsy.com 15013772Sjavier.bueno@metempsy.com sc_gem5::ReportMsgInfo &info = sc_gem5::reportMsgInfoMap()[msg_type]; 15113772Sjavier.bueno@metempsy.com sc_actions previous = info.sevActions[severity]; 15213772Sjavier.bueno@metempsy.com info.sevActions[severity] = actions; 15313772Sjavier.bueno@metempsy.com return previous; 15413772Sjavier.bueno@metempsy.com} 15513772Sjavier.bueno@metempsy.com 15613772Sjavier.bueno@metempsy.comint 15713772Sjavier.bueno@metempsy.comsc_report_handler::stop_after(sc_severity severity, int limit) 15813772Sjavier.bueno@metempsy.com{ 15913772Sjavier.bueno@metempsy.com sc_gem5::ReportSevInfo &info = sc_gem5::reportSevInfos[severity]; 16013772Sjavier.bueno@metempsy.com int previous = info.limit; 16113772Sjavier.bueno@metempsy.com info.limit = limit; 16213772Sjavier.bueno@metempsy.com return previous; 16313772Sjavier.bueno@metempsy.com} 16413772Sjavier.bueno@metempsy.com 16513772Sjavier.bueno@metempsy.comint 16613772Sjavier.bueno@metempsy.comsc_report_handler::stop_after(const char *msg_type, int limit) 16713772Sjavier.bueno@metempsy.com{ 16813772Sjavier.bueno@metempsy.com if (!msg_type) 16913772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 17013772Sjavier.bueno@metempsy.com 17113772Sjavier.bueno@metempsy.com sc_gem5::ReportMsgInfo &info = sc_gem5::reportMsgInfoMap()[msg_type]; 17213772Sjavier.bueno@metempsy.com int previous = info.limit; 17313772Sjavier.bueno@metempsy.com info.limit = limit; 17413772Sjavier.bueno@metempsy.com return previous; 17513772Sjavier.bueno@metempsy.com} 17613772Sjavier.bueno@metempsy.com 17713772Sjavier.bueno@metempsy.comint 17813772Sjavier.bueno@metempsy.comsc_report_handler::stop_after( 17913772Sjavier.bueno@metempsy.com const char *msg_type, sc_severity severity, int limit) 18013772Sjavier.bueno@metempsy.com{ 18113772Sjavier.bueno@metempsy.com if (!msg_type) 18213772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 18313772Sjavier.bueno@metempsy.com 18413772Sjavier.bueno@metempsy.com sc_gem5::ReportMsgInfo &info = sc_gem5::reportMsgInfoMap()[msg_type]; 18513772Sjavier.bueno@metempsy.com int previous = info.sevLimits[severity]; 18613772Sjavier.bueno@metempsy.com info.sevLimits[severity] = limit; 18713772Sjavier.bueno@metempsy.com return previous; 18813772Sjavier.bueno@metempsy.com} 18913772Sjavier.bueno@metempsy.com 19013772Sjavier.bueno@metempsy.comint 19113772Sjavier.bueno@metempsy.comsc_report_handler::get_count(sc_severity severity) 19213772Sjavier.bueno@metempsy.com{ 19313772Sjavier.bueno@metempsy.com return sc_gem5::reportSevInfos[severity].count; 19413772Sjavier.bueno@metempsy.com} 19513772Sjavier.bueno@metempsy.com 19613772Sjavier.bueno@metempsy.comint 19713772Sjavier.bueno@metempsy.comsc_report_handler::get_count(const char *msg_type) 19813772Sjavier.bueno@metempsy.com{ 19913772Sjavier.bueno@metempsy.com if (!msg_type) 20013772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 20113772Sjavier.bueno@metempsy.com 20213772Sjavier.bueno@metempsy.com return sc_gem5::reportMsgInfoMap()[msg_type].count; 20313772Sjavier.bueno@metempsy.com} 20413772Sjavier.bueno@metempsy.com 20513772Sjavier.bueno@metempsy.comint 20613772Sjavier.bueno@metempsy.comsc_report_handler::get_count(const char *msg_type, sc_severity severity) 20713772Sjavier.bueno@metempsy.com{ 20813772Sjavier.bueno@metempsy.com if (!msg_type) 20913772Sjavier.bueno@metempsy.com msg_type = SC_ID_UNKNOWN_ERROR_; 21013772Sjavier.bueno@metempsy.com 21113772Sjavier.bueno@metempsy.com return sc_gem5::reportMsgInfoMap()[msg_type].sevCounts[severity]; 21213772Sjavier.bueno@metempsy.com} 21313772Sjavier.bueno@metempsy.com 21413772Sjavier.bueno@metempsy.comint 21513772Sjavier.bueno@metempsy.comsc_report_handler::set_verbosity_level(int vl) 21613772Sjavier.bueno@metempsy.com{ 21713772Sjavier.bueno@metempsy.com int previous = sc_gem5::reportVerbosityLevel; 21813772Sjavier.bueno@metempsy.com sc_gem5::reportVerbosityLevel = vl; 21913772Sjavier.bueno@metempsy.com return previous; 22013772Sjavier.bueno@metempsy.com} 22113772Sjavier.bueno@metempsy.com 22213772Sjavier.bueno@metempsy.comint 22313772Sjavier.bueno@metempsy.comsc_report_handler::get_verbosity_level() 22413772Sjavier.bueno@metempsy.com{ 22513772Sjavier.bueno@metempsy.com return sc_gem5::reportVerbosityLevel; 22613772Sjavier.bueno@metempsy.com} 22713772Sjavier.bueno@metempsy.com 22813772Sjavier.bueno@metempsy.com 22913772Sjavier.bueno@metempsy.comsc_actions 23013772Sjavier.bueno@metempsy.comsc_report_handler::suppress(sc_actions actions) 23113772Sjavier.bueno@metempsy.com{ 23213772Sjavier.bueno@metempsy.com sc_actions previous = sc_gem5::reportSuppressedActions; 23313772Sjavier.bueno@metempsy.com sc_gem5::reportSuppressedActions = actions; 23413772Sjavier.bueno@metempsy.com return previous; 23513772Sjavier.bueno@metempsy.com} 23613772Sjavier.bueno@metempsy.com 23713772Sjavier.bueno@metempsy.comsc_actions 23813963Sodanrc@yahoo.com.brsc_report_handler::suppress() 23913772Sjavier.bueno@metempsy.com{ 24013772Sjavier.bueno@metempsy.com return suppress(SC_UNSPECIFIED); 24113772Sjavier.bueno@metempsy.com} 24213772Sjavier.bueno@metempsy.com 24313772Sjavier.bueno@metempsy.comsc_actions 24413772Sjavier.bueno@metempsy.comsc_report_handler::force(sc_actions actions) 24513772Sjavier.bueno@metempsy.com{ 24613772Sjavier.bueno@metempsy.com sc_actions previous = sc_gem5::reportForcedActions; 24713772Sjavier.bueno@metempsy.com sc_gem5::reportForcedActions = actions; 24813772Sjavier.bueno@metempsy.com return previous; 24913772Sjavier.bueno@metempsy.com} 25013772Sjavier.bueno@metempsy.com 25113772Sjavier.bueno@metempsy.comsc_actions 25213772Sjavier.bueno@metempsy.comsc_report_handler::force() 25313772Sjavier.bueno@metempsy.com{ 25413772Sjavier.bueno@metempsy.com return force(SC_UNSPECIFIED); 25513772Sjavier.bueno@metempsy.com} 25613772Sjavier.bueno@metempsy.com 25713963Sodanrc@yahoo.com.br 25813963Sodanrc@yahoo.com.brsc_actions 25913772Sjavier.bueno@metempsy.comsc_report_handler::set_catch_actions(sc_actions actions) 26013772Sjavier.bueno@metempsy.com{ 26113772Sjavier.bueno@metempsy.com sc_actions previous = sc_gem5::reportCatchActions; 26213772Sjavier.bueno@metempsy.com sc_gem5::reportCatchActions = actions; 26313772Sjavier.bueno@metempsy.com return previous; 26413772Sjavier.bueno@metempsy.com} 26513772Sjavier.bueno@metempsy.com 26613772Sjavier.bueno@metempsy.comsc_actions 26713772Sjavier.bueno@metempsy.comsc_report_handler::get_catch_actions() 26813772Sjavier.bueno@metempsy.com{ 269 return sc_gem5::reportCatchActions; 270} 271 272 273void 274sc_report_handler::set_handler(sc_report_handler_proc proc) 275{ 276 sc_gem5::reportHandlerProc = proc; 277} 278 279void 280sc_report_handler::default_handler( 281 const sc_report &report, const sc_actions &actions) 282{ 283 if (actions & SC_DISPLAY) 284 cprintf("\n%s\n", sc_report_compose_message(report)); 285 286 if ((actions & SC_LOG) && logFile) { 287 ccprintf(*logFile, "%s: %s\n", report.get_time().to_string(), 288 sc_report_compose_message(report)); 289 } 290 if (actions & SC_STOP) { 291 sc_stop_here(report.get_msg_type(), report.get_severity()); 292 sc_stop(); 293 } 294 if (actions & SC_INTERRUPT) 295 sc_interrupt_here(report.get_msg_type(), report.get_severity()); 296 if (actions & SC_ABORT) 297 sc_abort(); 298 if (actions & SC_THROW) { 299 ::sc_gem5::Process *current = ::sc_gem5::scheduler.current(); 300 if (current) 301 current->isUnwinding(false); 302 throw report; 303 } 304} 305 306sc_actions 307sc_report_handler::get_new_action_id() 308{ 309 static sc_actions maxAction = SC_ABORT; 310 maxAction = maxAction << 1; 311 return maxAction; 312} 313 314sc_report * 315sc_report_handler::get_cached_report() 316{ 317 ::sc_gem5::Process *current = ::sc_gem5::scheduler.current(); 318 if (current) 319 return current->lastReport(); 320 return ::sc_gem5::globalReportCache.get(); 321} 322 323void 324sc_report_handler::clear_cached_report() 325{ 326 ::sc_gem5::Process *current = ::sc_gem5::scheduler.current(); 327 if (current) { 328 current->lastReport(nullptr); 329 } else { 330 ::sc_gem5::globalReportCache = nullptr; 331 } 332} 333 334bool 335sc_report_handler::set_log_file_name(const char *new_name) 336{ 337 if (!new_name) { 338 logFile = nullptr; 339 logFileName = nullptr; 340 return false; 341 } else { 342 if (logFileName) 343 return false; 344 logFileName = std::unique_ptr<std::string>(new std::string(new_name)); 345 logFile = std::unique_ptr<std::ofstream>(new std::ofstream(new_name)); 346 return true; 347 } 348} 349 350const char * 351sc_report_handler::get_log_file_name() 352{ 353 if (!logFileName) 354 return nullptr; 355 else 356 return logFileName->c_str(); 357} 358 359void 360sc_interrupt_here(const char *msg_type, sc_severity) 361{ 362 // Purposefully empty, for setting breakpoints supposedly. 363} 364 365void 366sc_stop_here(const char *msg_type, sc_severity) 367{ 368 // Purposefully empty, for setting breakpoints supposedly. 369} 370 371const std::string 372sc_report_compose_message(const sc_report &report) 373{ 374 std::ostringstream str; 375 376 const char *sevName = sc_gem5::reportSeverityNames[report.get_severity()]; 377 int id = report.get_id(); 378 379 str << sevName << ": "; 380 if (id >= 0) { 381 ccprintf(str, "(%c%d) ", sevName[0], id); 382 } 383 str << report.get_msg_type(); 384 385 const char *msg = report.get_msg(); 386 if (msg && msg[0]) 387 str << ": " << msg; 388 389 if (report.get_severity() > SC_INFO) { 390 ccprintf(str, "\nIn file: %s:%d", report.get_file_name(), 391 report.get_line_number()); 392 393 ::sc_gem5::Process *current = ::sc_gem5::scheduler.current(); 394 const char *name = report.get_process_name(); 395 if (current && sc_is_running() && name) { 396 ccprintf(str, "\nIn process: %s @ %s", name, 397 report.get_time().to_string()); 398 } 399 } 400 401 return str.str(); 402} 403 404bool 405sc_report_close_default_log() 406{ 407 if (logFile) { 408 logFile = nullptr; 409 logFileName = nullptr; 410 return false; 411 } 412 return true; 413} 414 415} // namespace sc_core 416