[Lldb-commits] [PATCH] D155905: lldb RFC: Exposing set/get address masks, Fix*Address methods in SBProcess

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Jul 27 14:55:01 PDT 2023

jasonmolenda added inline comments.

Comment at: lldb/include/lldb/API/SBProcess.h:445
+  lldb::addr_t FixDataAddress(lldb::addr_t addr);
+  lldb::addr_t FixAnyAddress(lldb::addr_t addr);
clayborg wrote:
> What does this function do? Does it try to auto detect code/data low/hi on its own assuming that specific regions are easily identifiable?
We have the same method in Process.  Linux has separate masks for code & data addresses, so we have FixCode and FixData methods, but sometimes you just have an addr_t and you don't know the context (e.g. a register value that you're testing to see if it points to a symbol so you can print that as additional info to the user), and so in that case we have a Process::FixAddress.

There is one armv7 abi that clears the 0th bit on FixCode address, and I could see other ABIs doing similar things for the fixed nature of code addresses.  But Data addresses are the most general, having to point to any addressable byte.

Our Process/SBProcess say "FixCode if you know it's code, FixData if you know it's data.  And if you don't know, FixData".  But I think having a "FixAddress" method, making it clear that you don't know the origin of the value, makes the intention a little clearer.  Even if it's just calling FixData inside Process.

Comment at: lldb/source/API/SBProcess.cpp:1260-1261
+      return process_sp->GetHighmemDataAddressMask();
+    case eMaskTypeAny:
+      return process_sp->GetDataAddressMask();
+    }
clayborg wrote:
> Any reason we actually have a case for eMaskTypeAny? What makes this useful?
We have 4 different masks because of Linux's design, and because I have an internal customer doing different page table layouts for high & low memory in the same process (sigh), but realistically 99% of our programs are going to have the same mask for all 4 types.  Making an SB API user choose which mask they want of the four makes it harder to use, imo.  The folks doing genuinely unusual things, like the internal customer I have using high & low memory with different page table setups, can jump through the hoops of getting the different masks.

  rG LLVM Github Monorepo



More information about the lldb-commits mailing list