/* Place as many of the user's current register windows *onthestackthatwecan.Evenifthe%spisunaligned *westillcopythewindowthere,theonlycasethatwedon't *succeedisifthe%sppointstoabummappingaltogether. *setup_frame()anddo_sigreturn()usethisbeforeshifting *theuserstackaround.Futureinstructionandhardware *bugworkaroundroutineswillneedthisfunctionalityas *well.
*/ void synchronize_user_stack(void)
{ struct thread_info *tp = current_thread_info(); int window;
flush_user_windows(); if(!tp->w_saved) return;
/* Ok, there is some dirty work to do. */ for(window = tp->w_saved - 1; window >= 0; window--) { unsignedlong sp = tp->rwbuf_stkptrs[window];
/* Ok, let it rip. */ if (copy_to_user((char __user *) sp, &tp->reg_window[window], sizeof(struct reg_window32))) continue;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.