Lines Matching refs:frame

107 void trap(struct trapframe *frame);
108 void syscall(struct trapframe *frame);
212 * routines that prepare a suitable stack frame, and restore this
213 * frame after the exception has been processed.
217 trap(struct trapframe *frame)
235 type = frame->tf_trapno;
238 ("trap: interrupts enabled, type %d frame %p", type, frame));
255 trap_fatal(frame, 0);
269 (*pmc_intr)(frame) != 0)
288 dtrace_trap_func != NULL && (*dtrace_trap_func)(frame, type))
307 if ((frame->tf_eflags & PSL_I) == 0 && TRAPF_USERMODE(frame) &&
320 frame->tf_eip != (int)cpu_switch_load_gs)
323 if (TRAPF_USERMODE(frame) && (curpcb->pcb_flags & PCB_VM86CALL) == 0) {
327 td->td_frame = frame;
328 addr = frame->tf_eip;
340 if (trap_user_dtrace(frame, &dtrace_pid_probe_ptr))
378 if (frame->tf_eflags & PSL_VM) {
379 signo = vm86_emulate((struct vm86frame *)frame);
412 pf = trap_pfault(frame, true, eva, &signo, &ucode);
420 type = frame->tf_trapno = T_PRIVINFLT;
447 nmi_handle_intr(type, frame);
486 (void)trap_user_dtrace(frame, &dtrace_return_probe_ptr);
497 (void)trap_pfault(frame, false, eva, NULL, NULL);
514 trap_fatal(frame, 0);
524 if (frame->tf_eflags & PSL_VM) {
525 signo = vm86_emulate((struct vm86frame *)frame);
535 vm86_trap((struct vm86frame *)frame);
552 if (frame->tf_eip == (int)cpu_switch_load_gs) {
576 * does not push %esp on the trap frame,
584 if (frame->tf_eip == (int)doreti_iret + setidt_disp) {
585 frame->tf_eip = (int)doreti_iret_fault +
592 if (frame->tf_eip == (int)doreti_popl_ds +
594 frame->tf_eip = (int)doreti_popl_ds_fault +
598 if (frame->tf_eip == (int)doreti_popl_es +
600 frame->tf_eip = (int)doreti_popl_es_fault +
604 if (frame->tf_eip == (int)doreti_popl_fs +
606 frame->tf_eip = (int)doreti_popl_fs_fault +
611 frame->tf_eip = (int)curpcb->pcb_onfault;
626 if (frame->tf_eflags & PSL_NT) {
627 frame->tf_eflags &= ~PSL_NT;
674 if (frame->tf_eip ==
676 frame->tf_eip == (uintptr_t)IDTVEC(bpt) +
678 frame->tf_eip == (uintptr_t)IDTVEC(dbg) +
690 if (kdb_trap(type, dr6, frame))
704 nmi_handle_intr(type, frame);
709 trap_fatal(frame, eva);
722 p->p_pid, p->p_comm, signo, frame->tf_err, ucode, type,
723 addr, frame->tf_ss, frame->tf_esp, frame->tf_cs,
724 frame->tf_eip, frame->tf_eax,
725 fubyte((void *)(frame->tf_eip + 0)),
726 fubyte((void *)(frame->tf_eip + 1)),
727 fubyte((void *)(frame->tf_eip + 2)),
728 fubyte((void *)(frame->tf_eip + 3)),
729 fubyte((void *)(frame->tf_eip + 4)),
730 fubyte((void *)(frame->tf_eip + 5)),
731 fubyte((void *)(frame->tf_eip + 6)),
732 fubyte((void *)(frame->tf_eip + 7)));
738 userret(td, frame);
757 trap_pfault(struct trapframe *frame, bool usermode, vm_offset_t eva,
811 trap_fatal(frame, eva);
836 trap_fatal(frame, eva);
847 trap_fatal(frame, eva);
855 if (frame->tf_err & PGEX_RSV) {
856 trap_fatal(frame, eva);
864 if (frame->tf_err & PGEX_W)
866 else if ((frame->tf_err & PGEX_I) && pg_nx != 0)
876 PMC_SOFT_CALL_TF( , , page_fault, all, frame);
879 frame);
882 frame);
891 frame->tf_eip = (int)curpcb->pcb_onfault;
894 trap_fatal(frame, eva);
899 trap_fatal(struct trapframe *frame, vm_offset_t eva)
908 code = frame->tf_err;
909 type = frame->tf_trapno;
910 sdtossd(&gdt[IDXSEL(frame->tf_cs & 0xffff)].sd, &softseg);
913 frame->tf_eflags & PSL_VM ? "vm86" :
914 ISPL(frame->tf_cs) == SEL_UPL ? "user" : "kernel");
934 frame->tf_cs & 0xffff, frame->tf_eip);
935 if (TF_HAS_STACKREGS(frame)) {
936 ss = frame->tf_ss & 0xffff;
937 esp = frame->tf_esp;
940 esp = (int)&frame->tf_esp;
943 printf("frame pointer = 0x%x:0x%x\n", ss, frame->tf_ebp);
950 if (frame->tf_eflags & PSL_T)
952 if (frame->tf_eflags & PSL_I)
954 if (frame->tf_eflags & PSL_NT)
956 if (frame->tf_eflags & PSL_RF)
958 if (frame->tf_eflags & PSL_VM)
960 printf("IOPL = %d\n", (frame->tf_eflags & PSL_IOPL) >> 12);
967 frame->tf_err = eva; /* smuggle fault address to ddb */
968 handled = kdb_trap(type, 0, frame);
969 frame->tf_err = code; /* restore error code */
989 trap_user_dtrace(struct trapframe *frame, int (**hookp)(struct trapframe *))
996 return ((hook)(frame) == 0);
1003 * a frame for a trap/exception onto the stack. This usually occurs
1046 struct trapframe *frame;
1057 frame = td->td_frame;
1061 if (__predict_false(frame->tf_cs == 7 && frame->tf_eip == 2)) {
1064 * frame to what it would be for a direct int 0x80 instead
1067 error = fueword32((void *)frame->tf_esp, &eip);
1070 cs = fuword16((void *)(frame->tf_esp + sizeof(u_int32_t)));
1075 * Unwind in-kernel frame after all stack frame pieces
1078 frame->tf_eip = eip;
1079 frame->tf_cs = cs;
1080 frame->tf_esp += 2 * sizeof(u_int32_t);
1081 frame->tf_err = 7; /* size of lcall $7,$0 */
1085 sa->code = frame->tf_eax;
1087 params = (caddr_t)frame->tf_esp + sizeof(uint32_t);
1126 td->td_retval[1] = frame->tf_edx;
1136 * essentially treated as a trap by reusing the frame layout.
1139 syscall(struct trapframe *frame)
1146 if (!(TRAPF_USERMODE(frame) &&
1153 orig_tf_eflags = frame->tf_eflags;
1156 td->td_frame = frame;
1164 frame->tf_eflags &= ~PSL_T;
1168 ksi.ksi_addr = (void *)frame->tf_eip;