• Matt Fleming's avatar
    sh: Check for return_to_handler when unwinding the stack · 60339fad
    Matt Fleming authored
    When CONFIG_FUNCTION_GRAPH_TRACER is enabled the function graph tracer
    may patch return addresses on the stack with the address of
    return_to_handler(). This really confuses the DWARF unwinder because it
    will try find the caller of return_to_handler(), not the caller of the
    real return address.
    
    So teach the DWARF unwinder how to find the real return address whenever
    it encounters return_to_handler().
    
    This patch does not cope very well when multiple return addresses on the
    stack have been patched. To make it work properly it would require state
    to track how many return_to_handler()'s have been seen so that we'd know
    where to look in current->curr_ret_stack[]. So for now, instead of
    trying to handle this, just moan if more than one return address on the
    stack has been patched.
    Signed-off-by: default avatarMatt Fleming <matt@console-pimps.org>
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    60339fad
dwarf.c 24 KB