================
@@ -203,3 +208,38 @@ void AddressRange::DumpDebug(Stream *s) const {
             static_cast<void *>(m_base_addr.GetSection().get()),
             m_base_addr.GetOffset(), GetByteSize());
 }
+
+bool AddressRange::GetDescription(Stream *s, Target *target) const {
+  const char *file_name = nullptr;
+  addr_t start_addr = LLDB_INVALID_ADDRESS;
+
+  if (target == nullptr) {
+    const auto section_sp = m_base_addr.GetSection();
+    if (section_sp) {
+      const auto object_file = section_sp->GetObjectFile();
+      if (object_file != nullptr)
+        file_name = object_file->GetFileSpec().GetFilename().AsCString();
+    }
+    start_addr = m_base_addr.GetFileAddress();
+  } else {
+    start_addr = m_base_addr.GetLoadAddress(target);
+    file_name = "";
+  }
+
+  const addr_t end_addr = (start_addr == LLDB_INVALID_ADDRESS)
+                              ? LLDB_INVALID_ADDRESS
+                              : start_addr + GetByteSize();
----------------
clayborg wrote:

This might be easier to read and reason with if we structure it like:
```
addr_t start_addr = m_base_addr.GetLoadAddress(target);
if (start_addr != LLDB_INVALID_ADDRESS) {
  // We have a valid target and the address was resolved, or we have a base 
address 
  // with no section. Just print out a raw address range: [<addr>, <addr>)
  s->Printf("[0x%" PRIx64 "-0x%" PRIx64 ")", start_addr, start_addr + 
GetByteSize());
  return;
}

// Either no target or the address wasn't resolved, print as 
<module>[<file-addr>-<file-addr>)
const char *file_name = "";
const auto section_sp = m_base_addr.GetSection();
if (section_sp) {
  if (const auto object_file = section_sp->GetObjectFile())
    file_name = object_file->GetFileSpec().GetFilename().AsCString();
}
start_addr = m_base_addr.GetFileAddress();
const addr_t end_addr = (start_addr == LLDB_INVALID_ADDRESS)
                              ? LLDB_INVALID_ADDRESS
                              : start_addr + GetByteSize();
s->Printf("%s[0x%" PRIx64 "-0x%" PRIx64 "]", file_name, start_addr, end_addr);
```

the above `m_base_addr.GetLoadAddress(target)` call knows to check for a NULL 
target and will return LLDB_INVALID_ADDRESS if that is the case and there is a 
section.

https://github.com/llvm/llvm-project/pull/92014
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to