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