Changeset 408 for trunk/hal/tsar_mips32/core/hal_syscall.c
- Timestamp:
- Dec 5, 2017, 4:20:07 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/tsar_mips32/core/hal_syscall.c
r407 r408 30 30 31 31 32 ///////////////////////////////////// 33 void hal_do_syscall( thread_t * this, 34 reg_t * regs_tbl ) 32 ///////////////////// 33 void hal_do_syscall() 35 34 { 35 thread_t * this; 36 36 37 #if(CONFIG_SYSCALL_DEBUG & 0x1) 38 printk("\n[DBG] %s : core[%x,%d] enter at cycle %d\n", 39 __FUNCTION__ , local_cxy , this->core->lid , hal_time_stamp() ); 40 #endif 37 uint32_t * enter_uzone; 38 uint32_t * exit_uzone; 41 39 42 register reg_t arg0;43 register reg_t arg1;44 register reg_t arg2;45 register reg_t arg3;46 register reg_t service_num;47 register reg_t retval;40 uint32_t arg0; 41 uint32_t arg1; 42 uint32_t arg2; 43 uint32_t arg3; 44 uint32_t service_num; 45 uint32_t retval; 48 46 49 service_num = regs_tbl[UZ_V0]; 47 // get pointer on enter_thread uzone 48 this = CURRENT_THREAD; 49 enter_uzone = (uint32_t *)this->uzone; 50 50 51 arg0 = regs_tbl[UZ_A0]; 52 arg1 = regs_tbl[UZ_A1]; 53 arg2 = regs_tbl[UZ_A2]; 54 arg3 = regs_tbl[UZ_A3]; 51 // get syscall arguments from uzone 52 service_num = enter_uzone[UZ_V0]; 53 arg0 = enter_uzone[UZ_A0]; 54 arg1 = enter_uzone[UZ_A1]; 55 arg2 = enter_uzone[UZ_A2]; 56 arg3 = enter_uzone[UZ_A3]; 55 57 58 syscall_dmsg("\n[DBG] %s : core[%x,%d] enters for %s / &uzone %x / cycle %d \n", 59 __FUNCTION__, local_cxy, this->core->lid, 60 syscall_str(service_num) , enter_uzone , (uint32_t)hal_get_cycles() ); 61 56 62 // call architecture independant syscall handler 57 63 retval = do_syscall( this, … … 62 68 service_num ); 63 69 64 regs_tbl[UZ_V0] = retval; 65 regs_tbl[UZ_V1] = this->errno; 66 regs_tbl[UZ_EPC] += 4; 70 // get pointer on exit_thread uzone, 71 // exit_thread can be different from enter_thread 72 this = CURRENT_THREAD; 73 exit_uzone = (uint32_t *)this->uzone; 67 74 68 #if(CONFIG_SYSCALL_DEBUG & 0x1) 69 printk("\n[DBG] %s : core[%x,%d] exit at cycle %d\n", 70 __FUNCTION__ , local_cxy , this->core->lid , hal_time_stamp() ); 71 #endif 75 // set syscall return value to uzone 76 exit_uzone[UZ_V0] = retval; 77 78 // update EPC in uzone 79 exit_uzone[UZ_EPC] += 4; 80 81 syscall_dmsg("\n[DBG] %s : core[%x,%d] exit from %s / &uzone %x / cycle %d \n", 82 __FUNCTION__, local_cxy, this->core->lid, 83 syscall_str(service_num) , exit_uzone , (uint32_t)hal_get_cycles() ); 72 84 73 85 }
Note: See TracChangeset
for help on using the changeset viewer.