Lines Matching refs:frame

84 x86_restart_syscall(struct iframe* frame)
91 frame->ax = frame->orig_eax;
92 frame->dx = frame->orig_edx;
93 frame->ip -= 2;
112 get_signal_stack(Thread* thread, struct iframe* frame, struct sigaction* action)
117 && (frame->user_sp < thread->signal_stack_base
118 || frame->user_sp >= thread->signal_stack_base
123 return (uint8*)frame->user_sp;
233 iframe frame = {};
234 frame.type = IFRAME_TYPE_SYSCALL;
235 frame.gs = USER_DATA_SEG;
236 // frame.fs not used, we call x86_set_tls_context() on context switch
237 frame.es = USER_DATA_SEG;
238 frame.ds = USER_DATA_SEG;
239 frame.ip = entry;
240 frame.cs = USER_CODE_SEG;
241 frame.flags = X86_EFLAGS_RESERVED1 | X86_EFLAGS_INTERRUPT
243 frame.user_sp = stackTop;
244 frame.user_ss = USER_DATA_SEG;
247 x86_initial_return_to_userland(thread, &frame);
261 "restore signal frame" syscall with the (possibly modified) signal frame
284 struct iframe *frame = x86_get_current_iframe();
285 if (!IFRAME_IS_USER(frame)) {
298 signalFrameData->context.uc_mcontext.eip = frame->ip;
299 signalFrameData->context.uc_mcontext.eflags = frame->flags;
300 signalFrameData->context.uc_mcontext.eax = frame->ax;
301 signalFrameData->context.uc_mcontext.ecx = frame->cx;
302 signalFrameData->context.uc_mcontext.edx = frame->dx;
303 signalFrameData->context.uc_mcontext.ebp = frame->bp;
304 signalFrameData->context.uc_mcontext.esp = frame->user_sp;
305 signalFrameData->context.uc_mcontext.edi = frame->di;
306 signalFrameData->context.uc_mcontext.esi = frame->si;
307 signalFrameData->context.uc_mcontext.ebx = frame->bx;
311 signal_get_user_stack(frame->user_sp, &signalFrameData->context.uc_stack);
315 = (uint64)frame->orig_edx << 32 | frame->orig_eax;
319 uint8* userStack = get_signal_stack(thread, frame, action);
321 // copy the signal frame data onto the stack
329 // prepare the user stack frame for a function call to the signal handler
332 frame->ip, // return address
333 (addr_t)userSignalFrameData, // parameter: pointer to signal frame data
346 frame->user_sp = (addr_t)userStack;
347 frame->ip = x86_get_user_signal_handler_wrapper(
357 struct iframe* frame = x86_get_current_iframe();
361 frame->orig_eax = (uint32)signalFrameData->syscall_restart_return_value;
362 frame->orig_edx
365 frame->ip = signalFrameData->context.uc_mcontext.eip;
366 frame->flags = (frame->flags & ~(uint32)X86_EFLAGS_USER_FLAGS)
368 frame->ax = signalFrameData->context.uc_mcontext.eax;
369 frame->cx = signalFrameData->context.uc_mcontext.ecx;
370 frame->dx = signalFrameData->context.uc_mcontext.edx;
371 frame->bp = signalFrameData->context.uc_mcontext.ebp;
372 frame->user_sp = signalFrameData->context.uc_mcontext.esp;
373 frame->di = signalFrameData->context.uc_mcontext.edi;
374 frame->si = signalFrameData->context.uc_mcontext.esi;
375 frame->bx = signalFrameData->context.uc_mcontext.ebx;
381 return (int64)frame->ax | ((int64)frame->dx << 32);