Changeset 1078 in vbox for trunk/src/recompiler/target-i386
- Timestamp:
- Feb 28, 2007 8:24:49 AM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18970
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/recompiler/target-i386/helper.c
r1 r1078 3730 3730 CPUX86State *savedenv = env; 3731 3731 env = env1; 3732 #ifdef VBOX 3733 if ( setjmp(env1->jmp_env) == 0)3732 3733 if (env->eflags & X86_EFL_VM) 3734 3734 { 3735 #endif 3736 if (seg_reg == R_CS) 3737 { 3738 uint32_t e1, e2; 3739 load_segment(&e1, &e2, selector); 3740 cpu_x86_load_seg_cache(env, R_CS, selector, 3741 get_seg_base(e1, e2), 3742 get_seg_limit(e1, e2), 3743 e2); 3744 } 3745 else 3746 load_seg(seg_reg, selector); 3747 env = savedenv; 3748 3749 #ifdef VBOX 3735 load_seg_vm(seg_reg, selector); 3736 3737 env = savedenv; 3738 3750 3739 /* Successful sync. */ 3751 3740 env1->segs[seg_reg].newselector = 0; 3752 3741 } 3753 else 3742 else 3754 3743 { 3755 env = savedenv; 3756 3757 /* Postpone sync until the guest uses the selector. */ 3758 env1->segs[seg_reg].selector = selector; /* hidden values are now incorrect, but will be resynced when this register is accessed. */ 3759 env1->segs[seg_reg].newselector = selector; 3744 if (setjmp(env1->jmp_env) == 0) 3745 { 3746 if (seg_reg == R_CS) 3747 { 3748 uint32_t e1, e2; 3749 load_segment(&e1, &e2, selector); 3750 cpu_x86_load_seg_cache(env, R_CS, selector, 3751 get_seg_base(e1, e2), 3752 get_seg_limit(e1, e2), 3753 e2); 3754 } 3755 else 3756 load_seg(seg_reg, selector); 3757 env = savedenv; 3758 3759 /* Successful sync. */ 3760 env1->segs[seg_reg].newselector = 0; 3761 } 3762 else 3763 { 3764 env = savedenv; 3765 3766 /* Postpone sync until the guest uses the selector. */ 3767 env1->segs[seg_reg].selector = selector; /* hidden values are now incorrect, but will be resynced when this register is accessed. */ 3768 env1->segs[seg_reg].newselector = selector; 3760 3769 #ifdef VBOX_STRICT 3761 printf("sync_seg: out of sync seg_reg=%d selector=%#x\n", seg_reg, selector);3762 #endif 3763 }3764 #endif 3770 printf("sync_seg: out of sync seg_reg=%d selector=%#x\n", seg_reg, selector); 3771 #endif 3772 } 3773 } 3765 3774 3766 3775 } … … 3777 3786 CPUX86State *saved_env = env; 3778 3787 target_ulong saved_T0 = T0; 3779 #ifdef VBOX3780 3788 if (setjmp(env1->jmp_env) == 0) 3781 3789 { 3782 #endif3783 3790 env = env1; 3784 3791 T0 = selector; … … 3786 3793 T0 = saved_T0; 3787 3794 env = saved_env; 3788 #ifdef VBOX3789 3795 } 3790 3796 else … … 3796 3802 #endif 3797 3803 } 3798 #endif3799 3804 } 3800 3805 … … 4169 4174 //***************************************************************************** 4170 4175 4171 #endif 4172 4176 #endif /* VBOX */ 4177
Note:
See TracChangeset
for help on using the changeset viewer.