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