From d3024accaf29b4a35bf7d1a0a0beeda05787100c Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 12 Jun 2020 21:28:12 -0700 Subject: [PATCH] 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 --- src/sim/port.cc | 9 +++++++++ src/sim/port.hh | 4 ++++ 2 files changed, 13 insertions(+) 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. -- 2.30.2