Merging r292723:
------------------------------------------------------------------------
r292723 | compnerd | 2017-01-21 08:22:59 -0800 (Sat, 21 Jan 2017) | 17 lines

X86: swap EBP, ESP on !APPLE

Restore the `libunwind.h` enumeration values back to the inverted
values.  This diverges from the DWARF definition of the register values.
However, this allows our header to be compatible with other unwind
implementations (e.g. HP, GNU Savannah, GCC).

The register IDs are only swapped in the header and need to be unswapped
when accessing the unwind register file.  The flipped EBP and ESP only
applies on non-Apple x86 targets.

When optimizations were enabled, EBP and ESP would no longer be
equivalent.  As a result, the incorrect access on Linux would manifest
as a failure to unwind the stack.  We can now unwind the stack with and
without FPO on Linux x86.

Resolves PR30879!
------------------------------------------------------------------------


git-svn-id: https://llvm.org/svn/llvm-project/libunwind/branches/release_40@293298 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/libunwind.h b/include/libunwind.h
index 9d72d48..fef72bf 100644
--- a/include/libunwind.h
+++ b/include/libunwind.h
@@ -165,13 +165,8 @@
   UNW_X86_ECX = 1,
   UNW_X86_EDX = 2,
   UNW_X86_EBX = 3,
-#if defined(__CloudABI__) || defined(__FreeBSD__)
-  UNW_X86_ESP = 4,
-  UNW_X86_EBP = 5,
-#else
   UNW_X86_EBP = 4,
   UNW_X86_ESP = 5,
-#endif
   UNW_X86_ESI = 6,
   UNW_X86_EDI = 7
 };
diff --git a/src/Registers.hpp b/src/Registers.hpp
index 8066b80..ff57c60 100644
--- a/src/Registers.hpp
+++ b/src/Registers.hpp
@@ -122,9 +122,17 @@
     return _registers.__edx;
   case UNW_X86_EBX:
     return _registers.__ebx;
-  case UNW_X86_EBP:
-    return _registers.__ebp;
+#if !defined(__APPLE__)
   case UNW_X86_ESP:
+#else
+  case UNW_X86_EBP:
+#endif
+    return _registers.__ebp;
+#if !defined(__APPLE__)
+  case UNW_X86_EBP:
+#else
+  case UNW_X86_ESP:
+#endif
     return _registers.__esp;
   case UNW_X86_ESI:
     return _registers.__esi;
@@ -154,10 +162,18 @@
   case UNW_X86_EBX:
     _registers.__ebx = value;
     return;
+#if !defined(__APPLE__)
+  case UNW_X86_ESP:
+#else
   case UNW_X86_EBP:
+#endif
     _registers.__ebp = value;
     return;
+#if !defined(__APPLE__)
+  case UNW_X86_EBP:
+#else
   case UNW_X86_ESP:
+#endif
     _registers.__esp = value;
     return;
   case UNW_X86_ESI: