Jui-min Lee has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/46079 )

Change subject: base: Construct loggers on the heap
......................................................................

base: Construct loggers on the heap

Loggers was previously declared as global variables, hence are unsafe to
be used inside other global objects' destructor (e.g. scMainFiber). This
CL makes them heap allocated objects hold by function static variables.

As a result:
1. The loggers never get destructed at the end of program, which makes
   them safe to be used in global objects' destructor.
2. The loggers are constructed ondemand instead of relying on linker's
   unknown way of ordering, which makes them safe to be used in global
   objects' constructor.

Change-Id: Ieb499d2fa4c5c1c015324cb72b055115b0933ab8
---
M src/base/logging.cc
1 file changed, 29 insertions(+), 11 deletions(-)



diff --git a/src/base/logging.cc b/src/base/logging.cc
index 1290455..11efc83 100644
--- a/src/base/logging.cc
+++ b/src/base/logging.cc
@@ -70,16 +70,34 @@
     void exit() override { ::exit(1); }
 };

-ExitLogger panicLogger("panic: ");
-FatalLogger fatalLogger("fatal: ");
-Logger warnLogger("warn: ");
-Logger infoLogger("info: ");
-Logger hackLogger("hack: ");
-
 } // anonymous namespace

-Logger &Logger::getPanic() { return panicLogger; }
-Logger &Logger::getFatal() { return fatalLogger; }
-Logger &Logger::getWarn() { return warnLogger; }
-Logger &Logger::getInfo() { return infoLogger; }
-Logger &Logger::getHack() { return hackLogger; }
+Logger&
+Logger::getPanic() {
+    static ExitLogger* panicLogger = new ExitLogger("panic: ");
+    return *panicLogger;
+}
+
+Logger&
+Logger::getFatal() {
+    static FatalLogger* fatalLogger = new FatalLogger("fatal: ");
+    return *fatalLogger;
+}
+
+Logger&
+Logger::getWarn() {
+    static NormalLogger* warnLogger = new NormalLogger("warn: ");
+    return *warnLogger;
+}
+
+Logger&
+Logger::getInfo() {
+    static NormalLogger* infoLogger = new NormalLogger("info: ");
+    return *infoLogger;
+}
+
+Logger&
+Logger::getHack() {
+    static NormalLogger* hackLogger = new NormalLogger("hack: ");
+    return *hackLogger;
+}

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/46079
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ieb499d2fa4c5c1c015324cb72b055115b0933ab8
Gerrit-Change-Number: 46079
Gerrit-PatchSet: 1
Gerrit-Owner: Jui-min Lee <f...@google.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to