[binutils-gdb] gdb: check for groups with duplicate names in reggroups:add

Simon Marchi simark@sourceware.org
Wed Oct 19 02:12:26 GMT 2022


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9454c9ce88b25646d279feed329c9cdba69b4905

commit 9454c9ce88b25646d279feed329c9cdba69b4905
Author: Simon Marchi <simon.marchi@efficios.com>
Date:   Tue Oct 18 10:17:33 2022 -0400

    gdb: check for groups with duplicate names in reggroups:add
    
    In the downstream ROCm GDB port, we would create multiple register
    groups with duplicate names.  While it did not really hurt, it certainly
    wasn't the intent.  And I don't think it ever makes sense to do so.
    
    To catch these, change the assert in reggroups::add to check for
    duplicate names.  It's no longer necessary to check for duplicate
    reggroup pointers, because adding the same group twice would be caught
    by the duplicate name check.
    
    Change-Id: Id216a58acf91f1b314d3cba2d02de73656f8851d
    Approved-By: Tom Tromey <tom@tromey.com>

Diff:
---
 gdb/reggroups.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/gdb/reggroups.c b/gdb/reggroups.c
index 8e4af303c54..a012bf08526 100644
--- a/gdb/reggroups.c
+++ b/gdb/reggroups.c
@@ -71,8 +71,13 @@ struct reggroups
   void add (const reggroup *group)
   {
     gdb_assert (group != nullptr);
-    gdb_assert (std::find (m_groups.begin(), m_groups.end(), group)
-		== m_groups.end());
+
+    auto find_by_name = [group] (const reggroup *g)
+      {
+	return streq (group->name (), g->name ());
+      };
+    gdb_assert (std::find_if (m_groups.begin (), m_groups.end (), find_by_name)
+		== m_groups.end ());
 
     m_groups.push_back (group);
   }


More information about the Gdb-cvs mailing list