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

Change subject: base: Make debug flags reference
......................................................................

base: Make debug flags reference

Debug flags were directly declared as global objects; however, the
destruction order of global objects in different translation unit is not
defined in c++, so destructor of other objects cannot safely utilize
debug flags to output extra information.

We now define those flags as reference to objects allocated on heap so
our flags will never really get destructed. Note that this won't really
introduce any memory leak, as the program is getting terminated anyway.

Change-Id: I21f84ae17ac20653636ca67d1111c0c7855c0149
---
M src/SConscript
1 file changed, 15 insertions(+), 7 deletions(-)



diff --git a/src/SConscript b/src/SConscript
index 7a6f9c1..947791c 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -1178,17 +1178,25 @@
         assert n == name

         if not compound:
+            code('SimpleFlag& $name = *(')
+            code.indent()
             if fmt:
-                code('SimpleFlag $name("$name", "$desc", true);')
+                code('new SimpleFlag("$name", "$desc", true)')
             else:
-                code('SimpleFlag $name("$name", "$desc", false);')
+                code('new SimpleFlag("$name", "$desc", false)')
+            code.dedent()
+            code(');')
         else:
-            comp_code('CompoundFlag $name("$name", "$desc", {')
+            comp_code('CompoundFlag& $name = *(')
+            comp_code.indent()
+            comp_code('new CompoundFlag("$name", "$desc", {')
             comp_code.indent()
             for flag in compound:
                 comp_code('&$flag,')
             comp_code.dedent()
-            comp_code('});')
+            comp_code('})')
+            comp_code.dedent()
+            comp_code(');')

     code.append(comp_code)
     code()
@@ -1221,11 +1229,11 @@
     code('class SimpleFlag;')

     if compound:
-        code('extern CompoundFlag $name;')
+        code('extern CompoundFlag& $name;')
         for flag in compound:
-            code('extern SimpleFlag $flag;')
+            code('extern SimpleFlag& $flag;')
     else:
-        code('extern SimpleFlag $name;')
+        code('extern SimpleFlag& $name;')

     code('''
 }

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45582
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: I21f84ae17ac20653636ca67d1111c0c7855c0149
Gerrit-Change-Number: 45582
Gerrit-PatchSet: 1
Gerrit-Owner: Jui-min Lee <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to