On Fri, Feb 02, 2007 at 10:24:28PM +0000, Thiemo Seufer wrote: > Juergen Lock wrote: > > > > Ok Jung-uk Kim found the following fix: (Thanx!) > > > > > > > > --- qemu/cpu-exec.c.orig Wed Jan 31 16:58:03 2007 > > > > +++ qemu/cpu-exec.c Wed Jan 31 17:08:11 2007 > > > > @@ -226,9 +226,9 @@ > > > > > > > > int cpu_exec(CPUState *env1) > > > > { > > > > - int saved_T0, saved_T1; > > > > + long saved_T0, saved_T1; > > > > #if defined(reg_T2) > > > > - int saved_T2; > > > > + long saved_T2; > > > > > > I used target_ulong instead. > > > > Isn't that 32 bit for 32 bit targets? Then it wouldn't fix the bug, > > the problem happened for 32 bit guests (i386-softmmu) on 64 bit hosts > > (FreeBSD-current/amd64), there the upper half of rbx which held a > > pointer in the calling function was lost... > > Apparently I miss something here. If T0 is a (32bit) target_ulong, > why does saving it to a (32bit) target_ulong and restoring it from > there cause any trouble?
Hmm. All I can say is the upper half of rbx (which holds T0) gets spilled on FreeBSD-current/amd64 hosts unless saving and restoring the full 64 bit of it... _______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel