[libunwind] Improve unwinder stack usage - II

unwind_phase1 and unwind_phase2 allocate their own copies of unw_cursor_t buffers
on the stack. This can blow-up stack usage of the unwinder depending on how these
two functions get inlined into _Unwind_RaiseException. Clang seems to inline
unwind_phase1 into _Unwind_RaiseException but not unwind_phase2, thus creating
two unw_cursor_t buffers on the stack.

One way to work-around this problem is to mark both unwind_phase1 and
unwind_phase2 as noinline. This patch takes the less compiler-dependent approach
and explicitly allocate a unw_cursor_t buffer and pass that into unwind_phase1
and unwind_phase2 functions.

A follow-up patch will replicate this behavior for the non-EHABI and non-SJLJ
implementations.

Reviewers: jroelofs, bcraig.

Differential revision: http://reviews.llvm.org/D20320

git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@271004 91177308-0d34-0410-b5e6-96231b3b80d8
1 file changed
tree: 7b3706cd8de94b2387b36848039f1fd05c2b800e
  1. cmake/
  2. include/
  3. src/
  4. test/
  5. .arcconfig
  6. .clang-format
  7. CMakeLists.txt