Lines Matching refs:frame

82 x86_restart_syscall(iframe* frame)
89 // Get back the original system call number and modify the frame to
91 frame->ax = frame->orig_rax;
92 frame->ip -= 2;
121 get_signal_stack(Thread* thread, iframe* frame, struct sigaction* action,
127 && (frame->user_sp < thread->signal_stack_base
128 || frame->user_sp >= thread->signal_stack_base
138 return (uint8*)((frame->user_sp - 128 - spaceNeeded) & ~addr_t(0xf)) - 8;
298 iframe frame = {};
299 frame.type = IFRAME_TYPE_SYSCALL;
300 frame.si = (uint64)args2;
301 frame.di = (uint64)args1;
302 frame.ip = entry;
303 frame.cs = USER_CODE_SELECTOR;
304 frame.flags = X86_EFLAGS_RESERVED1 | X86_EFLAGS_INTERRUPT;
305 frame.sp = stackTop;
306 frame.ss = USER_DATA_SELECTOR;
309 x86_initial_return_to_userland(thread, &frame);
322 "restore signal frame" syscall with the (possibly modified) signal frame
345 iframe* frame = x86_get_current_iframe();
346 if (!IFRAME_IS_USER(frame)) {
352 signalFrameData->context.uc_mcontext.rax = frame->ax;
353 signalFrameData->context.uc_mcontext.rbx = frame->bx;
354 signalFrameData->context.uc_mcontext.rcx = frame->cx;
355 signalFrameData->context.uc_mcontext.rdx = frame->dx;
356 signalFrameData->context.uc_mcontext.rdi = frame->di;
357 signalFrameData->context.uc_mcontext.rsi = frame->si;
358 signalFrameData->context.uc_mcontext.rbp = frame->bp;
359 signalFrameData->context.uc_mcontext.r8 = frame->r8;
360 signalFrameData->context.uc_mcontext.r9 = frame->r9;
361 signalFrameData->context.uc_mcontext.r10 = frame->r10;
362 signalFrameData->context.uc_mcontext.r11 = frame->r11;
363 signalFrameData->context.uc_mcontext.r12 = frame->r12;
364 signalFrameData->context.uc_mcontext.r13 = frame->r13;
365 signalFrameData->context.uc_mcontext.r14 = frame->r14;
366 signalFrameData->context.uc_mcontext.r15 = frame->r15;
367 signalFrameData->context.uc_mcontext.rsp = frame->user_sp;
368 signalFrameData->context.uc_mcontext.rip = frame->ip;
369 signalFrameData->context.uc_mcontext.rflags = frame->flags;
371 if (frame->fpu != nullptr) {
372 memcpy((void*)&signalFrameData->context.uc_mcontext.fpu, frame->fpu,
380 signal_get_user_stack(frame->user_sp, &signalFrameData->context.uc_stack);
383 signalFrameData->syscall_restart_return_value = frame->orig_rax;
385 // Get the stack to use and copy the frame data to it.
386 uint8* userStack = get_signal_stack(thread, frame, action,
387 sizeof(*signalFrameData) + sizeof(frame->ip));
390 = (signal_frame_data*)(userStack + sizeof(frame->ip));
398 if (user_memcpy(userStack, &frame->ip, sizeof(frame->ip)) != B_OK)
406 // stack. First argument points to the frame data.
408 frame->user_sp = (addr_t)userStack;
410 frame->ip = commPageAddress[COMMPAGE_ENTRY_X86_SIGNAL_HANDLER]
413 frame->di = (addr_t)userSignalFrameData;
414 frame->flags &= ~(uint64)(X86_EFLAGS_TRAP | X86_EFLAGS_DIRECTION);
423 iframe* frame = x86_get_current_iframe();
425 frame->orig_rax = signalFrameData->syscall_restart_return_value;
426 frame->ax = signalFrameData->context.uc_mcontext.rax;
427 frame->bx = signalFrameData->context.uc_mcontext.rbx;
428 frame->cx = signalFrameData->context.uc_mcontext.rcx;
429 frame->dx = signalFrameData->context.uc_mcontext.rdx;
430 frame->di = signalFrameData->context.uc_mcontext.rdi;
431 frame->si = signalFrameData->context.uc_mcontext.rsi;
432 frame->bp = signalFrameData->context.uc_mcontext.rbp;
433 frame->r8 = signalFrameData->context.uc_mcontext.r8;
434 frame->r9 = signalFrameData->context.uc_mcontext.r9;
435 frame->r10 = signalFrameData->context.uc_mcontext.r10;
436 frame->r11 = signalFrameData->context.uc_mcontext.r11;
437 frame->r12 = signalFrameData->context.uc_mcontext.r12;
438 frame->r13 = signalFrameData->context.uc_mcontext.r13;
439 frame->r14 = signalFrameData->context.uc_mcontext.r14;
440 frame->r15 = signalFrameData->context.uc_mcontext.r15;
441 frame->user_sp = signalFrameData->context.uc_mcontext.rsp;
442 frame->ip = signalFrameData->context.uc_mcontext.rip;
443 frame->flags = (frame->flags & ~(uint64)X86_EFLAGS_USER_FLAGS)
450 frame->fpu = &thread->arch_info.fpu_state;
452 // The syscall return code overwrites frame->ax with the return value of
455 return frame->ax;