faults.cc (3363:8ed27e349b3d) faults.cc (4183:3d19c1d46946)
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 15 unchanged lines hidden (view full) ---

24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Authors: Nathan Binkert
29 * Gabe Black
30 */
31
1/*
2 * Copyright (c) 2003-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 15 unchanged lines hidden (view full) ---

24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Authors: Nathan Binkert
29 * Gabe Black
30 */
31
32#include "arch/isa_traits.hh"
32#include "base/misc.hh"
33#include "base/misc.hh"
33#include "sim/faults.hh"
34#include "cpu/thread_context.hh"
35#include "cpu/base.hh"
34#include "cpu/thread_context.hh"
35#include "cpu/base.hh"
36#include "sim/faults.hh"
37#include "sim/process.hh"
38#include "mem/page_table.hh"
36
37#if !FULL_SYSTEM
38void FaultBase::invoke(ThreadContext * tc)
39{
40 fatal("fault (%s) detected @ PC %p", name(), tc->readPC());
41}
42#else
43void FaultBase::invoke(ThreadContext * tc)

--- 4 unchanged lines hidden (view full) ---

48 assert(!tc->misspeculating());
49}
50#endif
51
52void UnimpFault::invoke(ThreadContext * tc)
53{
54 panic("Unimpfault: %s\n", panicStr.c_str());
55}
39
40#if !FULL_SYSTEM
41void FaultBase::invoke(ThreadContext * tc)
42{
43 fatal("fault (%s) detected @ PC %p", name(), tc->readPC());
44}
45#else
46void FaultBase::invoke(ThreadContext * tc)

--- 4 unchanged lines hidden (view full) ---

51 assert(!tc->misspeculating());
52}
53#endif
54
55void UnimpFault::invoke(ThreadContext * tc)
56{
57 panic("Unimpfault: %s\n", panicStr.c_str());
58}
59
60void PageTableFault::invoke(ThreadContext *tc)
61{
62 Process *p = tc->getProcessPtr();
63
64 // We've accessed the next page of the stack, so extend the stack
65 // to cover it.
66 if(vaddr < p->stack_min && vaddr >= p->stack_min - TheISA::PageBytes)
67 {
68 p->stack_min -= TheISA::PageBytes;
69 if(p->stack_base - p->stack_min > 8*1024*1024)
70 fatal("Over max stack size for one thread\n");
71 p->pTable->allocate(p->stack_min, TheISA::PageBytes);
72 warn("Increasing stack size by one page.");
73 }
74 // Otherwise, we have an unexpected page fault. Report that fact,
75 // and what address was accessed to cause the fault.
76 else
77 {
78 panic("Page table fault when accessing virtual address %#x\n", vaddr);
79 }
80}