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:
@ -33,15 +33,16 @@ public:
|
|||||||
class BPEvent : public BaseEvent {
|
class BPEvent : public BaseEvent {
|
||||||
protected:
|
protected:
|
||||||
address_t m_TriggerInstrPtr; //!< the address which triggered the event
|
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:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a new breakpoint event. The range information is specific to
|
* Creates a new breakpoint event. The range information is specific to
|
||||||
* the subclasses.
|
* the subclasses.
|
||||||
* @param trigger the triggering address of the breakpoint event
|
* @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.
|
* Returns the instruction pointer that triggered this event.
|
||||||
* @return triggering IP
|
* @return triggering IP
|
||||||
@ -55,11 +56,11 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Returns the address space register of this event.
|
* 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.
|
* Sets the address space register for this event.
|
||||||
*/
|
*/
|
||||||
void setCR3(address_t iptr) { m_CR3 = iptr; }
|
void setAddressSpace(address_t iptr) { m_AddressSpace = iptr; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -57,9 +57,9 @@ bool MemAccessListener::isMatching(const MemAccessEvent* pEv) const
|
|||||||
return true;
|
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 true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ void BPRangeListener::setWatchInstructionPointerRange(address_t start, address_t
|
|||||||
|
|
||||||
bool BPRangeListener::isMatching(const BPEvent* pEv) const
|
bool BPRangeListener::isMatching(const BPEvent* pEv) const
|
||||||
{
|
{
|
||||||
if (!aspaceIsMatching(pEv->getCR3()))
|
if (!aspaceIsMatching(pEv->getAddressSpace()))
|
||||||
return false;
|
return false;
|
||||||
if ((m_WatchStartAddr != ANY_ADDR && pEv->getTriggerInstructionPointer() < m_WatchStartAddr) ||
|
if ((m_WatchStartAddr != ANY_ADDR && pEv->getTriggerInstructionPointer() < m_WatchStartAddr) ||
|
||||||
(m_WatchEndAddr != ANY_ADDR && pEv->getTriggerInstructionPointer() > m_WatchEndAddr))
|
(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
|
bool BPSingleListener::isMatching(const BPEvent* pEv) const
|
||||||
{
|
{
|
||||||
if (aspaceIsMatching(pEv->getCR3())) {
|
if (aspaceIsMatching(pEv->getAddressSpace())) {
|
||||||
if (m_WatchInstrPtr == ANY_ADDR || m_WatchInstrPtr == pEv->getTriggerInstructionPointer())
|
if (m_WatchInstrPtr == ANY_ADDR || m_WatchInstrPtr == pEv->getTriggerInstructionPointer())
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -134,27 +134,28 @@ public:
|
|||||||
class BPListener : public BaseListener {
|
class BPListener : public BaseListener {
|
||||||
protected:
|
protected:
|
||||||
BPEvent m_Data;
|
BPEvent m_Data;
|
||||||
address_t m_CR3;
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Creates a new breakpoint listener. The range information is specific to
|
* Creates a new breakpoint listener. The range information is specific to
|
||||||
* the subclasses.
|
* the subclasses.
|
||||||
* @param address_space the address space to be oberserved, given as the
|
* @param address_space the address space to be oberserved.
|
||||||
* content of a CR3 register. The listener will not be triggered unless
|
* 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.
|
* \a ip is part of the given address space.
|
||||||
* ANY_ADDR can be used as a placeholder to allow debugging
|
* ANY_ADDR can be used as a placeholder to allow debugging
|
||||||
* in a random address space.
|
* in a random address space.
|
||||||
*/
|
*/
|
||||||
BPListener(address_t address_space = ANY_ADDR)
|
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.
|
* 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.
|
* 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.
|
* Checks whether a given address space is matching.
|
||||||
*/
|
*/
|
||||||
@ -190,11 +191,8 @@ public:
|
|||||||
* flow reaches this address and its counter value is zero, the
|
* flow reaches this address and its counter value is zero, the
|
||||||
* listener will be triggered. \a ip can be set to the ANY_ADDR
|
* listener will be triggered. \a ip can be set to the ANY_ADDR
|
||||||
* wildcard to allow arbitrary addresses. Defaults to 0.
|
* wildcard to allow arbitrary addresses. Defaults to 0.
|
||||||
* @param address_space the address space to be oberserved, given as the
|
* @param address_space the address space to be oberserved.
|
||||||
* content of a CR3 register. The listener will not be triggered unless
|
* \see BPListener
|
||||||
* \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.
|
|
||||||
*/
|
*/
|
||||||
BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR)
|
BPSingleListener(address_t ip = 0, address_t address_space = ANY_ADDR)
|
||||||
: BPListener(address_space), m_WatchInstrPtr(ip) { }
|
: BPListener(address_space), m_WatchInstrPtr(ip) { }
|
||||||
|
|||||||
@ -235,8 +235,7 @@ bool L4SysExperiment::run() {
|
|||||||
golden_run_file.close();
|
golden_run_file.close();
|
||||||
simulator.terminate(10);
|
simulator.terminate(10);
|
||||||
}
|
}
|
||||||
simulator.clearListeners();
|
|
||||||
bp.setCounter(1);
|
|
||||||
log << "saving output generated during normal execution" << endl;
|
log << "saving output generated during normal execution" << endl;
|
||||||
golden_run_file.close();
|
golden_run_file.close();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user