From: Gabe Black Date: Sat, 13 Jun 2020 04:28:12 +0000 (-0700) Subject: sim: Add some helpers to catch and reporting using unbound ports. X-Git-Tag: v20.1.0.0~587 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d3024accaf29b4a35bf7d1a0a0beeda05787100c;p=gem5.git sim: Add some helpers to catch and reporting using unbound ports. If a port is unbound, trying to call its peer will likely cause a segfault. Rather than check if a port is bound every time you go to use it, we can instead bind to a default peer which just throws an exception back to the caller. The caller can catch the exception and report the error. This change adds a common new class to throw as the exception, and also a small utility function which reports the error and dies. Change-Id: Ia58a2030922c73e2fd7d139822bce38d9b0f2171 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30295 Reviewed-by: Nikos Nikoleris Maintainer: Gabe Black Tested-by: kokoro --- diff --git a/src/sim/port.cc b/src/sim/port.cc index 7ca8db67b..9131f84b6 100644 --- a/src/sim/port.cc +++ b/src/sim/port.cc @@ -45,7 +45,16 @@ #include "sim/port.hh" +#include "base/logging.hh" + Port::Port(const std::string& _name, PortID _id) : portName(_name), id(_id), _peer(nullptr), _connected(false) {} Port::~Port() {} + + +void +Port::reportUnbound() const +{ + fatal("%s: Unconnected port!", name()); +} diff --git a/src/sim/port.hh b/src/sim/port.hh index 251624c5b..85472d09b 100644 --- a/src/sim/port.hh +++ b/src/sim/port.hh @@ -63,6 +63,10 @@ class Port protected: + class UnboundPortException {}; + + [[noreturn]] void reportUnbound() const; + /** * A numeric identifier to distinguish ports in a vector, and set * to InvalidPortID in case this port is not part of a vector.