tests: log_call is not returning any value
[gem5.git] / src / base / debug.hh
index 20bf8e76dc1d02b1ba2c201f0749f000b1934af6..7c9834ce7ac5a50916f66e8fb03cf9bfdf130d3d 100644 (file)
@@ -25,8 +25,6 @@
  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Authors: Nathan Binkert
  */
 
 #ifndef __BASE_DEBUG_HH__
@@ -45,7 +43,6 @@ class Flag
   protected:
     const char *_name;
     const char *_desc;
-    std::vector<Flag *> _kids;
 
   public:
     Flag(const char *name, const char *desc);
@@ -53,53 +50,63 @@ class Flag
 
     std::string name() const { return _name; }
     std::string desc() const { return _desc; }
-    std::vector<Flag *> kids() { return _kids; }
+    virtual std::vector<Flag *> kids() { return std::vector<Flag*>(); }
 
     virtual void enable() = 0;
     virtual void disable() = 0;
+    virtual void sync() {}
 };
 
 class SimpleFlag : public Flag
 {
+    static bool _active; // whether debug tracings are enabled
   protected:
-    bool _status;
+    bool _tracing; // tracing is enabled and flag is on
+    bool _status;  // flag status
 
   public:
     SimpleFlag(const char *name, const char *desc)
         : Flag(name, desc), _status(false)
     { }
 
-    bool status() const { return _status; }
-    operator bool() const { return _status; }
-    bool operator!() const { return !_status; }
+    bool status() const { return _tracing; }
+    operator bool() const { return _tracing; }
+    bool operator!() const { return !_tracing; }
+
+    void enable()  { _status = true;  sync(); }
+    void disable() { _status = false; sync(); }
+
+    void sync() { _tracing = _active && _status; }
 
-    void enable() { _status = true; }
-    void disable() { _status = false; }
+    static void enableAll();
+    static void disableAll();
 };
 
-class CompoundFlag : public SimpleFlag
+class CompoundFlag : public Flag
 {
   protected:
+    std::vector<Flag *> _kids;
+
     void
-    addFlag(Flag &f)
+    addFlag(Flag *f)
     {
-        if (&f != NULL)
-            _kids.push_back(&f);
+        if (f != nullptr)
+            _kids.push_back(f);
     }
 
   public:
     CompoundFlag(const char *name, const char *desc,
-        Flag &f00 = *(Flag *)0, Flag &f01 = *(Flag *)0,
-        Flag &f02 = *(Flag *)0, Flag &f03 = *(Flag *)0,
-        Flag &f04 = *(Flag *)0, Flag &f05 = *(Flag *)0,
-        Flag &f06 = *(Flag *)0, Flag &f07 = *(Flag *)0,
-        Flag &f08 = *(Flag *)0, Flag &f09 = *(Flag *)0,
-        Flag &f10 = *(Flag *)0, Flag &f11 = *(Flag *)0,
-        Flag &f12 = *(Flag *)0, Flag &f13 = *(Flag *)0,
-        Flag &f14 = *(Flag *)0, Flag &f15 = *(Flag *)0,
-        Flag &f16 = *(Flag *)0, Flag &f17 = *(Flag *)0,
-        Flag &f18 = *(Flag *)0, Flag &f19 = *(Flag *)0)
-        : SimpleFlag(name, desc)
+        Flag *f00 = nullptr, Flag *f01 = nullptr,
+        Flag *f02 = nullptr, Flag *f03 = nullptr,
+        Flag *f04 = nullptr, Flag *f05 = nullptr,
+        Flag *f06 = nullptr, Flag *f07 = nullptr,
+        Flag *f08 = nullptr, Flag *f09 = nullptr,
+        Flag *f10 = nullptr, Flag *f11 = nullptr,
+        Flag *f12 = nullptr, Flag *f13 = nullptr,
+        Flag *f14 = nullptr, Flag *f15 = nullptr,
+        Flag *f16 = nullptr, Flag *f17 = nullptr,
+        Flag *f18 = nullptr, Flag *f19 = nullptr)
+        : Flag(name, desc)
     {
         addFlag(f00); addFlag(f01); addFlag(f02); addFlag(f03); addFlag(f04);
         addFlag(f05); addFlag(f06); addFlag(f07); addFlag(f08); addFlag(f09);
@@ -107,6 +114,8 @@ class CompoundFlag : public SimpleFlag
         addFlag(f15); addFlag(f16); addFlag(f17); addFlag(f18); addFlag(f19);
     }
 
+    std::vector<Flag *> kids() { return _kids; }
+
     void enable();
     void disable();
 };
@@ -128,4 +137,10 @@ void clearDebugFlag(const char *string);
 
 void dumpDebugFlags();
 
+#if TRACING_ON
+#   define DTRACE(x) (Debug::x)
+#else // !TRACING_ON
+#   define DTRACE(x) (false)
+#endif  // TRACING_ON
+
 #endif // __BASE_DEBUG_HH__