MichaĆ suggested on the PR that this should be merged to the release branch.
Saleem, what do you think? On Sat, Jan 21, 2017 at 8:22 AM, Saleem Abdulrasool via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: compnerd > Date: Sat Jan 21 10:22:59 2017 > New Revision: 292723 > > URL: http://llvm.org/viewvc/llvm-project?rev=292723&view=rev > Log: > 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! > > Modified: > libunwind/trunk/include/libunwind.h > libunwind/trunk/src/Registers.hpp > > Modified: libunwind/trunk/include/libunwind.h > URL: > http://llvm.org/viewvc/llvm-project/libunwind/trunk/include/libunwind.h?rev=292723&r1=292722&r2=292723&view=diff > ============================================================================== > --- libunwind/trunk/include/libunwind.h (original) > +++ libunwind/trunk/include/libunwind.h Sat Jan 21 10:22:59 2017 > @@ -165,13 +165,8 @@ enum { > 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 > }; > > Modified: libunwind/trunk/src/Registers.hpp > URL: > http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/Registers.hpp?rev=292723&r1=292722&r2=292723&view=diff > ============================================================================== > --- libunwind/trunk/src/Registers.hpp (original) > +++ libunwind/trunk/src/Registers.hpp Sat Jan 21 10:22:59 2017 > @@ -122,9 +122,17 @@ inline uint32_t Registers_x86::getRegist > return _registers.__edx; > case UNW_X86_EBX: > return _registers.__ebx; > +#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 @@ inline void Registers_x86::setRegister(i > 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: > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits