<div dir="ltr">I think that this is safe enough and does make libunwind work on x86 Linux, so lets go for it.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 26, 2017 at 10:10 AM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Michał suggested on the PR that this should be merged to the release branch.<br>
<br>
Saleem, what do you think?<br>
<div class="HOEnZb"><div class="h5"><br>
On Sat, Jan 21, 2017 at 8:22 AM, Saleem Abdulrasool via cfe-commits<br>
<<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
> Author: compnerd<br>
> Date: Sat Jan 21 10:22:59 2017<br>
> New Revision: 292723<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=292723&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=292723&view=rev</a><br>
> Log:<br>
> X86: swap EBP, ESP on !APPLE<br>
><br>
> Restore the `libunwind.h` enumeration values back to the inverted<br>
> values.  This diverges from the DWARF definition of the register values.<br>
> However, this allows our header to be compatible with other unwind<br>
> implementations (e.g. HP, GNU Savannah, GCC).<br>
><br>
> The register IDs are only swapped in the header and need to be unswapped<br>
> when accessing the unwind register file.  The flipped EBP and ESP only<br>
> applies on non-Apple x86 targets.<br>
><br>
> When optimizations were enabled, EBP and ESP would no longer be<br>
> equivalent.  As a result, the incorrect access on Linux would manifest<br>
> as a failure to unwind the stack.  We can now unwind the stack with and<br>
> without FPO on Linux x86.<br>
><br>
> Resolves PR30879!<br>
><br>
> Modified:<br>
>     libunwind/trunk/include/<wbr>libunwind.h<br>
>     libunwind/trunk/src/Registers.<wbr>hpp<br>
><br>
> Modified: libunwind/trunk/include/<wbr>libunwind.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/libunwind/trunk/include/libunwind.h?rev=292723&r1=292722&r2=292723&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libunwind/trunk/<wbr>include/libunwind.h?rev=<wbr>292723&r1=292722&r2=292723&<wbr>view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- libunwind/trunk/include/<wbr>libunwind.h (original)<br>
> +++ libunwind/trunk/include/<wbr>libunwind.h Sat Jan 21 10:22:59 2017<br>
> @@ -165,13 +165,8 @@ enum {<br>
>    UNW_X86_ECX = 1,<br>
>    UNW_X86_EDX = 2,<br>
>    UNW_X86_EBX = 3,<br>
> -#if defined(__CloudABI__) || defined(__FreeBSD__)<br>
> -  UNW_X86_ESP = 4,<br>
> -  UNW_X86_EBP = 5,<br>
> -#else<br>
>    UNW_X86_EBP = 4,<br>
>    UNW_X86_ESP = 5,<br>
> -#endif<br>
>    UNW_X86_ESI = 6,<br>
>    UNW_X86_EDI = 7<br>
>  };<br>
><br>
> Modified: libunwind/trunk/src/Registers.<wbr>hpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/libunwind/trunk/src/Registers.hpp?rev=292723&r1=292722&r2=292723&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/libunwind/trunk/src/<wbr>Registers.hpp?rev=292723&r1=<wbr>292722&r2=292723&view=diff</a><br>
> ==============================<wbr>==============================<wbr>==================<br>
> --- libunwind/trunk/src/Registers.<wbr>hpp (original)<br>
> +++ libunwind/trunk/src/Registers.<wbr>hpp Sat Jan 21 10:22:59 2017<br>
> @@ -122,9 +122,17 @@ inline uint32_t Registers_x86::getRegist<br>
>      return _registers.__edx;<br>
>    case UNW_X86_EBX:<br>
>      return _registers.__ebx;<br>
> +#if !defined(__APPLE__)<br>
> +  case UNW_X86_ESP:<br>
> +#else<br>
>    case UNW_X86_EBP:<br>
> +#endif<br>
>      return _registers.__ebp;<br>
> +#if !defined(__APPLE__)<br>
> +  case UNW_X86_EBP:<br>
> +#else<br>
>    case UNW_X86_ESP:<br>
> +#endif<br>
>      return _registers.__esp;<br>
>    case UNW_X86_ESI:<br>
>      return _registers.__esi;<br>
> @@ -154,10 +162,18 @@ inline void Registers_x86::setRegister(i<br>
>    case UNW_X86_EBX:<br>
>      _registers.__ebx = value;<br>
>      return;<br>
> +#if !defined(__APPLE__)<br>
> +  case UNW_X86_ESP:<br>
> +#else<br>
>    case UNW_X86_EBP:<br>
> +#endif<br>
>      _registers.__ebp = value;<br>
>      return;<br>
> +#if !defined(__APPLE__)<br>
> +  case UNW_X86_EBP:<br>
> +#else<br>
>    case UNW_X86_ESP:<br>
> +#endif<br>
>      _registers.__esp = value;<br>
>      return;<br>
>    case UNW_X86_ESI:<br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Saleem Abdulrasool<br>compnerd (at) compnerd (dot) org</div>
</div>