systemc: Add a range check to the intial value of sc_semaphore.

Change-Id: I4e1ef90b14074e5a2794a4386e411397213b2789
Reviewed-on: https://gem5-review.googlesource.com/c/13304
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
diff --git a/src/systemc/channel/sc_semaphore.cc b/src/systemc/channel/sc_semaphore.cc
index ba52c19..59191be 100644
--- a/src/systemc/channel/sc_semaphore.cc
+++ b/src/systemc/channel/sc_semaphore.cc
@@ -27,21 +27,29 @@
  * Authors: Gabe Black
  */
 
+#include <string>
+
 #include "base/logging.hh"
 #include "systemc/ext/channel/sc_semaphore.hh"
 #include "systemc/ext/core/sc_module.hh" // for sc_gen_unique_name
+#include "systemc/ext/utils/sc_report_handler.hh"
 
 namespace sc_core
 {
 
 sc_semaphore::sc_semaphore(int value) :
-        sc_interface(), sc_semaphore_if(),
-        sc_object(sc_gen_unique_name("semaphore")), _value(value)
+    sc_semaphore(sc_gen_unique_name("semaphore"), value)
 {}
 
-sc_semaphore::sc_semaphore(const char *name, int value) :
-        sc_interface(), sc_semaphore_if(), sc_object(name), _value(value)
-{}
+sc_semaphore::sc_semaphore(const char *_name, int value) :
+        sc_interface(), sc_semaphore_if(), sc_object(_name), _value(value)
+{
+    if (value < 0) {
+        std::string msg = "semaphore '" + std::string(name()) + "'";
+        SC_REPORT_ERROR("(E119) sc_semaphore requires an initial value >= 0",
+                msg.c_str());
+    }
+}
 
 int
 sc_semaphore::wait()