[Lldb-commits] [PATCH] D98886: Pass pointer authentication code mask from minidump and use to strip pac from pc.

Muhammad Omair Javaid via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Mar 30 15:51:16 PDT 2021

omjavaid added inline comments.

Comment at: lldb/include/lldb/Target/Process.h:79
   void SetExtraStartupCommands(const Args &args);
+  uint64_t GetPointerAuthenticationAddressMask() const;
+  void SetPointerAuthenticationAddressMask(const uint64_t mask);
pcc wrote:
> omjavaid wrote:
> > This function name is too specific to AArch64 architecture. IMO, we should have information on significant address bits rather than PAuth mask. This is because we have to cover for the top byte in case of AArch64 Top Byte Ignore feature as well as any other memory management features.
> > 
> > From user process perspective we should figure out how many bits of the process memory address are significant for addressing while the others store extra information like PAC, Tags or any information inserted by software in top byte.
> > 
> > I propose to add a new variable (may be call it address_bits_in_use) in process class which is populated by default equal to process address width in our case 64 bit. In case a we choose to update address_bits_in_use we may do it on when process is created or through set method during execution as well.
> I don't think we want to clear the top byte if TBI is enabled. This is because the top byte may contain a pointer tag that is necessary in order to access the pointer with MTE. That is exactly what a mask would let us do. The top byte of the mask is clear when TBI is enabled so that the pointer tag is left unchanged.
We dont really want to clear the top byte but rather have the information on "address bits used for addressing" vs "address bits used for extra features" and  for the purpose of unwinding all extra information from the address needs to cleared.

On top of my head I think this information is needed to ensure LLDB does not use multiple watchpoints for watching a single address which has extra info in some of its top bits. There could be more uses of this in memory reads and breakpoints management as well for code pointers.

  rG LLVM Github Monorepo



More information about the lldb-commits mailing list