25 May, 2010

1 commit

  • The dwarf unwinder ties in to an early initcall, but it's possible that
    return_address() calls will be made prior to that. This implements some
    additional error handling in to the dwarf unwinder as well as an exit
    path in the return_address() case to bail out if the unwinder hasn't come
    up yet.

    This fixes a NULL pointer deref in early boot when mempool_alloc() blows
    up on the not-yet-ready mempool via dwarf_unwind_stack().

    Signed-off-by: Paul Mundt

    Paul Mundt
     

02 Apr, 2010

1 commit


13 Oct, 2009

1 commit

  • This splits out the unwinder implementation and adds a new
    return_address() abstraction modelled after the ARM code. The DWARF
    unwinder is tied in to this, returning NULL otherwise in the case of
    being unable to support arbitrary depths.

    This enables us to get correct behaviour with the unwinder enabled,
    as well as disabling the arbitrary depth support when frame pointers are
    enabled, as arbitrary depths with __builtin_return_address() are not
    supported regardless.

    With this abstraction it's also possible to layer on a simplified
    implementation with frame pointers in the event that the unwinder isn't
    enabled, although this is left as a future exercise.

    Signed-off-by: Paul Mundt

    Paul Mundt