T32: Added BPSingle, central T32 specific api constants

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@2106 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hoffmann
2013-02-16 23:05:04 +00:00
parent 2e16b8873b
commit 6761268d93
4 changed files with 49 additions and 15 deletions

View File

@ -205,7 +205,7 @@ class BPSingleListener : public BPListener {
protected: protected:
address_t m_WatchInstrPtr; address_t m_WatchInstrPtr;
public: public:
/** /**
* Creates a new breakpoint listener. * Creates a new breakpoint listener.
* @param ip the instruction pointer of the breakpoint. If the control * @param ip the instruction pointer of the breakpoint. If the control
* flow reaches this address and its counter value is zero, the * flow reaches this address and its counter value is zero, the
@ -434,7 +434,7 @@ public:
bool removeWatchNumber(unsigned troubleNum); bool removeWatchNumber(unsigned troubleNum);
/** /**
* Returns the list of observed numbers. * Returns the list of observed numbers.
* @return a const reference to the list which contains all observed numbers * @return a const reference to the list which contains all observed numbers
*/ */
const std::vector<unsigned>& getWatchNumbers() const { return m_WatchNumbers; } const std::vector<unsigned>& getWatchNumbers() const { return m_WatchNumbers; }
/** /**
@ -453,7 +453,7 @@ public:
* Sets the specific interrupt-/trap-number that actually triggered * Sets the specific interrupt-/trap-number that actually triggered
* the listener. Should not be used by experiment code. * the listener. Should not be used by experiment code.
*/ */
void setTriggerNumber(unsigned troubleNum) { m_Data.setTriggerNumber(troubleNum); } void setTriggerNumber(unsigned troubleNum) { m_Data.setTriggerNumber(troubleNum); }
/** /**
* Returns the specific interrupt-/trap-number that actually triggered * Returns the specific interrupt-/trap-number that actually triggered
* the listener. * the listener.

View File

@ -0,0 +1,40 @@
/*
* Some constants for the T32 remote api calls.
* see also doc/t32_remote_api.pdf
*/
#ifndef __T32_CONSTANTS_HPP__
#define __T32_CONSTANTS_HPP__
namespace fail {
namespace T32 {
//!< Breakpoint configuration
struct BP {
enum {
EXECUTION = 1<<0,
HLL_STEP = 1<<1,
SPOT = 1<<2,
READ = 1<<3,
WRITE = 1<<4,
ALPHA = 1<<5,
BETA = 1<<6,
CHARLY = 1<<7,
CLEAR = 1<<8,
};
}; // struct BP
//!< Memory access variants
struct MEMACCESS {
enum {
DATA = 0,
PROGRAM = 1,
AD = 12,
AP = 13,
USR = 15,
};
}; // struct MEMACCESS
}; // namespace T32
}; // namespace fail
#endif // __T32_CONSTANTS_HPP__

View File

@ -7,6 +7,7 @@
#if defined(BUILD_T32) && defined(CONFIG_EVENT_BREAKPOINTS) #if defined(BUILD_T32) && defined(CONFIG_EVENT_BREAKPOINTS)
#include "../SALInst.hpp" #include "../SALInst.hpp"
#include "T32Constants.hpp"
aspect T32Listener aspect T32Listener
{ {
@ -18,13 +19,14 @@ aspect T32Listener
// Setup Breakpoint in T32 // Setup Breakpoint in T32
std::cout << "T32Listener::onAddition" << std::endl; std::cout << "T32Listener::onAddition" << std::endl;
// Enable Breakpoint // Enable Breakpoint
T32_WriteBreakpoint( m_WatchInstrPtr, T32::MEMACCESS::PROGRAM, T32::BP::EXECUTION, 1);
return true; return true;
} }
void onDeletion() void onDeletion()
{ {
// Delete Breakpoint in T32 // Delete Breakpoint in T32
T32_WriteBreakpoint( m_WatchInstrPtr, T32::MEMACCESS::PROGRAM, T32::BP::CLEAR, 1);
} }
}; };
}; };

View File

@ -2,8 +2,8 @@
#define __T32_MEMORY_HPP__ #define __T32_MEMORY_HPP__
#include "../Memory.hpp" #include "../Memory.hpp"
#include <iostream>
#include <t32.h> #include <t32.h>
#include "T32Constants.hpp"
namespace fail { namespace fail {
@ -14,14 +14,6 @@ namespace fail {
*/ */
class T32MemoryManager : public MemoryManager { class T32MemoryManager : public MemoryManager {
enum ACCESS_CLASS {
data_access = 0,
program_access = 1,
AD_access = 12,
AP_access = 13,
USR_access = 15,
};
public: public:
size_t getPoolSize() const { return 0; /* TODO */ } size_t getPoolSize() const { return 0; /* TODO */ }
@ -36,7 +28,7 @@ public:
void getBytes(guest_address_t addr, size_t cnt, void *dest) void getBytes(guest_address_t addr, size_t cnt, void *dest)
{ {
int access = data_access; // TODO what access class do we need?! int access = T32::MEMACCESS::DATA; // TODO what access class do we need?!
T32_ReadMemory( addr, access, (byte*)(dest), cnt); T32_ReadMemory( addr, access, (byte*)(dest), cnt);
} }
@ -47,7 +39,7 @@ public:
void setBytes(guest_address_t addr, size_t cnt, void const *src) void setBytes(guest_address_t addr, size_t cnt, void const *src)
{ {
int access = data_access; // TODO what access class do we really need?! int access = T32::MEMACCESS::DATA; // TODO what access class do we really need?!
T32_WriteMemory(addr, access, (byte*)(src), cnt); T32_WriteMemory(addr, access, (byte*)(src), cnt);
} }