Skip to content
Snippets Groups Projects
  • John Crispin's avatar
    01ca7a34
    brcm63xx/lzma-loader: fix O32 ABI conformance · 01ca7a34
    John Crispin authored
    
    According to the calling convention of the o32 ABI the caller
    function must reserve stack space for $a0-$a3 registers in case
    the callee needs to save its arguments.
    
    The assembly code of the loader does not reserve stack space for
    these registers thus when the 'loader_main' function needs to save
    its arguments, those will be stored in the 'workspace' area instead
    of the stack.
    
    Because the workspace area is also used by other part of the code, the
    saved register values gets overwritten and this often leads to failed
    kernel boots.
    
    Fix the code to reserve stack space for the registers to avoid this
    error.
    
    Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
    [noltari: apply the fix for brcm63xx too]
    Signed-off-by: default avatarÁlvaro Fernández Rojas <noltari@gmail.com>
    
    SVN-Revision: 48979
    01ca7a34
    History
    brcm63xx/lzma-loader: fix O32 ABI conformance
    John Crispin authored
    
    According to the calling convention of the o32 ABI the caller
    function must reserve stack space for $a0-$a3 registers in case
    the callee needs to save its arguments.
    
    The assembly code of the loader does not reserve stack space for
    these registers thus when the 'loader_main' function needs to save
    its arguments, those will be stored in the 'workspace' area instead
    of the stack.
    
    Because the workspace area is also used by other part of the code, the
    saved register values gets overwritten and this often leads to failed
    kernel boots.
    
    Fix the code to reserve stack space for the registers to avoid this
    error.
    
    Signed-off-by: default avatarGabor Juhos <juhosg@openwrt.org>
    [noltari: apply the fix for brcm63xx too]
    Signed-off-by: default avatarÁlvaro Fernández Rojas <noltari@gmail.com>
    
    SVN-Revision: 48979