On Sun, Aug 22, 2010 at 02:25:44PM +0300, Avi Kivity wrote:
On 08/22/2010 02:15 PM, Gleb Natapov wrote:
4 - Have the entry points switch immediately to 32-bit mode and call 32-bit unpaged code in 4G-2M+. Everything, for example the INT 13 code, would run in 32-bit mode from high memory.
IIRC this was discussed already. Some applications call BIOS from vm16 mode so switch to 32-bin is impossible.
Ugh. We could use the old 286 trick and reset the CPU to escape to real mode, but this isn't a viable solution (for example, how would we get back?)
It may not even be possible to reset the cpu as that may be blocked by the OS when the bios is in vm86 mode.
One could try invoking an SMI to get into 32bit mode, but that also has difficulties (eg, the OS could block that too, paging would have to be emulated, it could be a security problem).
Even with all its warts I think .code16gcc is the best route.