Fixes the address space recognition which was broken by accident,

and cleans up the nomenclature to avoid future mistakes.


git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1737 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
unzner
2012-10-11 14:27:41 +00:00
parent af5d7d8033
commit 765a2326e3
4 changed files with 20 additions and 22 deletions

View File

@ -33,15 +33,16 @@ public:
class BPEvent : public BaseEvent {
protected:
address_t m_TriggerInstrPtr; //!< the address which triggered the event
address_t m_CR3; //!< the content of the cr3 reg
address_t m_AddressSpace; //!< the address space identifier
public:
/**
* Creates a new breakpoint event. The range information is specific to
* the subclasses.
* @param trigger the triggering address of the breakpoint event
* @param cr3 the address space of this event, given as the content of a CR3 register.
* @param address_space the address space identifier for this event
*/
BPEvent(address_t trigger, address_t cr3) : m_TriggerInstrPtr(trigger), m_CR3(cr3) { }
BPEvent(address_t trigger, address_t address_space)
: m_TriggerInstrPtr(trigger), m_AddressSpace(address_space) { }
/**
* Returns the instruction pointer that triggered this event.
* @return triggering IP
@ -55,11 +56,11 @@ public:
/**
* Returns the address space register of this event.
*/
address_t getCR3() const { return m_CR3; }
address_t getAddressSpace() const { return m_AddressSpace; }
/**
* Sets the address space register for this event.
*/
void setCR3(address_t iptr) { m_CR3 = iptr; }
void setAddressSpace(address_t iptr) { m_AddressSpace = iptr; }
};
/**

View File

@ -57,9 +57,9 @@ bool MemAccessListener::isMatching(const MemAccessEvent* pEv) const
return true;
}
bool BPListener::aspaceIsMatching(address_t aspace) const
bool BPListener::aspaceIsMatching(address_t address_space) const
{
if (m_CR3 == ANY_ADDR || m_CR3 == aspace)
if (m_Data.getAddressSpace() == ANY_ADDR || m_Data.getAddressSpace() == address_space)
return true;
return false;
}
@ -72,7 +72,7 @@ void BPRangeListener::setWatchInstructionPointerRange(address_t start, address_t
bool BPRangeListener::isMatching(const BPEvent* pEv) const
{
if (!aspaceIsMatching(pEv->getCR3()))
if (!aspaceIsMatching(pEv->getAddressSpace()))
return false;
if ((m_WatchStartAddr != ANY_ADDR && pEv->getTriggerInstructionPointer() < m_WatchStartAddr) ||
(m_WatchEndAddr != ANY_ADDR && pEv->getTriggerInstructionPointer() > m_WatchEndAddr))
@ -82,7 +82,7 @@ bool BPRangeListener::isMatching(const BPEvent* pEv) const
bool BPSingleListener::isMatching(const BPEvent* pEv) const
{
if (aspaceIsMatching(pEv->getCR3())) {
if (aspaceIsMatching(pEv->getAddressSpace())) {
if (m_WatchInstrPtr == ANY_ADDR || m_WatchInstrPtr == pEv->getTriggerInstructionPointer())
return true;
}

View File

@ -134,27 +134,28 @@ public:
class BPListener : public BaseListener {
protected:
BPEvent m_Data;
address_t m_CR3;
public:
/**
* Creates a new breakpoint listener. The range information is specific to
* the subclasses.
* @param address_space the address space to be oberserved, given as the
* content of a CR3 register. The listener will not be triggered unless
* @param address_space the address space to be oberserved.
* The nature if its identifier is implementation-specific.
* For IA-32, it is given as the
* content of the CR3 register. The listener will not be triggered unless
* \a ip is part of the given address space.
* ANY_ADDR can be used as a placeholder to allow debugging
* in a random address space.
*/
BPListener(address_t address_space = ANY_ADDR)
: m_Data(address_space, ANY_ADDR), m_CR3(ANY_ADDR) { }
: m_Data(address_space, ANY_ADDR) { }
/**
* Returns the address space register of this listener.
*/
address_t getCR3() const { return m_CR3; }
address_t getAddressSpace() const { return m_Data.getAddressSpace(); }
/**
* Sets the address space register for this listener.
*/
void setCR3(address_t iptr) { m_CR3 = iptr; }
void setAddressSpace(address_t iptr) { m_Data.setAddressSpace(iptr); }
/**
* Checks whether a given address space is matching.
*/
@ -190,11 +191,8 @@ public:
* flow reaches this address and its counter value is zero, the
* listener will be triggered. \a ip can be set to the ANY_ADDR
* wildcard to allow arbitrary addresses. Defaults to 0.
* @param address_space the address space to be oberserved, given as the
* content of a CR3 register. The listener will not be triggered unless
* \a ip is part of the given address space. Defaults to \c ANY_ADDR.
* Here, too, ANY_ADDR is a placeholder to allow debugging
* in a random address space.
* @param address_space the address space to be oberserved.
* \see BPListener
*/
BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR)
: BPListener(address_space), m_WatchInstrPtr(ip) { }

View File

@ -235,8 +235,7 @@ bool L4SysExperiment::run() {
golden_run_file.close();
simulator.terminate(10);
}
simulator.clearListeners();
bp.setCounter(1);
log << "saving output generated during normal execution" << endl;
golden_run_file.close();