On May 14, 2013 3:02 PM, "Goswin von Brederlow" <[email protected]> wrote:
>
> On Mon, May 13, 2013 at 03:37:32PM +0000, Leif Lindholm wrote:
> > The import into the collaborative branch discarded the call to
> > get_real_bss_start before starting the BSS zeroing operation.
> >
> > While get_real_bss_start might have been a bit of an ugly hack,
> > simply discarding it means that we now end up doing unaligned
> > STR operations, and any platform with MMU disabled fails to boot.
> >
> > The attached patch prepends a bytewise zeroing loop until
> > word-aligned, and then continue as before.
> >
> > /
> >     Leif
>
> > === modified file 'grub-core/kern/arm/uboot/startup.S'
> > --- grub-core/kern/arm/uboot/startup.S        2013-05-03 13:07:39 +0000
> > +++ grub-core/kern/arm/uboot/startup.S        2013-05-13 14:59:43 +0000
> > @@ -100,7 +100,13 @@
> >       @ Since we _are_ the C run-time, we need to manually zero the BSS
> >       @ region before continuing
> >       ldr     r0, =EXT_C(__bss_start) @ zero from here
> > -     ldr     r1, =EXT_C(_end)                @ to here
> > +     @ If unaligned, bytewise zero until base address aligned.
> > +     mov     r1, #0
> > +1:   tst     r0, #3
> > +     beq     2f
> > +     strb    r1, [r0], #1
> > +     b       1b
> > +2:   ldr     r1, =EXT_C(_end)                @ to here
> >       mov     r2, #0
> >  1:   str     r2, [r0], #4
> >       cmp     r0, r1
>
> What if I have a 1 byte BSS aligned at 1 byte? You would zero 3 bytes
> and overshoot _end and then what happens after the cmp in the last line?
>
Abaolutely irrelevant. our BSS isn't that small

> MfG
>         Goswin
>
> _______________________________________________
> Grub-devel mailing list
> [email protected]
> https://lists.gnu.org/mailman/listinfo/grub-devel
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to