[binutils-gdb] libctf: fix dynset insertion

Nick Alcock nix@sourceware.org
Wed Jul 31 20:44:49 GMT 2024


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

commit 67588c4dd687fee5164592ee2054638e53bee62f
Author: Nick Alcock <nick.alcock@oracle.com>
Date:   Mon Jul 15 20:50:25 2024 +0100

    libctf: fix dynset insertion
    
    libctf's dynsets are a straight wrapper around libiberty hashtab, storing
    the key directly in the hashtab slot.  However, we'd often like to be able
    to store 0 and 1 (HTAB_EMPTY_ENTRY and HTAB_DELETED_ENTRY) in there, so we
    move them out of the way and replace them with huge unlikely values
    instead.  Unfortunately we failed to do this replacement in one place, so
    insertion of 0 or 1 ended up misinforming the hashtab machinery that an
    entry was empty or deleted when it wasn't.
    
    libctf/
            * ctf-hash.c (ctf_dynset_insert): Call key_to_internal properly.

Diff:
---
 libctf/ctf-hash.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libctf/ctf-hash.c b/libctf/ctf-hash.c
index a52f96db105..7f291e3ac27 100644
--- a/libctf/ctf-hash.c
+++ b/libctf/ctf-hash.c
@@ -626,7 +626,7 @@ ctf_dynset_insert (ctf_dynset_t *hp, void *key)
   struct htab *htab = (struct htab *) hp;
   void **slot;
 
-  slot = htab_find_slot (htab, key, INSERT);
+  slot = htab_find_slot (htab, key_to_internal (key), INSERT);
 
   if (!slot)
     {


More information about the Binutils-cvs mailing list