[Lldb-commits] [PATCH] D159164: [lldb] Add assembly syntax highlighting

Greg Clayton via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 31 11:02:22 PDT 2023


clayborg added a comment.

We shouldn't need to pass in "bool use_color" to the Disassembler creation functions as the only reason to pass something to the creation function for any plug-in is if that data would exclude a disassembler if it didn't support color. But we always want to see some disassembly rather than none if a plug-in is the only one that handles a certain architecture and doesn't support color. We should either add accessors to enable colorization to the Disassembler virtual plug-in interface _or_ add "bool use_color" to the needed functions. Looks DisassembleBytes added a "bool use_color" argument to the call already, so we shouldn't need a "bool use_color" for the plug-in selection. Are there other places that need to know about the "use_color" setting that do not results from a direct function call that can have an argument added to it?

Even if colorization is enabled, It would still expect any APIs that return information in individual instructions, like:

  const char *SBInstruction::GetMnemonic(lldb::SBTarget target);
  const char *SBInstruction::GetOperands(lldb::SBTarget target);
  const char *SBInstruction::GetComment(lldb::SBTarget target);

To not have colorization attached to the returned string.



================
Comment at: lldb/include/lldb/Core/Disassembler.h:409
+  static lldb::DisassemblerSP FindPlugin(const ArchSpec &arch,
+                                         const char *flavor, bool use_color,
+                                         const char *plugin_name);
----------------
We shouldn't need to pass "use_color" in when finding the disassembler plug-in. We should add an accessor so the Disassembler virtual function list like:

```
bool Disassembler::SetUseColor(bool enable);
```
And the plug-in can return true if it supports colorization and false if not. The selection of the disassembler plug-in shouldn't be predicated on color support right?


================
Comment at: lldb/include/lldb/Core/Disassembler.h:416
                                                   const char *flavor,
+                                                  bool use_color,
                                                   const char *plugin_name);
----------------
remove and use accessor suggested above?


================
Comment at: lldb/include/lldb/lldb-private-interfaces.h:33
+                                                           const char *flavor,
+                                                           bool use_color);
 typedef DynamicLoader *(*DynamicLoaderCreateInstance)(Process *process,
----------------
remove per above comments


================
Comment at: lldb/source/Commands/CommandObjectDisassemble.cpp:456-457
 
-  DisassemblerSP disassembler =
-      Disassembler::FindPlugin(m_options.arch, flavor_string, plugin_name);
+  DisassemblerSP disassembler = Disassembler::FindPlugin(
+      m_options.arch, flavor_string, GetDebugger().GetUseColor(), plugin_name);
 
----------------
revert


================
Comment at: lldb/source/Core/Disassembler.cpp:59
 DisassemblerSP Disassembler::FindPlugin(const ArchSpec &arch,
-                                        const char *flavor,
+                                        const char *flavor, bool use_color,
                                         const char *plugin_name) {
----------------
revert


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

https://reviews.llvm.org/D159164



More information about the lldb-commits mailing list