diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2007-10-22 14:30:45 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2007-10-22 14:30:45 -0700 |
commit | 93da9eb7f6d9b2ca84de74afd3e0cb07188db9e6 (patch) | |
tree | c4584185c1f9ed37266e927ba112092dd881eb11 /src/cpu/simple/timing.cc | |
parent | 43cb78004b73c3f98f3429cebb3f846a0f6ac8d3 (diff) | |
download | gem5-93da9eb7f6d9b2ca84de74afd3e0cb07188db9e6.tar.xz |
CPU: Add functions to the "ExecContext"s that translate a given address.
--HG--
extra : convert_revision : 7d898c6b6b13094fd05326eaa0b095a3ab132397
Diffstat (limited to 'src/cpu/simple/timing.cc')
-rw-r--r-- | src/cpu/simple/timing.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc index f1e51ac70..998d0b017 100644 --- a/src/cpu/simple/timing.cc +++ b/src/cpu/simple/timing.cc @@ -293,6 +293,26 @@ TimingSimpleCPU::read(Addr addr, T &data, unsigned flags) return fault; } +Fault +TimingSimpleCPU::translateDataReadAddr(Addr vaddr, Addr &paddr, + int size, unsigned flags) +{ + Request *req = + new Request(0, vaddr, size, flags, thread->readPC(), cpuId, 0); + + if (traceData) { + traceData->setAddr(vaddr); + } + + Fault fault = thread->translateDataWriteReq(req); + + if (fault == NoFault) + paddr = req->getPaddr(); + + delete req; + return fault; +} + #ifndef DOXYGEN_SHOULD_SKIP_THIS template @@ -411,6 +431,26 @@ TimingSimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res) return fault; } +Fault +TimingSimpleCPU::translateDataWriteAddr(Addr vaddr, Addr &paddr, + int size, unsigned flags) +{ + Request *req = + new Request(0, vaddr, size, flags, thread->readPC(), cpuId, 0); + + if (traceData) { + traceData->setAddr(vaddr); + } + + Fault fault = thread->translateDataWriteReq(req); + + if (fault == NoFault) + paddr = req->getPaddr(); + + delete req; + return fault; +} + #ifndef DOXYGEN_SHOULD_SKIP_THIS template |