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