llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: None (Rifet-c)

<details>
<summary>Changes</summary>

Made alignment of 'register read' command's output to be dynamic to the 
register's name lengths, also made it left-aligned for readability reasons.

---
Full diff: https://github.com/llvm/llvm-project/pull/188049.diff


2 Files Affected:

- (modified) lldb/source/Commands/CommandObjectRegister.cpp (+34-3) 
- (modified) lldb/source/Core/DumpRegisterValue.cpp (+3-3) 


``````````diff
diff --git a/lldb/source/Commands/CommandObjectRegister.cpp 
b/lldb/source/Commands/CommandObjectRegister.cpp
index fbb92e5c63877..404c800047d49 100644
--- a/lldb/source/Commands/CommandObjectRegister.cpp
+++ b/lldb/source/Commands/CommandObjectRegister.cpp
@@ -75,7 +75,7 @@ class CommandObjectRegisterRead : public CommandObjectParsed {
 
   bool DumpRegister(const ExecutionContext &exe_ctx, Stream &strm,
                     RegisterContext &reg_ctx, const RegisterInfo &reg_info,
-                    bool print_flags) {
+                    bool print_flags, uint32_t reg_name_align_at = 0) {
     RegisterValue reg_value;
     if (!reg_ctx.ReadRegister(&reg_info, reg_value))
       return false;
@@ -85,7 +85,7 @@ class CommandObjectRegisterRead : public CommandObjectParsed {
     bool prefix_with_altname = (bool)m_command_options.alternate_name;
     bool prefix_with_name = !prefix_with_altname;
     DumpRegisterValue(reg_value, strm, reg_info, prefix_with_name,
-                      prefix_with_altname, m_format_options.GetFormat(), 8,
+                      prefix_with_altname, m_format_options.GetFormat(), 
reg_name_align_at,
                       exe_ctx.GetBestExecutionContextScope(), print_flags,
                       exe_ctx.GetTargetSP());
     if ((reg_info.encoding == eEncodingUint) ||
@@ -123,6 +123,7 @@ class CommandObjectRegisterRead : public 
CommandObjectParsed {
       strm.Printf("%s:\n", (reg_set->name ? reg_set->name : "unknown"));
       strm.IndentMore();
       const size_t num_registers = reg_set->num_registers;
+      uint32_t reg_name_align_at = ComputeMatchingAlignment(reg_ctx, reg_set, 
primitive_only);
       for (size_t reg_idx = 0; reg_idx < num_registers; ++reg_idx) {
         const uint32_t reg = reg_set->registers[reg_idx];
         const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg);
@@ -131,7 +132,7 @@ class CommandObjectRegisterRead : public 
CommandObjectParsed {
           continue;
 
         if (reg_info && DumpRegister(exe_ctx, strm, *reg_ctx, *reg_info,
-                                     /*print_flags=*/false))
+                                     /*print_flags=*/false, reg_name_align_at))
           ++available_count;
         else
           ++unavailable_count;
@@ -147,6 +148,36 @@ class CommandObjectRegisterRead : public 
CommandObjectParsed {
   }
 
 protected:
+  uint32_t ComputeMatchingAlignment(RegisterContext *reg_ctx, const 
RegisterSet *const reg_set, bool primitive_only) {
+    bool use_primary_name = 
!static_cast<bool>(m_command_options.alternate_name);
+    const size_t num_registers = reg_set->num_registers;
+    uint32_t reg_name_align_at = 0;
+
+    auto getNameSize = [&](auto reg_info){ 
+      auto raw = use_primary_name ? reg_info->name : reg_info->alt_name;
+      auto str = raw ? std::string(raw) : std::string();
+      return static_cast<uint32_t>(str.size());
+    };
+
+    // Loop through all the registers to find the longest register name for 
the 
+    // matching alignment
+    for (size_t reg_idx = 0; reg_idx < num_registers; ++reg_idx) {
+      const uint32_t reg = reg_set->registers[reg_idx];
+      const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg);
+
+      // Derived registers are skipped if primitive_only is true.
+      if (primitive_only && reg_info && reg_info->value_regs)
+        continue;
+
+      if (!reg_info)
+        continue;
+
+      reg_name_align_at = std::max(reg_name_align_at, getNameSize(reg_info));
+    }
+
+    return reg_name_align_at;
+  }
+
   void DoExecute(Args &command, CommandReturnObject &result) override {
     Stream &strm = result.GetOutputStream();
     RegisterContext *reg_ctx = m_exe_ctx.GetRegisterContext();
diff --git a/lldb/source/Core/DumpRegisterValue.cpp 
b/lldb/source/Core/DumpRegisterValue.cpp
index aff4d2c621d7e..29b95ba41b085 100644
--- a/lldb/source/Core/DumpRegisterValue.cpp
+++ b/lldb/source/Core/DumpRegisterValue.cpp
@@ -62,7 +62,7 @@ void lldb_private::DumpRegisterValue(const RegisterValue 
&reg_val, Stream &s,
                                      const RegisterInfo &reg_info,
                                      bool prefix_with_name,
                                      bool prefix_with_alt_name, Format format,
-                                     uint32_t reg_name_right_align_at,
+                                     uint32_t reg_name_left_align_at,
                                      ExecutionContextScope *exe_scope,
                                      bool print_flags, TargetSP target_sp) {
   DataExtractor data;
@@ -76,8 +76,8 @@ void lldb_private::DumpRegisterValue(const RegisterValue 
&reg_val, Stream &s,
   //     prefix_with_name^prefix_with_alt_name is true
   //
   StreamString format_string;
-  if (reg_name_right_align_at && (prefix_with_name ^ prefix_with_alt_name))
-    format_string.Printf("%%%us", reg_name_right_align_at);
+  if (reg_name_left_align_at && (prefix_with_name ^ prefix_with_alt_name))
+    format_string.Printf("%%-%us", reg_name_left_align_at);
   else
     format_string.Printf("%%s");
   std::string fmt = std::string(format_string.GetString());

``````````

</details>


https://github.com/llvm/llvm-project/pull/188049
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to