X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fsim%2Ffaults.cc;h=0fe85378516f0b0a2880c196d7ffd73fe2264d2e;hb=4514f565e3dfe1de41bbaec05f3f0074e5299bac;hp=cb095f852226c9a8ca5b58076a2a08cc78c1147f;hpb=ba2eae5d528487900d1510fc0a160e660f2c394c;p=gem5.git diff --git a/src/sim/faults.cc b/src/sim/faults.cc index cb095f852..0fe853785 100644 --- a/src/sim/faults.cc +++ b/src/sim/faults.cc @@ -24,29 +24,51 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Nathan Binkert + * Gabe Black */ +#include "arch/isa_traits.hh" #include "base/misc.hh" -#include "sim/faults.hh" -#include "cpu/exec_context.hh" +#include "cpu/thread_context.hh" #include "cpu/base.hh" +#include "sim/faults.hh" +#include "sim/process.hh" +#include "mem/page_table.hh" #if !FULL_SYSTEM -void FaultBase::invoke(ExecContext * xc) +void FaultBase::invoke(ThreadContext * tc) { - fatal("fault (%s) detected @ PC 0x%08p", name(), xc->readPC()); + fatal("fault (%s) detected @ PC %p", name(), tc->readPC()); } #else -void FaultBase::invoke(ExecContext * xc) +void FaultBase::invoke(ThreadContext * tc) { - DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), xc->readPC()); - xc->getCpuPtr()->recordEvent(csprintf("Fault %s", name())); + DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), tc->readPC()); + tc->getCpuPtr()->recordEvent(csprintf("Fault %s", name())); - assert(!xc->misspeculating()); + assert(!tc->misspeculating()); } #endif -void UnimpFault::invoke(ExecContext * xc) +void UnimpFault::invoke(ThreadContext * tc) { - panic("Unimpfault: %s\n", panicStr.c_str()); + fatal("Unimpfault: %s\n", panicStr.c_str()); } + +#if !FULL_SYSTEM +void GenericPageTableFault::invoke(ThreadContext *tc) +{ + Process *p = tc->getProcessPtr(); + + if (!p->checkAndAllocNextPage(vaddr)) + panic("Page table fault when accessing virtual address %#x\n", vaddr); + +} + +void GenericAlignmentFault::invoke(ThreadContext *tc) +{ + panic("Alignment fault when accessing virtual address %#x\n", vaddr); +} +#endif