Re: Patch "i386: Relocatable kernel support" causes instant reboot

From: Vivek Goyal
Date: Thu Dec 21 2006 - 09:11:04 EST


On Thu, Dec 21, 2006 at 02:54:01PM +0100, Jean Delvare wrote:
> On Thu, 21 Dec 2006 03:32:33 -0700, Eric W. Biederman wrote:
> > Ok. There is almost enough for inference but here is a patch of stops
> > for setup.S let's see if one of those will stop the reboots.
> >
> > I have a strong feeling that we are going to find a tool chain issue,
> > but I'd like to find where we ware having problems before we declare
> > that to be the case.
> > (...)
> > diff --git a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S
> > index 06edf1c..2868020 100644
> > --- a/arch/i386/boot/setup.S
> > +++ b/arch/i386/boot/setup.S
> > @@ -795,6 +795,7 @@ a20_done:
> >
> > #endif /* CONFIG_X86_VOYAGER */
> > # set up gdt and idt and 32bit start address
> > +10: jmp 10b
>
> Locked here, removed.
>
> Out of curiosity, what does the "b" stand for?
>

I think one can have multiple labels named as 10: so we need to specify
which one do you want to jump to. Either forward one (f) or backward
one (b).

[..]
>
> Locked here, removed.
>
> > # Jump to the 32bit entry point
> > jmpl *(code32_start - start + (DELTA_INITSEG << 4))(%esi)
> > .code16
>
> Which brought me to the original situation, where unsurprisingly the
> reboot happened. So the problem is located after label 14. Does it help?
>

Ok. so indirect jump seems to be having problem. On my machine disassembly
of setup.o show following.

ff a6 14 02 00 00 jmp *0x214(%esi)

This seems to be fine as 0x14 is the offset of code32_start, and
((DELTA_INITSEG) << 4) is 0x200. How does it look like on your machine?

Thanks
Vivek

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/