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 <nikos.nikoleris@arm.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user