faults.cc revision 12334
12735Sktlim@umich.edu/*
22735Sktlim@umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
32735Sktlim@umich.edu * All rights reserved.
42735Sktlim@umich.edu *
52735Sktlim@umich.edu * Redistribution and use in source and binary forms, with or without
62735Sktlim@umich.edu * modification, are permitted provided that the following conditions are
72735Sktlim@umich.edu * met: redistributions of source code must retain the above copyright
82735Sktlim@umich.edu * notice, this list of conditions and the following disclaimer;
92735Sktlim@umich.edu * redistributions in binary form must reproduce the above copyright
102735Sktlim@umich.edu * notice, this list of conditions and the following disclaimer in the
112735Sktlim@umich.edu * documentation and/or other materials provided with the distribution;
122735Sktlim@umich.edu * neither the name of the copyright holders nor the names of its
132735Sktlim@umich.edu * contributors may be used to endorse or promote products derived from
142735Sktlim@umich.edu * this software without specific prior written permission.
152735Sktlim@umich.edu *
162735Sktlim@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
172735Sktlim@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
182735Sktlim@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
192735Sktlim@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
202735Sktlim@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
212735Sktlim@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
222735Sktlim@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232735Sktlim@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
242735Sktlim@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
252735Sktlim@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
262735Sktlim@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
272735Sktlim@umich.edu *
282735Sktlim@umich.edu * Authors: Nathan Binkert
292735Sktlim@umich.edu *          Gabe Black
302735Sktlim@umich.edu */
312735Sktlim@umich.edu
322735Sktlim@umich.edu#include "sim/faults.hh"
332735Sktlim@umich.edu
342735Sktlim@umich.edu#include "arch/isa_traits.hh"
352735Sktlim@umich.edu#include "base/logging.hh"
362735Sktlim@umich.edu#include "cpu/base.hh"
372735Sktlim@umich.edu#include "cpu/thread_context.hh"
382735Sktlim@umich.edu#include "debug/Fault.hh"
392735Sktlim@umich.edu#include "mem/page_table.hh"
402735Sktlim@umich.edu#include "sim/full_system.hh"
412735Sktlim@umich.edu#include "sim/process.hh"
422735Sktlim@umich.edu
432735Sktlim@umich.eduvoid FaultBase::invoke(ThreadContext * tc, const StaticInstPtr &inst)
442735Sktlim@umich.edu{
452735Sktlim@umich.edu    if (FullSystem) {
462735Sktlim@umich.edu        DPRINTF(Fault, "Fault %s at PC: %s\n", name(), tc->pcState());
472735Sktlim@umich.edu    } else {
482735Sktlim@umich.edu        panic("fault (%s) detected @ PC %s", name(), tc->pcState());
492735Sktlim@umich.edu    }
502735Sktlim@umich.edu}
512735Sktlim@umich.edu
522735Sktlim@umich.eduvoid UnimpFault::invoke(ThreadContext * tc, const StaticInstPtr &inst)
532735Sktlim@umich.edu{
542735Sktlim@umich.edu    panic("Unimpfault: %s\n", panicStr.c_str());
552735Sktlim@umich.edu}
562735Sktlim@umich.edu
572735Sktlim@umich.eduvoid ReExec::invoke(ThreadContext *tc, const StaticInstPtr &inst)
582735Sktlim@umich.edu{
592735Sktlim@umich.edu    tc->pcState(tc->pcState());
602735Sktlim@umich.edu}
612735Sktlim@umich.edu
622735Sktlim@umich.eduvoid SyscallRetryFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
632735Sktlim@umich.edu{
642735Sktlim@umich.edu    tc->pcState(tc->pcState());
652735Sktlim@umich.edu}
662735Sktlim@umich.edu
672735Sktlim@umich.eduvoid GenericPageTableFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
682735Sktlim@umich.edu{
692735Sktlim@umich.edu    bool handled = false;
702735Sktlim@umich.edu    if (!FullSystem) {
712735Sktlim@umich.edu        Process *p = tc->getProcessPtr();
722735Sktlim@umich.edu        handled = p->fixupStackFault(vaddr);
732735Sktlim@umich.edu    }
742735Sktlim@umich.edu    if (!handled)
752735Sktlim@umich.edu        panic("Page table fault when accessing virtual address %#x\n", vaddr);
762735Sktlim@umich.edu
772735Sktlim@umich.edu}
782735Sktlim@umich.edu
792735Sktlim@umich.eduvoid GenericAlignmentFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
802735Sktlim@umich.edu{
812735Sktlim@umich.edu    panic("Alignment fault when accessing virtual address %#x\n", vaddr);
822735Sktlim@umich.edu}
832735Sktlim@umich.edu