Skip to content
Snippets Groups Projects
Forked from Reform / reform-boundary-uboot
Source project has a limited visibility.
  • Albert ARIBAUD's avatar
    adc421e4
    arm: move gd handling outside of C code · adc421e4
    Albert ARIBAUD authored
    
    As of gcc 5.2.1 for Thumb-1, it is not possible any
    more to assign gd from C code, as gd is mapped to r9,
    and r9 may now be saved in the prolog sequence, and
    restored in the epilog sequence, of any C functions.
    
    Therefore arch_setup_gd(), which is supposed to set
    r9, may actually have no effect, causing U-Boot to
    use a bad address to access GD.
    
    Fix this by never calling arch_setup_gd() for ARM,
    and instead setting r9 in arch/arm/lib/crt0.S, to
    the value returned by board_init_f_alloc_reserve().
    
    Signed-off-by: default avatarAlbert ARIBAUD <albert.u.boot@aribaud.net>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
    adc421e4
    History
    arm: move gd handling outside of C code
    Albert ARIBAUD authored
    
    As of gcc 5.2.1 for Thumb-1, it is not possible any
    more to assign gd from C code, as gd is mapped to r9,
    and r9 may now be saved in the prolog sequence, and
    restored in the epilog sequence, of any C functions.
    
    Therefore arch_setup_gd(), which is supposed to set
    r9, may actually have no effect, causing U-Boot to
    use a bad address to access GD.
    
    Fix this by never calling arch_setup_gd() for ARM,
    and instead setting r9 in arch/arm/lib/crt0.S, to
    the value returned by board_init_f_alloc_reserve().
    
    Signed-off-by: default avatarAlbert ARIBAUD <albert.u.boot@aribaud.net>
    Reviewed-by: default avatarSimon Glass <sjg@chromium.org>