faults.cc (8780:89e0822462a1) faults.cc (8806:669e93d79ed9)
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;

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

182 AlphaFault::invoke(tc);
183}
184
185void
186ItbPageFault::invoke(ThreadContext *tc, StaticInstPtr inst)
187{
188 if (FullSystem) {
189 ItbFault::invoke(tc);
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;

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

182 AlphaFault::invoke(tc);
183}
184
185void
186ItbPageFault::invoke(ThreadContext *tc, StaticInstPtr inst)
187{
188 if (FullSystem) {
189 ItbFault::invoke(tc);
190 return;
191 }
192
193 Process *p = tc->getProcessPtr();
194 TlbEntry entry;
195 bool success = p->pTable->lookup(pc, entry);
196 if (!success) {
197 panic("Tried to execute unmapped address %#x.\n", pc);
190 } else {
198 } else {
191 Process *p = tc->getProcessPtr();
192 TlbEntry entry;
193 bool success = p->pTable->lookup(pc, entry);
194 if (!success) {
195 panic("Tried to execute unmapped address %#x.\n", pc);
196 } else {
197 VAddr vaddr(pc);
198 tc->getITBPtr()->insert(vaddr.page(), entry);
199 }
199 VAddr vaddr(pc);
200 tc->getITBPtr()->insert(vaddr.page(), entry);
200 }
201}
202
203void
204NDtbMissFault::invoke(ThreadContext *tc, StaticInstPtr inst)
205{
206 if (FullSystem) {
207 DtbFault::invoke(tc, inst);
201 }
202}
203
204void
205NDtbMissFault::invoke(ThreadContext *tc, StaticInstPtr inst)
206{
207 if (FullSystem) {
208 DtbFault::invoke(tc, inst);
209 return;
210 }
211
212 Process *p = tc->getProcessPtr();
213 TlbEntry entry;
214 bool success = p->pTable->lookup(vaddr, entry);
215 if (!success) {
216 if (p->fixupStackFault(vaddr))
217 success = p->pTable->lookup(vaddr, entry);
218 }
219 if (!success) {
220 panic("Tried to access unmapped address %#x.\n", (Addr)vaddr);
208 } else {
221 } else {
209 Process *p = tc->getProcessPtr();
210 TlbEntry entry;
211 bool success = p->pTable->lookup(vaddr, entry);
212 if (!success) {
213 if (p->fixupStackFault(vaddr))
214 success = p->pTable->lookup(vaddr, entry);
215 }
216 if (!success) {
217 panic("Tried to access unmapped address %#x.\n", (Addr)vaddr);
218 } else {
219 tc->getDTBPtr()->insert(vaddr.page(), entry);
220 }
222 tc->getDTBPtr()->insert(vaddr.page(), entry);
221 }
222}
223
224} // namespace AlphaISA
225
223 }
224}
225
226} // namespace AlphaISA
227