• Andrew Gerrand's avatar
    [release-branch.go1.2] cmd/5l, runtime: fix divide for profiling tracebacks on ARM · 4708b76f
    Andrew Gerrand authored
    ««« CL 19910044 / 9eb64f5ef3a6
    cmd/5l, runtime: fix divide for profiling tracebacks on ARM
    
    Two bugs:
    1. The first iteration of the traceback always uses LR when provided,
    which it is (only) during a profiling signal, but in fact LR is correct
    only if the stack frame has not been allocated yet. Otherwise an
    intervening call may have changed LR, and the saved copy in the stack
    frame should be used. Fix in traceback_arm.c.
    
    2. The division runtime call adds 8 bytes to the stack. In order to
    keep the traceback routines happy, it must copy the saved LR into
    the new 0(SP). Change
    
            SUB $8, SP
    
    into
    
            MOVW    0(SP), R11 // r11 is temporary, for use by linker
            MOVW.W  R11, -8(SP)
    
    to update SP and 0(SP) atomically, so that the traceback always
    sees a saved LR at 0(SP).
    
    Fixes #6681.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/19910044
    »»»
    
    R=golang-dev
    CC=golang-dev
    https://golang.org/cl/20170048
    4708b76f
noop.c 15.8 KB