summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-15 16:20:27 -0700
committerGabe Black <gabeblack@google.com>2018-10-16 00:23:20 +0000
commit509b1b8439050231f50ae12397b59aa06df5fba9 (patch)
treef06efc693700752567868762f12c5757932c009b
parent170b9f90c2d2b40114da8b95fd0a2562013353cf (diff)
downloadgem5-509b1b8439050231f50ae12397b59aa06df5fba9.tar.xz
systemc: Add an error check whether an interface is alread bound to a port.
Change-Id: I06e3484176c0c06daa28f7be0ed8437b3b15ddb2 Reviewed-on: https://gem5-review.googlesource.com/c/12816 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
-rw-r--r--src/systemc/core/port.hh14
-rw-r--r--src/systemc/tests/systemc/communication/ports/test05/expected_returncode1
2 files changed, 13 insertions, 2 deletions
diff --git a/src/systemc/core/port.hh b/src/systemc/core/port.hh
index 15e7bbed1..217269d86 100644
--- a/src/systemc/core/port.hh
+++ b/src/systemc/core/port.hh
@@ -33,6 +33,7 @@
#include <list>
#include <vector>
+#include "base/cprintf.hh"
#include "systemc/ext/core/sc_interface.hh"
#include "systemc/ext/core/sc_port.hh"
@@ -59,10 +60,19 @@ class Port
void finalizeFinder(StaticSensitivityFinder *finder);
void
- addInterface(::sc_core::sc_interface *i)
+ addInterface(::sc_core::sc_interface *iface)
{
+ for (int i = 0; i < _size; i++) {
+ if (getInterface(i) == iface) {
+ std::string msg =
+ csprintf("interface already bound to port: port '%s' (%s)",
+ portBase->name(), portBase->kind());
+ SC_REPORT_ERROR("(E107) bind interface to port failed",
+ msg.c_str());
+ }
+ }
_size++;
- portBase->_gem5AddInterface(i);
+ portBase->_gem5AddInterface(iface);
}
void
diff --git a/src/systemc/tests/systemc/communication/ports/test05/expected_returncode b/src/systemc/tests/systemc/communication/ports/test05/expected_returncode
new file mode 100644
index 000000000..d00491fd7
--- /dev/null
+++ b/src/systemc/tests/systemc/communication/ports/test05/expected_returncode
@@ -0,0 +1 @@
+1