jasonmolenda added a comment.

In D152861#4420223 <https://reviews.llvm.org/D152861#4420223>, @DavidSpickett 
wrote:

> I'm curious how you would end up with a signed PC value, but given this is 
> unwind it could be a value from a previous frame that was signed when stored 
> to the stack.

The darwin kernel signs sp/pc (and maybe fp too) when they're at rest inside 
the kernel, I think.  When we fetch the values for these with thread_get_state, 
they need to be run through and auth-and-clear before the values are sent to 
lldb (in debugserver aka lldb-server).   gcore isn't stripping the auth bits 
when it fetches the register contexts from the kernel, and is putting those 
values as-is in corefiles.

You're right that this shouldn't happen in a real process.  We already strip 
auth bits from $lr and spilled $lr's on the stack, where the code actually does 
sign it.  This is purely addressing an artifact of how the darwin kernel 
represents these internally.  gcore should really be clearing the auth bits 
from these register before putting them in a core file, but we need to work on 
core files that have already been created like this, so I'm starting with an 
lldb patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D152861/new/

https://reviews.llvm.org/D152861

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to