[vbox-dev] [PATCH] Some 64-bit fixes

Gwenole Beauchesne gbeauchesne at mandriva.com
Mon Feb 5 16:17:26 GMT 2007


Hi,

> Thanks for the patches. However it would help if you described briefly
> what problems the different changes attempt to fix and in some cases
> explain why they fix it...

OK, sorry, there were 4 parts:

- cpuid() stuff. I actually got a SIGSEGV when I built vbox in 
BUILD_TYPE=release (default) mode. I have not really looked at the 
generated code but rather reimplemented it the way I was used too. ;-) 
I believe the constraint should have used "+r" to indicate an 
input/output register for the "=r" (*(uint32_t *)pvEBX) part.

- For the QEMU part. I also got a SIGSEGV in either 
REMR3EmulateInstruction() or REMR3Run(). By binary code pattern 
matching, I determined that the offending code was actually cpu_exec() 
where I could realise the callee-saved registers (here, %rbx) where not 
saved completely (the upper-half 32-bit were trashed away).

- The xpidl_util.c change was motivated from code inspection after 
looking at the build logs (warnings). strdup() was not defined, thus 
defaulting to (int) return which can yield to pointer truncation. 
Actually, I have not experienced the problem but it was my first 
attempt to review all pending warnings when building on x86_64.

- The last part was obvious since the PIDs printed out in the VBox 
error box looked the same so one of them was likely 64-bit with 
upper-bits non-zero as a NIL_RTPROCESS would be. The correct fix would 
have been to make RTPROCESS an integer type exactly as large as an 
ULONG (which turns out to use the Win32 semantics, i.e. a 32-bit value).

Thank you for VirtualBox and its decently commented code. ;-)

Regards,
Gwenolé.




More information about the vbox-dev mailing list