faults.cc revision 2203
12330SN/A/* 213610Sgiacomo.gabrielli@arm.com * Copyright (c) 2003-2005 The Regents of The University of Michigan 39920Syasuko.eckert@amd.com * All rights reserved. 48733Sgeoffrey.blake@arm.com * 58733Sgeoffrey.blake@arm.com * Redistribution and use in source and binary forms, with or without 68733Sgeoffrey.blake@arm.com * modification, are permitted provided that the following conditions are 78733Sgeoffrey.blake@arm.com * met: redistributions of source code must retain the above copyright 88733Sgeoffrey.blake@arm.com * notice, this list of conditions and the following disclaimer; 98733Sgeoffrey.blake@arm.com * redistributions in binary form must reproduce the above copyright 108733Sgeoffrey.blake@arm.com * notice, this list of conditions and the following disclaimer in the 118733Sgeoffrey.blake@arm.com * documentation and/or other materials provided with the distribution; 128733Sgeoffrey.blake@arm.com * neither the name of the copyright holders nor the names of its 138733Sgeoffrey.blake@arm.com * contributors may be used to endorse or promote products derived from 148733Sgeoffrey.blake@arm.com * this software without specific prior written permission. 152330SN/A * 162330SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172330SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182330SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192330SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202330SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212330SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222330SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232330SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242330SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252330SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262330SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272330SN/A */ 282330SN/A 292330SN/A#include "arch/alpha/faults.hh" 302330SN/A#include "cpu/exec_context.hh" 312330SN/A#include "cpu/base.hh" 322330SN/A#include "base/trace.hh" 332330SN/A#include "kern/kernel_stats.hh" 342330SN/A 352330SN/Anamespace AlphaISA 362330SN/A{ 372330SN/A 382330SN/AFaultName MachineCheckFault::_name = "mchk"; 392330SN/AFaultVect MachineCheckFault::_vect = 0x0401; 402689Sktlim@umich.eduFaultStat MachineCheckFault::_stat; 412689Sktlim@umich.edu 422330SN/AFaultName AlignmentFault::_name = "unalign"; 432330SN/AFaultVect AlignmentFault::_vect = 0x0301; 442683Sktlim@umich.eduFaultStat AlignmentFault::_stat; 452683Sktlim@umich.edu 462315SN/AFaultName ResetFault::_name = "reset"; 472972Sgblack@eecs.umich.eduFaultVect ResetFault::_vect = 0x0001; 486658Snate@binkert.orgFaultStat ResetFault::_stat; 492315SN/A 502683Sktlim@umich.eduFaultName ArithmeticFault::_name = "arith"; 512680SN/AFaultVect ArithmeticFault::_vect = 0x0501; 528733Sgeoffrey.blake@arm.comFaultStat ArithmeticFault::_stat; 532315SN/A 542315SN/AFaultName InterruptFault::_name = "interrupt"; 5513905Sgabeblack@google.comFaultVect InterruptFault::_vect = 0x0101; 5613905Sgabeblack@google.comFaultStat InterruptFault::_stat; 5713905Sgabeblack@google.com 583548Sgblack@eecs.umich.eduFaultName NDtbMissFault::_name = "dtb_miss_single"; 599020Sgblack@eecs.umich.eduFaultVect NDtbMissFault::_vect = 0x0201; 602330SN/AFaultStat NDtbMissFault::_stat; 612315SN/A 622350SN/AFaultName PDtbMissFault::_name = "dtb_miss_double"; 632680SN/AFaultVect PDtbMissFault::_vect = 0x0281; 642680SN/AFaultStat PDtbMissFault::_stat; 652683Sktlim@umich.edu 662683Sktlim@umich.eduFaultName DtbPageFault::_name = "dfault"; 672683Sktlim@umich.eduFaultVect DtbPageFault::_vect = 0x0381; 682683Sktlim@umich.eduFaultStat DtbPageFault::_stat; 692350SN/A 702680SN/AFaultName DtbAcvFault::_name = "dfault"; 712680SN/AFaultVect DtbAcvFault::_vect = 0x0381; 722315SN/AFaultStat DtbAcvFault::_stat; 732315SN/A 742680SN/AFaultName ItbMissFault::_name = "itbmiss"; 752683Sktlim@umich.eduFaultVect ItbMissFault::_vect = 0x0181; 762683Sktlim@umich.eduFaultStat ItbMissFault::_stat; 772330SN/A 782315SN/AFaultName ItbPageFault::_name = "itbmiss"; 792315SN/AFaultVect ItbPageFault::_vect = 0x0181; 802315SN/AFaultStat ItbPageFault::_stat; 812683Sktlim@umich.edu 822683Sktlim@umich.eduFaultName ItbAcvFault::_name = "iaccvio"; 832680SN/AFaultVect ItbAcvFault::_vect = 0x0081; 842683Sktlim@umich.eduFaultStat ItbAcvFault::_stat; 852683Sktlim@umich.edu 862683Sktlim@umich.eduFaultName UnimplementedOpcodeFault::_name = "opdec"; 872683Sktlim@umich.eduFaultVect UnimplementedOpcodeFault::_vect = 0x0481; 882683Sktlim@umich.eduFaultStat UnimplementedOpcodeFault::_stat; 892315SN/A 902315SN/AFaultName FloatEnableFault::_name = "fen"; 912315SN/AFaultVect FloatEnableFault::_vect = 0x0581; 922315SN/AFaultStat FloatEnableFault::_stat; 9313628SAndrea.Mondelli@ucf.edu 942315SN/AFaultName PalFault::_name = "pal"; 9513628SAndrea.Mondelli@ucf.eduFaultVect PalFault::_vect = 0x2001; 9610190Sakash.bagdia@arm.comFaultStat PalFault::_stat; 9713628SAndrea.Mondelli@ucf.edu 988733Sgeoffrey.blake@arm.comFaultName IntegerOverflowFault::_name = "intover"; 9913628SAndrea.Mondelli@ucf.eduFaultVect IntegerOverflowFault::_vect = 0x0501; 1008733Sgeoffrey.blake@arm.comFaultStat IntegerOverflowFault::_stat; 10113865Sgabeblack@google.com 10213865Sgabeblack@google.com#if FULL_SYSTEM 1032315SN/A 1048733Sgeoffrey.blake@arm.comvoid AlphaFault::invoke(ExecContext * xc) 1058733Sgeoffrey.blake@arm.com{ 1062315SN/A DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), xc->regs.pc); 1072315SN/A xc->cpu->recordEvent(csprintf("Fault %s", name())); 1088733Sgeoffrey.blake@arm.com 10913628SAndrea.Mondelli@ucf.edu assert(!xc->misspeculating()); 11013865Sgabeblack@google.com xc->kernelStats->fault(this); 11113865Sgabeblack@google.com 1128733Sgeoffrey.blake@arm.com // exception restart address 1138733Sgeoffrey.blake@arm.com if (setRestartAddress() || !xc->inPalMode()) 1148733Sgeoffrey.blake@arm.com xc->setMiscReg(AlphaISA::IPR_EXC_ADDR, xc->regs.pc); 1158733Sgeoffrey.blake@arm.com 1162315SN/A if (skipFaultingInstruction()) { 11713628SAndrea.Mondelli@ucf.edu // traps... skip faulting instruction. 1184997Sgblack@eecs.umich.edu xc->setMiscReg(AlphaISA::IPR_EXC_ADDR, 11913628SAndrea.Mondelli@ucf.edu xc->readMiscReg(AlphaISA::IPR_EXC_ADDR) + 4); 1204997Sgblack@eecs.umich.edu } 12113865Sgabeblack@google.com 12213865Sgabeblack@google.com if (!xc->inPalMode()) 1238887Sgeoffrey.blake@arm.com AlphaISA::swap_palshadow(&(xc->regs), true); 1248887Sgeoffrey.blake@arm.com 1258887Sgeoffrey.blake@arm.com xc->regs.pc = xc->readMiscReg(AlphaISA::IPR_PAL_BASE) + vect(); 1268733Sgeoffrey.blake@arm.com xc->regs.npc = xc->regs.pc + sizeof(MachInst); 12713693Sgiacomo.gabrielli@arm.com} 12813693Sgiacomo.gabrielli@arm.com 12913865Sgabeblack@google.comvoid ArithmeticFault::invoke(ExecContext * xc) 13013865Sgabeblack@google.com{ 13113865Sgabeblack@google.com DPRINTF(Fault, "Fault %s at PC: %#x\n", name(), xc->regs.pc); 13213628SAndrea.Mondelli@ucf.edu xc->cpu->recordEvent(csprintf("Fault %s", name())); 13313628SAndrea.Mondelli@ucf.edu 1348733Sgeoffrey.blake@arm.com assert(!xc->misspeculating()); 13513628SAndrea.Mondelli@ucf.edu xc->kernelStats->fault(this); 1362315SN/A 13713905Sgabeblack@google.com panic("Arithmetic traps are unimplemented!"); 13813865Sgabeblack@google.com} 13913865Sgabeblack@google.com 14013865Sgabeblack@google.com 14113865Sgabeblack@google.com/*void ArithmeticFault::invoke(ExecContext * xc) 1422690Sktlim@umich.edu{ 14313628SAndrea.Mondelli@ucf.edu panic("Arithmetic traps are unimplemented!"); 1447679Sgblack@eecs.umich.edu}*/ 14513628SAndrea.Mondelli@ucf.edu 14611886Sbrandon.potter@amd.com#endif 14713628SAndrea.Mondelli@ucf.edu 1482690Sktlim@umich.edu} // namespace AlphaISA 14914022Sgabeblack@google.com 15013865Sgabeblack@google.com/*Fault * ListOfFaults[] = { 15113865Sgabeblack@google.com (Fault *)&NoFault, 15213865Sgabeblack@google.com (Fault *)&ResetFault, 15313865Sgabeblack@google.com (Fault *)&MachineCheckFault, 1548733Sgeoffrey.blake@arm.com (Fault *)&ArithmeticFault, 15513865Sgabeblack@google.com (Fault *)&InterruptFault, 15613865Sgabeblack@google.com (Fault *)&NDtbMissFault, 15713865Sgabeblack@google.com (Fault *)&PDtbMissFault, 15813865Sgabeblack@google.com (Fault *)&AlignmentFault, 15913865Sgabeblack@google.com (Fault *)&DtbPageFault, 1608733Sgeoffrey.blake@arm.com (Fault *)&DtbAcvFault, 16113865Sgabeblack@google.com (Fault *)&ItbMissFault, 16213865Sgabeblack@google.com (Fault *)&ItbPageFault, 1638733Sgeoffrey.blake@arm.com (Fault *)&ItbAcvFault, 1648733Sgeoffrey.blake@arm.com (Fault *)&UnimplementedOpcodeFault, 1658733Sgeoffrey.blake@arm.com (Fault *)&FloatEnableFault, 1668809Sgblack@eecs.umich.edu (Fault *)&PalFault, 1678733Sgeoffrey.blake@arm.com (Fault *)&IntegerOverflowFault, 16813865Sgabeblack@google.com }; 16913865Sgabeblack@google.com 17013865Sgabeblack@google.comint NumFaults = sizeof(ListOfFaults) / sizeof(Fault *);*/ 17113865Sgabeblack@google.com