On Sun, Oct 20, 2013 at 07:49:55PM +0100, David Laight wrote: > On Sat, Oct 19, 2013 at 08:16:16PM -0400, Christos Zoulas wrote: > > Module Name: src > > Committed By: christos > > Date: Sun Oct 20 00:16:16 UTC 2013 > > > > Modified Files: > > src/sys/arch/i386/stand/pxeboot: pxe_call.S > > > > Log Message: > > Move an instruction above .code16 so that it produces an R_386_32 instead > > of an R_386_16 relocation, which is truncated to fit. XXX: untested. > > Broken - it would have to be moved to before the call to prot_to_real.
Actually, if the value is more that 2^16 it is all broken anyway. When I changed the disk /boot so that it could exceed 64k I didn't change pxeboot (because I couldn't test it). >From the code in pxe_call.S it looks as though %cs, %ds, %es (and maybe %ss) all have to be the same. If you look at the disk (etc) bios calls you'll see that they set %ds/%es correctly for the 32bit (well 20bit) linear address - which this code doesn't do. So the value has to fit in an R_386_16 relocation. If it doesn't, it migth explain some of the panics in the pxe code. David -- David Laight: da...@l8s.co.uk