Stefan Berger
2007-Jan-03 17:42 UTC
[Xen-devel] [PATCH] [Bochs/32-Bit BIOS] [1/3] 32bit gateway for the Bochs BIOS
This patch adds a 32bit gateway to the Bochs BIOS. The 32 bit code is compiled with gcc and linked into the hvmloader as a byte-array. Hvmloader allocates memory (rounded up to next 64kb) from the e820 table below 4GB, copies and relocates the 32bit code in the allocated area and copies a jumptable (located in a section ''.biosjumptable'') pointing to the ''exported'' functions into the Bochs BIOS''s memory area to link the two code sections. The memory area has been reserved and can be identified with the signature ''___JMPT''. In the Bochs BIOS only stub functions are provided. These load the index of a particular function in the jump table, switch to protected mode and call the function in the high memory area. The stack is prepared such that functions compiled by gcc can just pick the parameters from the stack as usual - this means that the 16bit real-mode return address is taken off the stack. The stub functions should have the same signature as those in 32bit space. For ABI compatibility reasons parameters inside the Bochs BIOS stubs should all be 32bit wide. This patch includes a test function that calls three gcc-compiled functions in the high memory area and displays their success status. Simple tests are done doing multiplication and addition of 32-bit numbers and reading and modification of a static variable. These functions test the interface and the relocation code. The test code is removed in patch part 3. Signed-off-by: Stefan Berger <stefanb@us.ibm.com> _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel