if (single_stepping)
mc->gregs[REG_EFL] |= X86_EFLAGS_TF; else
mc->gregs[REG_EFL] &= ~X86_EFLAGS_TF;
}
#ifdef CONFIG_X86_32 struct _xstate_64 { struct _fpstate_64 fpstate; struct _header xstate_hdr; struct _ymmh_state ymmh; /* New processor state extensions go here: */
};
/* Not quite the right structures as these contain more information */ int um_i387_from_fxsr(struct _fpstate_32 *i387, conststruct _fpstate_64 *fxsave); int um_fxsr_from_i387(struct _fpstate_64 *fxsave, conststruct _fpstate_32 *from); #else #define _xstate_64 _xstate #endif
/* Assume floating point registers are on the same page */
res = (void *)(((unsignedlong)mcontext->fpregs &
(UM_KERN_PAGE_SIZE - 1)) +
(unsignedlong)&data->sigstack[0]);
#ifdef __i386__ /* * On x86, the GDT entries are updated by arch_set_tls.
*/
/* Store the i387 legacy FP registers which the host will use */ if (um_i387_from_fxsr(fpstate_stub, (void *)®s->fp)) return -EINVAL; #else /* * On x86_64, we need to sync the FS_BASE/GS_BASE registers using the * arch specific data.
*/ if (data->arch_data.fs_base != regs->gp[FS_BASE / sizeof(unsignedlong)]) {
data->arch_data.fs_base = regs->gp[FS_BASE / sizeof(unsignedlong)];
data->arch_data.sync |= STUB_SYNC_FS_BASE;
} if (data->arch_data.gs_base != regs->gp[GS_BASE / sizeof(unsignedlong)]) {
data->arch_data.gs_base = regs->gp[GS_BASE / sizeof(unsignedlong)];
data->arch_data.sync |= STUB_SYNC_GS_BASE;
} #endif
return 0;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-04-28)
¤
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.