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 |