title: What kind of stack unwinding libraries do exist and what's the difference?
body: <p>Trying to build my own non-GNU cross-platform C++ environment, I have faced the fact that I don't really understand the basics of the stack unwinding. The environment I build is as follows:</p>
  <p><code>libc++</code> ← <code>libc++abi</code> ← <code>libunwind</code> (or some other unwinder).</p>
  <p>I've found that <code>libc++abi</code> already contains some kind of libunwind, but doesn't use it on Linux. From the comments I understood, that it's special libunwind: LLVM Stack Unwinder that supports only Darwin and ARM but not x86_64 - and it's confusing. How does it come that the CPU architecture affects the stack unwinding process?</p>
  <p>Also I know about following stack unwinders:</p>
  <ol>
  <li>glibc built-in.</li>
  <li>libc++abi LLVM libunwind.</li>
  <li>GNU libunwind (from savanna).</li>
  </ol>
  <hr />
  <h2>Questions:</h2>
  <ol>
  <li>How does the platform or CPU architecture affects the stack unwinding process?</li>
  <li>Why to have many stack unwinders - and not just a single one?</li>
  <li>What kind of unwinders do exist and what is a difference between them?</li>
  </ol>
  <hr />
  <h2>Expectations from an answer:</h2>
  <p>I expect to get the answer that covers this topic as whole, not just separate points on each  question.</p>