Lines Matching refs:frame

85 x86_restart_syscall(struct iframe* frame)
92 frame->ax = frame->orig_eax;
93 frame->dx = frame->orig_edx;
94 frame->ip -= 2;
125 get_signal_stack(Thread* thread, struct iframe* frame, struct sigaction* action,
131 && (frame->user_sp < thread->signal_stack_base
132 || frame->user_sp >= thread->signal_stack_base
138 return (uint8*)((frame->user_sp - spaceNeeded) & ~addr_t(0xf)) - 4;
246 iframe frame = {};
247 frame.type = IFRAME_TYPE_SYSCALL;
248 frame.gs = USER_DATA_SELECTOR;
249 // frame.fs not used, we call x86_set_tls_context() on context switch
250 frame.es = USER_DATA_SELECTOR;
251 frame.ds = USER_DATA_SELECTOR;
252 frame.ip = entry;
253 frame.cs = USER_CODE_SELECTOR;
254 frame.flags = X86_EFLAGS_RESERVED1 | X86_EFLAGS_INTERRUPT;
255 frame.user_sp = stackTop;
256 frame.user_ss = USER_DATA_SELECTOR;
259 x86_initial_return_to_userland(thread, &frame);
273 "restore signal frame" syscall with the (possibly modified) signal frame
296 struct iframe *frame = x86_get_current_iframe();
297 if (!IFRAME_IS_USER(frame)) {
310 signalFrameData->context.uc_mcontext.eip = frame->ip;
311 signalFrameData->context.uc_mcontext.eflags = frame->flags;
312 signalFrameData->context.uc_mcontext.eax = frame->ax;
313 signalFrameData->context.uc_mcontext.ecx = frame->cx;
314 signalFrameData->context.uc_mcontext.edx = frame->dx;
315 signalFrameData->context.uc_mcontext.ebp = frame->bp;
316 signalFrameData->context.uc_mcontext.esp = frame->user_sp;
317 signalFrameData->context.uc_mcontext.edi = frame->di;
318 signalFrameData->context.uc_mcontext.esi = frame->si;
319 signalFrameData->context.uc_mcontext.ebx = frame->bx;
323 signal_get_user_stack(frame->user_sp, &signalFrameData->context.uc_stack);
327 = (uint64)frame->orig_edx << 32 | frame->orig_eax;
332 uint8* userStack = get_signal_stack(thread, frame, action,
335 // copy the signal frame data onto the stack
343 // prepare the user stack frame for a function call to the signal handler
345 stackFrame[0] = frame->ip;
347 // parameter: pointer to signal frame data
358 frame->user_sp = (addr_t)userStack;
359 frame->ip = x86_get_user_signal_handler_wrapper(
362 frame->flags &= ~(X86_EFLAGS_TRAP | X86_EFLAGS_DIRECTION);
371 struct iframe* frame = x86_get_current_iframe();
375 frame->orig_eax = (uint32)signalFrameData->syscall_restart_return_value;
376 frame->orig_edx
379 frame->ip = signalFrameData->context.uc_mcontext.eip;
380 frame->flags = (frame->flags & ~(uint32)X86_EFLAGS_USER_FLAGS)
382 frame->ax = signalFrameData->context.uc_mcontext.eax;
383 frame->cx = signalFrameData->context.uc_mcontext.ecx;
384 frame->dx = signalFrameData->context.uc_mcontext.edx;
385 frame->bp = signalFrameData->context.uc_mcontext.ebp;
386 frame->user_sp = signalFrameData->context.uc_mcontext.esp;
387 frame->di = signalFrameData->context.uc_mcontext.edi;
388 frame->si = signalFrameData->context.uc_mcontext.esi;
389 frame->bx = signalFrameData->context.uc_mcontext.ebx;
395 return (int64)frame->ax | ((int64)frame->dx << 32);