2018-03-17 10:03:52

by Cao jin

[permalink] [raw]
Subject: questions about header.S

Hi,

  I find two small questions which confuse me a little.

1.
# Check signature at end of setup
cmpl $0x5a5aaa55, setup_sig
jne setup_bad

setup_sig is defined in setup.ld, which points to the constant also
defined in setup.ld, so I don't figure out in which case they don't
equal and jump to setup_bad?

In my test, drop these 2 lines seems fine, system can boot without any
obvious error.

2.
# Zero the bss
movw $__bss_start, %di
movw $_end+3, %cx
xorl %eax, %eax
subw %di, %cx
shrw $2, %cx
rep; stosl

It is not a big deal, but I think replace "_end" with "__bss_end" make
more sense, and "_end" is already aligned to word length. And, there is
no other code use symbol "__bss_end". So I don't know is there any
reason to use "_end" here?

In my test, replace the 2nd line with:

movw $_end, %cx

or:

movw $__bss_end+3, %cx

are both fine.

--
Sincerely,
Cao jin




2018-03-21 09:25:19

by Cao jin

[permalink] [raw]
Subject: Re: questions about header.S

Dear Maintainers,

  Could you help to give a hint?
  Thanks in advance.

--
Sincerely,
Cao jin

On 03/17/2018 06:01 PM, Cao jin wrote:
> Hi,
>
>   I find two small questions which confuse me a little.
>
> 1.
> # Check signature at end of setup
> cmpl $0x5a5aaa55, setup_sig
> jne setup_bad
>
> setup_sig is defined in setup.ld, which points to the constant also
> defined in setup.ld, so I don't figure out in which case they don't
> equal and jump to setup_bad?
>
> In my test, drop these 2 lines seems fine, system can boot without any
> obvious error.
>
> 2.
> # Zero the bss
> movw $__bss_start, %di
> movw $_end+3, %cx
> xorl %eax, %eax
> subw %di, %cx
> shrw $2, %cx
> rep; stosl
>
> It is not a big deal, but I think replace "_end" with "__bss_end" make
> more sense, and "_end" is already aligned to word length. And, there is
> no other code use symbol "__bss_end". So I don't know is there any
> reason to use "_end" here?
>
> In my test, replace the 2nd line with:
>
> movw $_end, %cx
>
> or:
>
> movw $__bss_end+3, %cx
>
> are both fine.
>



2018-03-21 09:59:26

by Thomas Gleixner

[permalink] [raw]
Subject: Re: questions about header.S

On Wed, 21 Mar 2018, Cao jin wrote:
> On 03/17/2018 06:01 PM, Cao jin wrote:
> >   I find two small questions which confuse me a little.
> >
> > 1.
> > # Check signature at end of setup
> > cmpl $0x5a5aaa55, setup_sig
> > jne setup_bad
> >
> > setup_sig is defined in setup.ld, which points to the constant also
> > defined in setup.ld, so I don't figure out in which case they don't
> > equal and jump to setup_bad?

That's a lame sanity check to make sure that nothing overwrote the loader.

> > In my test, drop these 2 lines seems fine, system can boot without any
> > obvious error.

Sure it does as long as you have no corruption.

> > 2.
> > # Zero the bss
> > movw $__bss_start, %di
> > movw $_end+3, %cx
> > xorl %eax, %eax
> > subw %di, %cx
> > shrw $2, %cx
> > rep; stosl
> >
> > It is not a big deal, but I think replace "_end" with "__bss_end" make
> > more sense, and "_end" is already aligned to word length. And, there is
> > no other code use symbol "__bss_end". So I don't know is there any
> > reason to use "_end" here?

It doesn't matter at all. But its also pointless to change it.

Thanks,

tglx

2018-03-22 02:33:04

by Cao jin

[permalink] [raw]
Subject: Re: questions about header.S

Thanks very much for you hint!

On 03/21/2018 05:57 PM, Thomas Gleixner wrote:
> On Wed, 21 Mar 2018, Cao jin wrote:
>> On 03/17/2018 06:01 PM, Cao jin wrote:
>>>   I find two small questions which confuse me a little.
>>>
>>> 1.
>>> # Check signature at end of setup
>>> cmpl $0x5a5aaa55, setup_sig
>>> jne setup_bad
>>>
>>> setup_sig is defined in setup.ld, which points to the constant also
>>> defined in setup.ld, so I don't figure out in which case they don't
>>> equal and jump to setup_bad?
>
> That's a lame sanity check to make sure that nothing overwrote the loader.
>

I see.

>>> In my test, drop these 2 lines seems fine, system can boot without any
>>> obvious error.
>
> Sure it does as long as you have no corruption.
>
>>> 2.
>>> # Zero the bss
>>> movw $__bss_start, %di
>>> movw $_end+3, %cx
>>> xorl %eax, %eax
>>> subw %di, %cx
>>> shrw $2, %cx
>>> rep; stosl
>>>
>>> It is not a big deal, but I think replace "_end" with "__bss_end" make
>>> more sense, and "_end" is already aligned to word length. And, there is
>>> no other code use symbol "__bss_end". So I don't know is there any
>>> reason to use "_end" here?
>
> It doesn't matter at all. But its also pointless to change it.
>

It does not matter and is pointless to change for kernel itself. It just
may confuse a little for newbies who has interests.

--
Sincerely,
Cao jin