Re: [PATCH] [gdb/tdep] Eliminate ostringstream use from arc_check_tdesc_feature

Simon Marchi
2026-03-22T14:41:50Z

On 3/22/26 2:58 AM, Tom de Vries wrote:
> 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'.
> ...
>
> [1] https://sourceware.org/pipermail/gdb-patches/2026-March/226117.html
> ---
> 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]);

Looks like you fixed a bug here (0 -> i).

Approved-By: Simon Marchi <simon.marchi@efficios.com>

Simon