From 509b1b8439050231f50ae12397b59aa06df5fba9 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sat, 15 Sep 2018 16:20:27 -0700 Subject: [PATCH] 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 Maintainer: Gabe Black --- src/systemc/core/port.hh | 14 ++++++++++++-- .../communication/ports/test05/expected_returncode | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/systemc/tests/systemc/communication/ports/test05/expected_returncode 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 #include +#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 -- 2.30.2