clayborg requested changes to this revision.
clayborg added inline comments.
This revision now requires changes to proceed.


================
Comment at: lldb/source/Target/ThreadPlanStepOut.cpp:127-129
+    if (!return_address_section) {
+      LLDB_LOGF(log, "Return address had no section.");
+      return;
----------------
This will fail for JIT'ed code. Best to ask the process for memory region 
information since it will usually be complete mappings for the process, even if 
we have no file on disk for the region in question:

```
uint32_t permissions = 0;
const addr_t return_pc = 
return_address.GetLoadAddr(&m_thread.GetProcess()->GetTarget());
if (!m_thread.GetProcess()->GetLoadAddressPermissions(return_pc, permissions)) {
  LLDB_LOGF(log, "No permissions for PC.");
  return;
} else if (!(permissions & ePermissionsExecutable)) {
  LLDB_LOGF(log, "Return address did not point to executable memory.");
  return;
}
```

The issue is we don't always have an object file for stuff we debug. If we rely 
on having an object file, like to require sections as your solution did, then 
this will fail for any JIT'ed code or any code that we weren't able to find 
object files for (remote debugging where we might not have all files).




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71372



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

Reply via email to