https://github.com/Rifet-c updated 
https://github.com/llvm/llvm-project/pull/188049

>From 0858e242868db78a47f34c4d0440f603f2f9016d Mon Sep 17 00:00:00 2001
From: Aleksandr Levin <[email protected]>
Date: Mon, 23 Mar 2026 16:10:26 +0100
Subject: [PATCH 1/3] [lldb] Improved formatting of 'register read' command of
 lldb. Now it is dynamic in register name lengths and left-aligned.

---
 .../source/Commands/CommandObjectRegister.cpp | 37 +++++++++++++++++--
 lldb/source/Core/DumpRegisterValue.cpp        |  6 +--
 2 files changed, 37 insertions(+), 6 deletions(-)

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());

>From 1b953123a1d1c862b45a7aeeccb303f8d231bdff Mon Sep 17 00:00:00 2001
From: Aleksandr Levin <[email protected]>
Date: Mon, 23 Mar 2026 16:33:09 +0100
Subject: [PATCH 2/3] Fixed formatting

---
 .../source/Commands/CommandObjectRegister.cpp | 20 +++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/lldb/source/Commands/CommandObjectRegister.cpp 
b/lldb/source/Commands/CommandObjectRegister.cpp
index 404c800047d49..7f1f473795617 100644
--- a/lldb/source/Commands/CommandObjectRegister.cpp
+++ b/lldb/source/Commands/CommandObjectRegister.cpp
@@ -85,9 +85,9 @@ 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(), 
reg_name_align_at,
-                      exe_ctx.GetBestExecutionContextScope(), print_flags,
-                      exe_ctx.GetTargetSP());
+                      prefix_with_altname, m_format_options.GetFormat(),
+                      reg_name_align_at, 
exe_ctx.GetBestExecutionContextScope(),
+                      print_flags, exe_ctx.GetTargetSP());
     if ((reg_info.encoding == eEncodingUint) ||
         (reg_info.encoding == eEncodingSint)) {
       Process *process = exe_ctx.GetProcessPtr();
@@ -123,7 +123,8 @@ 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);
+      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);
@@ -148,18 +149,21 @@ 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);
+  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 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 
+    // 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];

>From b69f0ba5371a796abd319197f3c6340bc347c2f6 Mon Sep 17 00:00:00 2001
From: Aleksandr Levin <[email protected]>
Date: Tue, 24 Mar 2026 10:40:44 +0100
Subject: [PATCH 3/3] Returned right alignment

---
 lldb/source/Core/DumpRegisterValue.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/source/Core/DumpRegisterValue.cpp 
b/lldb/source/Core/DumpRegisterValue.cpp
index 29b95ba41b085..f5650f44d3fb3 100644
--- a/lldb/source/Core/DumpRegisterValue.cpp
+++ b/lldb/source/Core/DumpRegisterValue.cpp
@@ -77,7 +77,7 @@ void lldb_private::DumpRegisterValue(const RegisterValue 
&reg_val, Stream &s,
   //
   StreamString format_string;
   if (reg_name_left_align_at && (prefix_with_name ^ prefix_with_alt_name))
-    format_string.Printf("%%-%us", reg_name_left_align_at);
+    format_string.Printf("%%%us", reg_name_left_align_at);
   else
     format_string.Printf("%%s");
   std::string fmt = std::string(format_string.GetString());

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

Reply via email to