[Lldb-commits] [PATCH] D71372: [lldb] Add additional validation on return address in 'thread step-out'

Greg Clayton via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Dec 12 14:25:13 PST 2019

clayborg added a comment.

In D71372#1782567 <https://reviews.llvm.org/D71372#1782567>, @jingham wrote:

> In D71372#1782549 <https://reviews.llvm.org/D71372#1782549>, @clayborg wrote:
> > In D71372#1782538 <https://reviews.llvm.org/D71372#1782538>, @jingham wrote:
> >
> > > In D71372#1782536 <https://reviews.llvm.org/D71372#1782536>, @clayborg wrote:
> > >
> > > > I believe it is ok for permissions to succeed as long as they don't return invalid permissions. For any address outside any mapped ranges, we should have zero as the permissions. Looking up address mappings for zero will return
> > > >
> > > > [0x00000000 - 0x100000000) ---
> > > >
> > > > no permisssions are represented as "---". Then you can take the end address and look it up, and continue. So as long as we aren't getting bogus values back, we are good.
> > >
> > >
> > > Then what does the bool return mean?
> >
> >
> > If there is no memory map info in the process plug-in at all, then false will be returned.
> That means to answer the question "did GetLoadAddressPermissions return valid permissions for load address 0xABCD" I have to check both the return value and if any of the permission values are unknown?  That seems like an awkward API.

That it is. Not sure if I added it, but blame shows Kate Stone from the great code convention checkin. Would be fine to fix it and update any call sites. Looks like it could be turned into:

  bool Process::LoadAddressHasAllPermissions(lldb::addr_t load_addr, uint32_t permissions);

The permissions is now an input parameter. The only other client is RegisterContextLLDB and all call sites do things like:

  process->GetLoadAddressPermissions(current_pc_addr, permissions) && (permissions & ePermissionsExecutable) == 0)


  if (process.GetLoadAddressPermissions(candidate, permissions) &&permissions & lldb::ePermissionsExecutable)

So it would be easy to fix. Please do!

  rG LLVM Github Monorepo



More information about the lldb-commits mailing list