[Lldb-commits] [PATCH] D73225: Handle the new objc direct dispatch accelerator functions for uncommonly overridden methods
Jonas Devlieghere via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Jan 22 14:04:25 PST 2020
JDevlieghere added inline comments.
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp:786
+
+ m_opt_dispatch_map.insert(std::pair<lldb::addr_t, int>(sym_addr, i));
+ }
----------------
You could simplify this by using `.emplace(sym_addr, i)`.
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp:889
+ pos = m_msgSend_map.find(addr);
+ if (pos != m_msgSend_map.end()) {
+ return_ptr = &g_dispatch_functions[(*pos).second];
----------------
If you rewrite this you can get rid of the return_ptr temporary.
```
if (pos != m_msgSend_map.end()) {
return &g_dispatch_functions[(*pos).second];
}
return nullptr;
```
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp:918
- MsgsendMap::iterator pos;
- pos = m_msgSend_map.find(curr_pc);
- if (pos != m_msgSend_map.end()) {
- this_dispatch = g_dispatch_functions[(*pos).second];
- found_it = true;
- }
-
+ this_dispatch = FindDispatchFunction(curr_pc);
+
----------------
Can you initialize this on line 910?
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp:1200
+ if (!this_dispatch && !ret_plan_sp) {
+ const char *opt_name = nullptr;
+ MsgsendMap::iterator pos;
----------------
Same here, why not do the assignment when you declare the variables?
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp:202
+
+// objc uses optimized dispatch functions for some common and seldom overridden
+// methods. For instance
----------------
`/// Objective-C ...`
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp:317
+ else
+ stop_reason = stop_info_sp->GetStopReason();
+
----------------
```
StopReason stop_reason = stop_info_sp ? stop_info_sp->GetStopReason() : eStopReasonNone;
```
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp:320
+ // See if this is one of our msgSend breakpoints:
+ if (stop_reason == eStopReasonBreakpoint) {
+ ProcessSP process_sp = GetThread().GetProcess();
----------------
I'd invert the condition and make this an early return with the comment below.
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp:358
+bool AppleThreadPlanStepThroughDirectDispatch::ShouldStop(Event *event_ptr) {
+
+ // If step out plan finished, that means we didn't find our way into a method
----------------
Spurious empty line
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.cpp:364
+ bool step_out_should_stop = ThreadPlanStepOut::ShouldStop(event_ptr);
+ if (step_out_should_stop) {
+ SetPlanComplete(true);
----------------
Looks like `step_out_should_stop ` isn't used anywhere else?
```if(ThreadPlanStepOut::ShouldStop(event_ptr)) {```
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h:67
lldb::addr_t m_sel_addr;
lldb::ThreadPlanSP m_func_sp; // This is the function call plan. We fill it
+ // at start, then set it to NULL when this plan
----------------
These should be Doxygen comments before the variable if you're already touching them...
```
/// This is the function call plan. We fill it at the start, then ...
lldb::ThreadPlanSP m_func_sp;
```
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h:77
+class AppleThreadPlanStepThroughDirectDispatch
+ : public ThreadPlanStepOut {
----------------
Can you please clang-format the patch, this should fit on one line.
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h:93
+
+ // The base class MischiefManaged does some cleanup - so you have to call it
+ // in your MischiefManaged derived class.
----------------
`///`
================
Comment at: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h:110
+ std::vector<lldb::BreakpointSP> m_msgSend_bkpts;
+ bool m_at_msg_send = false;
+ bool m_stop_others;
----------------
Let's initialize this in the ctor as well, the inconsistency with the next line leaves me wondering if this is a bug.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D73225/new/
https://reviews.llvm.org/D73225
More information about the lldb-commits
mailing list