Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/arch/i386/stand/pxeboot

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 Laight:

Home | Main Index | Thread Index | Old Index