Lines Matching defs:frame

166 static void WriteRegisters(iframe* frame)
168 uint64* regs = &frame->ra;
208 WriteTrapInfo(iframe* frame)
211 dprintf("STrap("); WriteCause(frame->cause); dprintf(")\n");
212 dprintf(" sstatus: "); WriteSstatus(frame->status); dprintf("\n");
216 dprintf(" stval: 0x%" B_PRIx64 "\n", frame->tval);
220 WriteRegisters(frame);
243 // DumpMemory((uint64*)frame->sp, thread_get_current_thread()->kernel_stack_top - frame->sp);
353 STrap(iframe* frame)
358 iframe oldFrame = *frame;
364 uint64 newVal = ((int64*)frame)[i];
374 if (frame->epc == 0)
378 switch (frame->cause) {
382 if (SetAccessedFlags(Stval(), frame->cause == causeStorePageFault))
387 if (SstatusReg{.val = frame->status}.spp == modeU) {
388 thread_get_current_thread()->arch_info.userFrame = frame;
389 thread_get_current_thread()->arch_info.oldA0 = frame->a0;
393 if (SstatusReg{.val = frame->status}.spp == modeU) {
409 frame->a0 = thread_get_current_thread()->arch_info.oldA0;
410 frame->epc -= 4;
416 switch (frame->cause) {
419 frame->epc);
428 if (SstatusReg{.val = frame->status}.spp == modeU) {
451 debug_set_page_fault_info(stval, frame->epc,
452 (frame->cause == causeStorePageFault)
454 frame->epc = cpu->fault_handler;
455 frame->sp = cpu->fault_handler_stack_pointer;
462 debug_set_page_fault_info(stval, frame->epc,
463 frame->cause == causeStorePageFault
465 frame->epc = (addr_t)thread->fault_handler;
471 "address %p from ip %p\n", (void*)stval, (void*)frame->epc);
475 if (SstatusReg{.val = frame->status}.pie == 0) {
480 if (frame->epc != handler) {
481 frame->epc = handler;
491 vm_page_fault(stval, frame->epc, frame->cause == causeStorePageFault,
492 frame->cause == causeExecPageFault,
493 SstatusReg{.val = frame->status}.spp == modeU, &newIP);
496 frame->epc = newIP;
522 frame->epc += 4; // skip ecall
523 uint64 syscall = frame->t0;
527 memcpy(&args[0], &frame->a0,
530 if (status_t res = user_memcpy(&args[8], (void*)frame->sp,
534 frame->a0 = res;
552 frame->a0 = returnValue;