systemc: Improve handling of empty process handles.
authorGabe Black <gabeblack@google.com>
Wed, 29 Aug 2018 06:14:40 +0000 (23:14 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 3 Oct 2018 00:13:59 +0000 (00:13 +0000)
Most had checks, but didn't print any message. throw_it needed a check
as well.

Change-Id: I916c837112f9b27852583f01b3e16a6f53d5e7ca
Reviewed-on: https://gem5-review.googlesource.com/c/12440
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/sc_process_handle.cc
src/systemc/ext/core/sc_process_handle.hh
src/systemc/ext/utils/sc_report.hh

index 8c756afa246fe6ba1663aab38a37cb330b716bf7..c7701a684cfa1d41b200eac52edf8986f571a1dc 100644 (file)
@@ -32,6 +32,7 @@
 #include "systemc/core/scheduler.hh"
 #include "systemc/ext/core/sc_main.hh"
 #include "systemc/ext/core/sc_process_handle.hh"
+#include "systemc/ext/utils/sc_report_handler.hh"
 
 namespace sc_core
 {
@@ -196,56 +197,79 @@ sc_process_handle::terminated() const
 const sc_event &
 sc_process_handle::terminated_event() const
 {
-    static sc_event non_event;
-    return _gem5_process ? _gem5_process->terminatedEvent() : non_event;
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "terminated_event()");
+        static sc_event non_event;
+        return non_event;
+    }
+    return _gem5_process->terminatedEvent();
 }
 
 
 void
 sc_process_handle::suspend(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "suspend()");
         return;
+    }
     _gem5_process->suspend(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
 void
 sc_process_handle::resume(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "resume()");
         return;
+    }
     _gem5_process->resume(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
 void
 sc_process_handle::disable(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "disable()");
         return;
+    }
     _gem5_process->disable(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
 void
 sc_process_handle::enable(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "enable()");
         return;
+    }
     _gem5_process->enable(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
 void
 sc_process_handle::kill(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "kill()");
         return;
+    }
     _gem5_process->kill(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
 void
 sc_process_handle::reset(sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "reset()");
         return;
+    }
     _gem5_process->reset(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
@@ -253,19 +277,23 @@ bool
 sc_process_handle::is_unwinding()
 {
     if (!_gem5_process) {
-        //TODO This should generate a systemc style warning if the handle is
-        //invalid.
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "is_unwinding()");
         return false;
-    } else {
-        return _gem5_process->isUnwinding();
     }
+    return _gem5_process->isUnwinding();
 }
 
 const sc_event &
 sc_process_handle::reset_event() const
 {
-    static sc_event non_event;
-    return _gem5_process ? _gem5_process->resetEvent() : non_event;
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "reset()");
+        static sc_event non_event;
+        return non_event;
+    }
+    return _gem5_process->resetEvent();
 }
 
 
@@ -273,8 +301,11 @@ void
 sc_process_handle::sync_reset_on(
         sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "sync_reset_on()");
         return;
+    }
     _gem5_process->syncResetOn(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
@@ -282,8 +313,11 @@ void
 sc_process_handle::sync_reset_off(
         sc_descendent_inclusion_info include_descendants)
 {
-    if (!_gem5_process)
+    if (!_gem5_process) {
+        SC_REPORT_WARNING("(W570) attempt to use an empty "
+                "process handle ignored", "sync_reset_off()");
         return;
+    }
     _gem5_process->syncResetOff(include_descendants == SC_INCLUDE_DESCENDANTS);
 }
 
index 04df4728f9e44834251fe131825f1ba23f5e7378..b9bb9a0c4cdc75196d119ac7a9de0f051a25a48a 100644 (file)
@@ -33,7 +33,8 @@
 #include <exception>
 #include <vector>
 
-#include "systemc/ext/core/sc_object.hh"
+#include "../utils/sc_report_handler.hh"
+#include "sc_object.hh"
 
 namespace sc_gem5
 {
@@ -212,6 +213,11 @@ class sc_process_handle
              sc_descendent_inclusion_info include_descendants=
              SC_NO_DESCENDANTS)
     {
+        if (!_gem5_process) {
+            SC_REPORT_WARNING("(W570) attempt to use an empty "
+                    "process handle ignored", "throw_it()");
+            return;
+        }
         ::sc_gem5::ExceptionWrapper<T> exc(user_defined_exception);
         ::sc_gem5::throw_it_wrapper(_gem5_process, exc,
                 include_descendants == SC_INCLUDE_DESCENDANTS);
index 6f652ce2cb7d528270384eb5524f57ede8544224..19029ec55c4fa891434bd9eb48cff5195bffbdf9 100644 (file)
@@ -33,7 +33,7 @@
 #include <exception>
 #include <string>
 
-#include "systemc/ext/core/sc_time.hh"
+#include "../core/sc_time.hh"
 
 namespace sc_core
 {