On 11/08/2016 03:32 AM, Cédric Schieli wrote:

2016-11-08 4:14 GMT+01:00 Stephen Warren <swar...@wwwdotorg.org
<mailto:swar...@wwwdotorg.org>>:

        Please note that for this to work the U-Boot binary must be tagged
        with a recent version of the mkknlimg script found in the Rasperry
        Fundation's kernel tree:

        <kernel>/scripts/mkknlimg --dtok <uboot>/u-boot.bin /boot/u-boot.bin

        [1]
        https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018
        <https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018>

        diff --git a/board/raspberrypi/rpi/rpi.c
        b/board/raspberrypi/rpi/rpi.c


        +#ifdef CONFIG_ARM64
        +void save_boot_params(unsigned long dtb)
        +#else
        +void save_boot_params(unsigned long r0, unsigned long r1,
        unsigned long dtb)
        +#endif
        +{
        +       fw_dtb_pointer = dtb;
        +       save_boot_params_ret();
        +}


    I think you need to write that function in assembly. This "function"
    is called very early during U-Boot startup, before any stack pointer
    is set up. You can't guarantee that a function written in C won't
    attempt to use the stack, although admittedly with the current code,
    Makefile, and the Ubuntu compilers, it just happens not to.


Is inline assembly enough to guarantee that, or is it mandatory to
revert to an assembly file ?

The entire function needs to be in assembly, since the compiler is free to touch the stack during function prologue/epilogue too.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to