clayborg added a comment.

So I would suggest not removing any functions from lldb_private::Target, just 
change the old ones to call through the arch plug-ins if there is one. Then 
many changes in this diff just go away and we still get the clean 
implementation where things are delegated to the Architecture plug-ins



================
Comment at: include/lldb/Target/Target.h:750
                                    BreakpointIDList &new_bps);
 
   void ModulesDidLoad(ModuleList &module_list);
----------------
Why did we remove these calls from target? We should have default 
implementations that do nothing if there is no arch plug-in, and call through 
the arch plug-in if there is one. As I mentioned we don't want people to have 
to check if the arch plug-in is valid at each call site.


================
Comment at: source/Core/Address.cpp:333
 
-  if (code_addr == LLDB_INVALID_ADDRESS)
+  if (code_addr == LLDB_INVALID_ADDRESS || !target)
     return code_addr;
----------------
None of the changes in Address.cpp are needed if we leave the functions in 
Target.


================
Comment at: source/Target/RegisterContext.cpp:132-140
+  if (pc == fail_value)
+    return pc;
 
-  if (pc != fail_value) {
-    TargetSP target_sp = m_thread.CalculateTarget();
-    if (target_sp) {
-      Target *target = target_sp.get();
-      if (target)
-        pc = target->GetOpcodeLoadAddress(pc, AddressClass::eCode);
-    }
-  }
+  TargetSP target_sp = m_thread.CalculateTarget();
+  if (!target_sp)
+    return pc;
 
----------------
None of these changes are needed if we leave the function in Target.h/.cpp


================
Comment at: source/Target/Target.cpp:380-382
+  auto arch_plugin = GetArchitecturePlugin();
+  if (arch_plugin)
+    addr = arch_plugin->GetBreakableLoadAddress(addr, *this);
----------------
None of these changes are needed if we leave the function in Target.h/.cpp




================
Comment at: source/Target/Target.cpp:2429-2430
 
-lldb::addr_t Target::GetCallableLoadAddress(lldb::addr_t load_addr,
-                                            AddressClass addr_class) const {
-  addr_t code_addr = load_addr;
----------------
Leave this function in and call through to arch plug-in if we have one.


================
Comment at: source/Target/Target.cpp:2487-2488
-
-lldb::addr_t Target::GetOpcodeLoadAddress(lldb::addr_t load_addr,
-                                          AddressClass addr_class) const {
-  addr_t opcode_addr = load_addr;
----------------
Leave this function in and call through to arch plug-in if we have one.


================
Comment at: source/Target/Target.cpp:2518
-
-lldb::addr_t Target::GetBreakableLoadAddress(lldb::addr_t addr) {
-  addr_t breakable_addr = addr;
----------------
Leave this function in and call through to arch plug-in if we have one.


================
Comment at: source/Target/ThreadPlanRunToAddress.cpp:45-47
+  auto arch_plugin = thread.GetProcess()->GetTarget().GetArchitecturePlugin();
   m_addresses.push_back(
+    arch_plugin ? arch_plugin->GetOpcodeLoadAddress(address) : address);
----------------
None of these changes are needed if we leave the function in Target.h/.cpp




================
Comment at: source/Target/ThreadPlanRunToAddress.cpp:59-63
+  auto arch_plugin = thread.GetProcess()->GetTarget().GetArchitecturePlugin();
+  if (arch_plugin) {
+    for (auto &addr : m_addresses)
+      addr = arch_plugin->GetOpcodeLoadAddress(addr);
+  }
----------------
None of these changes are needed if we leave the function in Target.h/.cpp




Repository:
  rLLDB LLDB

https://reviews.llvm.org/D48623



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

Reply via email to