faults.cc revision 2201
15409Sgblack@eecs.umich.edu/*
24519Sgblack@eecs.umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan
34519Sgblack@eecs.umich.edu * All rights reserved.
47087Snate@binkert.org *
57087Snate@binkert.org * Redistribution and use in source and binary forms, with or without
67087Snate@binkert.org * modification, are permitted provided that the following conditions are
77087Snate@binkert.org * met: redistributions of source code must retain the above copyright
87087Snate@binkert.org * notice, this list of conditions and the following disclaimer;
97087Snate@binkert.org * redistributions in binary form must reproduce the above copyright
107087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the
117087Snate@binkert.org * documentation and/or other materials provided with the distribution;
124519Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
137087Snate@binkert.org * contributors may be used to endorse or promote products derived from
147087Snate@binkert.org * this software without specific prior written permission.
157087Snate@binkert.org *
167087Snate@binkert.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177087Snate@binkert.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187087Snate@binkert.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197087Snate@binkert.org * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207087Snate@binkert.org * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
214519Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227087Snate@binkert.org * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
234519Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
244519Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
254519Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
264519Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
274519Sgblack@eecs.umich.edu */
284519Sgblack@eecs.umich.edu
294519Sgblack@eecs.umich.edu#include "arch/alpha/faults.hh"
304519Sgblack@eecs.umich.edu#include "cpu/exec_context.hh"
314519Sgblack@eecs.umich.edu#include "cpu/base.hh"
324519Sgblack@eecs.umich.edu#include "base/trace.hh"
334519Sgblack@eecs.umich.edu#include "kern/kernel_stats.hh"
344519Sgblack@eecs.umich.edu
354519Sgblack@eecs.umich.edunamespace AlphaISA
364519Sgblack@eecs.umich.edu{
374519Sgblack@eecs.umich.edu
384519Sgblack@eecs.umich.eduFaultVect AlphaMachineCheckFault::_vect = 0x0401;
394519Sgblack@eecs.umich.eduFaultStat AlphaMachineCheckFault::_stat;
404519Sgblack@eecs.umich.edu
414519Sgblack@eecs.umich.eduFaultVect AlphaAlignmentFault::_vect = 0x0301;
424519Sgblack@eecs.umich.eduFaultStat AlphaAlignmentFault::_stat;
434519Sgblack@eecs.umich.edu
444519Sgblack@eecs.umich.eduFaultName ResetFault::_name = "reset";
454519Sgblack@eecs.umich.eduFaultVect ResetFault::_vect = 0x0001;
464519Sgblack@eecs.umich.eduFaultStat ResetFault::_stat;
474519Sgblack@eecs.umich.edu
484519Sgblack@eecs.umich.eduFaultName ArithmeticFault::_name = "arith";
494519Sgblack@eecs.umich.eduFaultVect ArithmeticFault::_vect = 0x0501;
504809Sgblack@eecs.umich.eduFaultStat ArithmeticFault::_stat;
514519Sgblack@eecs.umich.edu
524519Sgblack@eecs.umich.eduFaultName InterruptFault::_name = "interrupt";
534688Sgblack@eecs.umich.eduFaultVect InterruptFault::_vect = 0x0101;
544688Sgblack@eecs.umich.eduFaultStat InterruptFault::_stat;
554688Sgblack@eecs.umich.edu
564688Sgblack@eecs.umich.eduFaultName NDtbMissFault::_name = "dtb_miss_single";
574688Sgblack@eecs.umich.eduFaultVect NDtbMissFault::_vect = 0x0201;
584688Sgblack@eecs.umich.eduFaultStat NDtbMissFault::_stat;
594708Sgblack@eecs.umich.edu
604708Sgblack@eecs.umich.eduFaultName PDtbMissFault::_name = "dtb_miss_double";
614708Sgblack@eecs.umich.eduFaultVect PDtbMissFault::_vect = 0x0281;
624708Sgblack@eecs.umich.eduFaultStat PDtbMissFault::_stat;
634519Sgblack@eecs.umich.edu
644519Sgblack@eecs.umich.eduFaultName DtbPageFault::_name = "dfault";
654519Sgblack@eecs.umich.eduFaultVect DtbPageFault::_vect = 0x0381;
664519Sgblack@eecs.umich.eduFaultStat DtbPageFault::_stat;
674519Sgblack@eecs.umich.edu
684519Sgblack@eecs.umich.eduFaultName DtbAcvFault::_name = "dfault";
694519Sgblack@eecs.umich.eduFaultVect DtbAcvFault::_vect = 0x0381;
704519Sgblack@eecs.umich.eduFaultStat DtbAcvFault::_stat;
714519Sgblack@eecs.umich.edu
724519Sgblack@eecs.umich.eduFaultName ItbMissFault::_name = "itbmiss";
734519Sgblack@eecs.umich.eduFaultVect ItbMissFault::_vect = 0x0181;
744951Sgblack@eecs.umich.eduFaultStat ItbMissFault::_stat;
754519Sgblack@eecs.umich.edu
764519Sgblack@eecs.umich.eduFaultName ItbPageFault::_name = "itbmiss";
774519Sgblack@eecs.umich.eduFaultVect ItbPageFault::_vect = 0x0181;
784519Sgblack@eecs.umich.eduFaultStat ItbPageFault::_stat;
794519Sgblack@eecs.umich.edu
804519Sgblack@eecs.umich.eduFaultName ItbAcvFault::_name = "iaccvio";
814688Sgblack@eecs.umich.eduFaultVect ItbAcvFault::_vect = 0x0081;
824688Sgblack@eecs.umich.eduFaultStat ItbAcvFault::_stat;
834688Sgblack@eecs.umich.edu
844688Sgblack@eecs.umich.eduFaultName UnimplementedOpcodeFault::_name = "opdec";
854688Sgblack@eecs.umich.eduFaultVect UnimplementedOpcodeFault::_vect = 0x0481;
864688Sgblack@eecs.umich.eduFaultStat UnimplementedOpcodeFault::_stat;
874708Sgblack@eecs.umich.edu
884708Sgblack@eecs.umich.eduFaultName FloatEnableFault::_name = "fen";
894708Sgblack@eecs.umich.eduFaultVect FloatEnableFault::_vect = 0x0581;
904708Sgblack@eecs.umich.eduFaultStat FloatEnableFault::_stat;
914519Sgblack@eecs.umich.edu
924519Sgblack@eecs.umich.eduFaultName PalFault::_name = "pal";
934519Sgblack@eecs.umich.eduFaultVect PalFault::_vect = 0x2001;
944519Sgblack@eecs.umich.eduFaultStat PalFault::_stat;
954519Sgblack@eecs.umich.edu
964519Sgblack@eecs.umich.eduFaultName IntegerOverflowFault::_name = "intover";
974519Sgblack@eecs.umich.eduFaultVect IntegerOverflowFault::_vect = 0x0501;
984519Sgblack@eecs.umich.eduFaultStat IntegerOverflowFault::_stat;
994519Sgblack@eecs.umich.edu
1004519Sgblack@eecs.umich.edu#if FULL_SYSTEM
1014519Sgblack@eecs.umich.edu
1024519Sgblack@eecs.umich.eduvoid AlphaFault::invoke(ExecContext * xc)
1034519Sgblack@eecs.umich.edu{
1044519Sgblack@eecs.umich.edu    DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), xc->regs.pc);
1054519Sgblack@eecs.umich.edu    xc->cpu->recordEvent(csprintf("Fault %s", name()));
1067620Sgblack@eecs.umich.edu
1076345Sgblack@eecs.umich.edu    assert(!xc->misspeculating());
1084712Sgblack@eecs.umich.edu    xc->kernelStats->fault(this);
1094519Sgblack@eecs.umich.edu
1104519Sgblack@eecs.umich.edu    // exception restart address
1114519Sgblack@eecs.umich.edu    if (setRestartAddress() || !xc->inPalMode())
1124519Sgblack@eecs.umich.edu        xc->setMiscReg(AlphaISA::IPR_EXC_ADDR, xc->regs.pc);
1134519Sgblack@eecs.umich.edu
1144519Sgblack@eecs.umich.edu    if (skipFaultingInstruction()) {
1154519Sgblack@eecs.umich.edu        // traps...  skip faulting instruction.
1164951Sgblack@eecs.umich.edu        xc->setMiscReg(AlphaISA::IPR_EXC_ADDR,
1174519Sgblack@eecs.umich.edu                   xc->readMiscReg(AlphaISA::IPR_EXC_ADDR) + 4);
1184519Sgblack@eecs.umich.edu    }
1194951Sgblack@eecs.umich.edu
1207620Sgblack@eecs.umich.edu    if (!xc->inPalMode())
1216646Sgblack@eecs.umich.edu        AlphaISA::swap_palshadow(&(xc->regs), true);
1224712Sgblack@eecs.umich.edu
1234519Sgblack@eecs.umich.edu    xc->regs.pc = xc->readMiscReg(AlphaISA::IPR_PAL_BASE) + vect();
1244519Sgblack@eecs.umich.edu    xc->regs.npc = xc->regs.pc + sizeof(MachInst);
1254519Sgblack@eecs.umich.edu}
1264519Sgblack@eecs.umich.edu
1274519Sgblack@eecs.umich.eduvoid ArithmeticFault::invoke(ExecContext * xc)
1284519Sgblack@eecs.umich.edu{
1294519Sgblack@eecs.umich.edu    DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), xc->regs.pc);
1307620Sgblack@eecs.umich.edu    xc->cpu->recordEvent(csprintf("Fault %s", name()));
1316345Sgblack@eecs.umich.edu
1324712Sgblack@eecs.umich.edu    assert(!xc->misspeculating());
1337620Sgblack@eecs.umich.edu    xc->kernelStats->fault(this);
1344688Sgblack@eecs.umich.edu
1354581Sgblack@eecs.umich.edu    panic("Arithmetic traps are unimplemented!");
1364519Sgblack@eecs.umich.edu}
1377626Sgblack@eecs.umich.edu
1387894SBrad.Beckmann@amd.com
1394519Sgblack@eecs.umich.edu/*void ArithmeticFault::invoke(ExecContext * xc)
1404519Sgblack@eecs.umich.edu{
1414519Sgblack@eecs.umich.edu    panic("Arithmetic traps are unimplemented!");
1424519Sgblack@eecs.umich.edu}*/
1434951Sgblack@eecs.umich.edu
1447620Sgblack@eecs.umich.edu#endif
1456646Sgblack@eecs.umich.edu
1464712Sgblack@eecs.umich.edu} // namespace AlphaISA
1477620Sgblack@eecs.umich.edu
1484688Sgblack@eecs.umich.edu/*Fault * ListOfFaults[] = {
1494581Sgblack@eecs.umich.edu        (Fault *)&NoFault,
1504519Sgblack@eecs.umich.edu        (Fault *)&ResetFault,
1517626Sgblack@eecs.umich.edu        (Fault *)&MachineCheckFault,
1527894SBrad.Beckmann@amd.com        (Fault *)&ArithmeticFault,
1534519Sgblack@eecs.umich.edu        (Fault *)&InterruptFault,
1544519Sgblack@eecs.umich.edu        (Fault *)&NDtbMissFault,
1554519Sgblack@eecs.umich.edu        (Fault *)&PDtbMissFault,
1565075Sgblack@eecs.umich.edu        (Fault *)&AlignmentFault,
1575075Sgblack@eecs.umich.edu        (Fault *)&DtbPageFault,
1585075Sgblack@eecs.umich.edu        (Fault *)&DtbAcvFault,
1595075Sgblack@eecs.umich.edu        (Fault *)&ItbMissFault,
1605428Sgblack@eecs.umich.edu        (Fault *)&ItbPageFault,
1615428Sgblack@eecs.umich.edu        (Fault *)&ItbAcvFault,
1625674Sgblack@eecs.umich.edu        (Fault *)&UnimplementedOpcodeFault,
1635899Sgblack@eecs.umich.edu        (Fault *)&FloatEnableFault,
1645936Sgblack@eecs.umich.edu        (Fault *)&PalFault,
1655428Sgblack@eecs.umich.edu        (Fault *)&IntegerOverflowFault,
1665678Sgblack@eecs.umich.edu        };
1675678Sgblack@eecs.umich.edu
1685678Sgblack@eecs.umich.eduint NumFaults = sizeof(ListOfFaults) / sizeof(Fault *);*/
1695678Sgblack@eecs.umich.edu