[binutils-gdb] [gdb/tdep] Eliminate ostringstream use from arc_check_tdesc_feature

Tom de Vries via Gdb-cvs <[email protected]>
Newsgroups gmane.comp.gdb.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=16392b51d892c35beb8e6faf0b58b04b2f2aa3c0

commit 16392b51d892c35beb8e6faf0b58b04b2f2aa3c0
Author: Tom de Vries <[email protected]>
Date:   Sun Mar 22 17:08:31 2026 +0100

    [gdb/tdep] Eliminate ostringstream use from arc_check_tdesc_feature
    
    We generally avoid C++ streams in GDB sources [1].
    
    Remove an instance of std::ostringstream in arc_check_tdesc_feature.
    
    While we're at it, fix an array index bug:
    ...
    -               reg_names << " or '" << reg.names[0] << "'";
    +               string_appendf (reg_names, " or '%s'", reg.names[i]);
    ...
    
    Tested on x86_64-linux, using a trigger patch:
    ...
    -      if (!found && reg.required_p)
    +      if (true || (!found && reg.required_p))
    ...
    and doing "maint selftest" and observing the output:
    ...
    Running selftest unpack_field_as_long::ARC600.
    Error: Cannot find required register(s) 'r0' in feature 'org.gnu.gdb.arc.core'.
    Error: Cannot find required register(s) 'pc' in feature 'org.gnu.gdb.arc.aux'.
    ...
    
    Approved-By: Simon Marchi <[email protected]>
    
    [1] https://sourceware.org/pipermail/gdb-patches/2026-March/226117.html

Diff:
---
 gdb/arc-tdep.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/gdb/arc-tdep.c b/gdb/arc-tdep.c
index ff283014e52..4936a5c8fbb 100644
--- a/gdb/arc-tdep.c
+++ b/gdb/arc-tdep.c
@@ -44,7 +44,6 @@
 
 /* Standard headers.  */
 #include <algorithm>
-#include <sstream>
 
 /* The frame unwind cache for ARC.  */
 
@@ -2100,16 +2099,16 @@ arc_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
 
       if (!found && reg.required_p)
 	{
-	  std::ostringstream reg_names;
+	  std::string reg_names;
 	  for (std::size_t i = 0; i < reg.names.size(); ++i)
 	    {
 	      if (i == 0)
-		reg_names << "'" << reg.names[0] << "'";
+		string_appendf (reg_names, "'%s'", reg.names[0]);
 	      else
-		reg_names << " or '" << reg.names[0] << "'";
+		string_appendf (reg_names, " or '%s'", reg.names[i]);
 	    }
 	  arc_print (_("Error: Cannot find required register(s) %s "
-		       "in feature '%s'.\n"), reg_names.str ().c_str (),
+		       "in feature '%s'.\n"), reg_names.c_str (),
 		       feature->name.c_str ());
 	  return false;
 	}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.