VirtualBox

Changeset 1094 in vbox


Ignore:
Timestamp:
Feb 28, 2007 10:28:48 AM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
18989
Message:

Synced sync_seg (V86 changes)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/new/target-i386/helper.c

    r644 r1094  
    41164116    CPUX86State *savedenv = env;
    41174117    env = env1;
    4118     if (setjmp(env1->jmp_env) == 0)
     4118
     4119    if (env->eflags & X86_EFL_VM)
    41194120    {
    4120         if (seg_reg == R_CS)
     4121        load_seg_vm(seg_reg, selector);
     4122
     4123        env = savedenv;
     4124
     4125        /* Successful sync. */
     4126        env1->segs[seg_reg].newselector = 0;
     4127    }
     4128    else
     4129    {
     4130        if (setjmp(env1->jmp_env) == 0)
    41214131        {
    4122             uint32_t e1, e2;
    4123             load_segment(&e1, &e2, selector);
    4124             cpu_x86_load_seg_cache(env, R_CS, selector,
    4125                            get_seg_base(e1, e2),
    4126                            get_seg_limit(e1, e2),
    4127                            e2);
    4128         }
    4129         else
    4130             load_seg(seg_reg, selector);
    4131                 /* Successful sync. */
    4132         env->segs[seg_reg].newselector = 0;
    4133 
    4134         env = savedenv;
    4135     }
    4136     else
    4137     {
    4138         env = savedenv;
    4139 
    4140         /* Postpone sync until the guest uses the selector. */
    4141         env1->segs[seg_reg].selector    = selector;     /* hidden values are now incorrect, but will be resynced when this register is accessed. */
    4142         env1->segs[seg_reg].newselector = selector;
    4143         Log(("sync_seg: out of sync seg_reg=%d selector=%#x\n", seg_reg, selector));
    4144     }
     4132            if (seg_reg == R_CS)
     4133            {
     4134                uint32_t e1, e2;
     4135                load_segment(&e1, &e2, selector);
     4136                cpu_x86_load_seg_cache(env, R_CS, selector,
     4137                               get_seg_base(e1, e2),
     4138                               get_seg_limit(e1, e2),
     4139                               e2);
     4140            }
     4141            else
     4142                load_seg(seg_reg, selector);
     4143            env = savedenv;
     4144
     4145            /* Successful sync. */
     4146            env1->segs[seg_reg].newselector = 0;
     4147        }
     4148        else
     4149        {
     4150            env = savedenv;
     4151
     4152            /* Postpone sync until the guest uses the selector. */
     4153            env1->segs[seg_reg].selector    = selector;     /* hidden values are now incorrect, but will be resynced when this register is accessed. */
     4154            env1->segs[seg_reg].newselector = selector;
     4155            Log(("sync_seg: out of sync seg_reg=%d selector=%#x\n", seg_reg, selector));
     4156        }
     4157    }
     4158
    41454159}
    41464160
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette