<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Oct 10, 2016 at 7:33 PM Jason Molenda via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>+    if (process_sp->GetTarget().ReadMemory(<br class="gmail_msg"><br>+            range.GetBaseAddress(), prefer_file_cache, function_text.data(),<br class="gmail_msg"><br>+            range.GetByteSize(), error) != range.GetByteSize()) {<br class="gmail_msg"><br>+      return false;<br class="gmail_msg"><br>+    }<br class="gmail_msg"><br>+  }<br class="gmail_msg"><br>+  return GetNonCallSiteUnwindPlanFromAssembly(<br class="gmail_msg"><br>+      range, function_text.data(), function_text.size(), unwind_plan);<br class="gmail_msg"><br>+}<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+bool UnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly(<br class="gmail_msg"><br>+    AddressRange &range, uint8_t *opcode_data, size_t opcode_size,<br class="gmail_msg"><br>+    UnwindPlan &unwind_plan) {<br class="gmail_msg"></blockquote><div>If you pass a MutableArrayRef<uint8_t> the code is a bit safer, since llvm will assert if you try to index out of bounds, rather than allowing you to silently access the invalid memory.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br><br class="gmail_msg"><br>   bool<br class="gmail_msg"><br>+  GetNonCallSiteUnwindPlanFromAssembly(lldb_private::AddressRange &func,<br class="gmail_msg"><br>+                                       uint8_t *opcode_data, size_t opcode_size,<br class="gmail_msg"><br>+                                       lldb_private::UnwindPlan &unwind_plan);<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  bool<br class="gmail_msg"></blockquote><div>Same here.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>   AugmentUnwindPlanFromCallSite(lldb_private::AddressRange &func,<br class="gmail_msg"><br>                                 lldb_private::Thread &thread,<br class="gmail_msg"><br>                                 lldb_private::UnwindPlan &unwind_plan) override;<br class="gmail_msg"><br>@@ -67,8 +72,8 @@ private:<br class="gmail_msg"><br>   UnwindAssemblyInstEmulation(const lldb_private::ArchSpec &arch,<br class="gmail_msg"><br>                               lldb_private::EmulateInstruction *inst_emulator)<br class="gmail_msg"><br>       : UnwindAssembly(arch), m_inst_emulator_ap(inst_emulator),<br class="gmail_msg"><br>-        m_range_ptr(NULL), m_thread_ptr(NULL), m_unwind_plan_ptr(NULL),<br class="gmail_msg"><br>-        m_curr_row(), m_cfa_reg_info(), m_fp_is_cfa(false), m_register_values(),<br class="gmail_msg"><br>+        m_range_ptr(NULL), m_unwind_plan_ptr(NULL), m_curr_row(),<br class="gmail_msg"><br>+        m_cfa_reg_info(), m_fp_is_cfa(false), m_register_values(),<br class="gmail_msg"><br>         m_pushed_regs(), m_curr_row_modified(false),<br class="gmail_msg"><br>         m_forward_branch_offset(0) {<br class="gmail_msg"></blockquote><div>Should we initialize these inline at the point of declaration rather than in the initializer list?  It makes the constructor code a little less verbose.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>+TEST_F(TestArm64InstEmulation, TestSimpleFunction) {<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  init();<br class="gmail_msg"><br>+<br class="gmail_msg"><br>+  ArchSpec arch("arm64-apple-ios10", nullptr);<br class="gmail_msg"><br>+  UnwindAssemblyInstEmulation *engine =<br class="gmail_msg"><br>+      static_cast<UnwindAssemblyInstEmulation *>(<br class="gmail_msg"><br>+          UnwindAssemblyInstEmulation::CreateInstance(arch));<br class="gmail_msg"><br>+  EXPECT_TRUE(engine != nullptr);<br class="gmail_msg"><br>+  if (engine == nullptr)<br class="gmail_msg"><br>+    return;<br class="gmail_msg"></blockquote><div>Use ASSERT_NE(nullptr, engine);  If it is nullptr, the macro will return automatically for you.</div><div> </div></div></div>