Changeset 437 for trunk/hal/tsar_mips32/core
- Timestamp:
- Mar 28, 2018, 2:40:29 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/tsar_mips32/core/hal_exception.c
r435 r437 154 154 155 155 ////////////////////////////////////////////////////////////////////////////////////////// 156 // This function is called when an MMU exception has been detected .156 // This function is called when an MMU exception has been detected (IBE / DBE). 157 157 // It get the relevant exception arguments from the MMU. 158 158 // It signal a fatal error in case of illegal access. In case of page unmapped … … 167 167 ////////////////////////////////////////////////////////////////////////////////////////// 168 168 error_t hal_mmu_exception( thread_t * this, 169 uint32_t excPC, 169 170 bool_t is_ins ) 170 171 { … … 294 295 default: // this is a kernel error => panic 295 296 { 296 assert( false , __FUNCTION__ , "thread %x / e xcp_code = %x/ vaddr = %x\n",297 this ->trdid , excp_code, bad_vaddr );297 assert( false , __FUNCTION__ , "thread %x / epc %x / %s / vaddr = %x\n", 298 this, excPC, hal_mmu_exception_str(excp_code) , bad_vaddr ); 298 299 299 300 return EXCP_KERNEL_PANIC; … … 379 380 error_t error; 380 381 uint32_t excCode; // 4 bits XCODE from CP0_CR 382 uint32_t excPC; // fauty instruction address 381 383 382 384 // get pointer on faulty thread uzone … … 384 386 uzone = (uint32_t *)CURRENT_THREAD->uzone_current; 385 387 386 // get 4 bits XCODE from CP0_CR register388 // get XCODE and EPC from UZONE 387 389 excCode = (uzone[UZ_CR] >> 2) & 0xF; 390 excPC = uzone[UZ_EPC]; 388 391 389 392 #if CONFIG_DEBUG_HAL_EXCEPTIONS 390 393 uint32_t cycle = (uint32_t)hal_get_cycles(); 391 394 if( CONFIG_DEBUG_HAL_EXCEPTIONS < cycle ) 392 printk("\n[DBG] %s : thread %x on core[%x,%d] enter / process%x / xcode %x / cycle %d\n",393 __FUNCTION__, this, local_cxy, this->core->lid, this->process->pid, exc Code, cycle );395 printk("\n[DBG] %s : thread %x enter / core[%x,%d] / pid %x / epc %x / xcode %x / cycle %d\n", 396 __FUNCTION__, this, local_cxy, this->core->lid, this->process->pid, excPC, excCode, cycle ); 394 397 #endif 395 398 … … 398 401 case XCODE_DBE: // can be non fatal 399 402 { 400 error = hal_mmu_exception( this , false ); // data MMU exception403 error = hal_mmu_exception( this , excPC , false ); // data MMU exception 401 404 break; 402 405 } 403 406 case XCODE_IBE: // can be non fatal 404 407 { 405 error = hal_mmu_exception( this , true ); // ins MMU exception408 error = hal_mmu_exception( this , excPC , true ); // ins MMU exception 406 409 break; 407 410 } … … 450 453 cycle = (uint32_t)hal_get_cycles(); 451 454 if( CONFIG_DEBUG_HAL_EXCEPTIONS < cycle ) 452 printk("\n[DBG] %s : thread %x on core[%x,%d] exit / process%x / xcode %x / cycle %d\n",453 __FUNCTION__, this, local_cxy, this->core->lid, this->process->pid, exc Code, cycle );455 printk("\n[DBG] %s : thread %x exit / core[%x,%d] / pid %x / epc %x / xcode %x / cycle %d\n", 456 __FUNCTION__, this, local_cxy, this->core->lid, this->process->pid, excPC, excCode, cycle ); 454 457 #endif 455 458
Note: See TracChangeset
for help on using the changeset viewer.