Revision ed2dcdf6
b/linux-user/signal.c | ||
---|---|---|
536 | 536 |
err |= __put_user(env->eflags, &sc->eflags); |
537 | 537 |
err |= __put_user(env->regs[R_ESP], &sc->esp_at_signal); |
538 | 538 |
err |= __put_user(env->segs[R_SS], (unsigned int *)&sc->ss); |
539 |
#if 0 |
|
540 |
tmp = save_i387(fpstate); |
|
541 |
if (tmp < 0) |
|
542 |
err = 1; |
|
543 |
else |
|
544 |
err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate); |
|
545 |
#else |
|
546 |
err |= __put_user(0, &sc->fpstate); |
|
547 |
#endif |
|
539 |
|
|
540 |
cpu_x86_fsave(env, (void *)fpstate, 1); |
|
541 |
fpstate->status = fpstate->sw; |
|
542 |
err |= __put_user(0xffff, &fpstate->magic); |
|
543 |
err |= __put_user(fpstate, &sc->fpstate); |
|
544 |
|
|
548 | 545 |
/* non-iBCS2 extensions.. */ |
549 | 546 |
err |= __put_user(mask, &sc->oldmask); |
550 | 547 |
err |= __put_user(env->cr2, &sc->cr2); |
... | ... | |
721 | 718 |
{ |
722 | 719 |
unsigned int err = 0; |
723 | 720 |
|
724 |
|
|
725 |
|
|
726 |
#define COPY(x) err |= __get_user(regs->x, &sc->x) |
|
727 |
|
|
728 |
#define COPY_SEG(seg) \ |
|
729 |
{ unsigned short tmp; \ |
|
730 |
err |= __get_user(tmp, &sc->seg); \ |
|
731 |
regs->x##seg = tmp; } |
|
732 |
|
|
733 |
#define COPY_SEG_STRICT(seg) \ |
|
734 |
{ unsigned short tmp; \ |
|
735 |
err |= __get_user(tmp, &sc->seg); \ |
|
736 |
regs->x##seg = tmp|3; } |
|
737 |
|
|
738 |
#define GET_SEG(seg) \ |
|
739 |
{ unsigned short tmp; \ |
|
740 |
err |= __get_user(tmp, &sc->seg); \ |
|
741 |
loadsegment(seg,tmp); } |
|
742 |
|
|
743 | 721 |
cpu_x86_load_seg(env, R_GS, lduw(&sc->gs)); |
744 | 722 |
cpu_x86_load_seg(env, R_FS, lduw(&sc->fs)); |
745 | 723 |
cpu_x86_load_seg(env, R_ES, lduw(&sc->es)); |
... | ... | |
764 | 742 |
// regs->orig_eax = -1; /* disable syscall checks */ |
765 | 743 |
} |
766 | 744 |
|
767 |
#if 0 |
|
768 | 745 |
{ |
769 | 746 |
struct _fpstate * buf; |
770 |
err |= __get_user(buf, &sc->fpstate);
|
|
747 |
buf = (void *)ldl(&sc->fpstate);
|
|
771 | 748 |
if (buf) { |
749 |
#if 0 |
|
772 | 750 |
if (verify_area(VERIFY_READ, buf, sizeof(*buf))) |
773 | 751 |
goto badframe; |
774 |
err |= restore_i387(buf); |
|
752 |
#endif |
|
753 |
cpu_x86_frstor(env, (void *)buf, 1); |
|
775 | 754 |
} |
776 | 755 |
} |
777 |
#endif |
|
756 |
|
|
778 | 757 |
*peax = ldl(&sc->eax); |
779 | 758 |
return err; |
780 | 759 |
#if 0 |
Also available in: Unified diff