From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 02 08:27:40 2025 Received: (at submit) by debbugs.gnu.org; 2 Jul 2025 12:27:40 +0000 Received: from localhost ([127.0.0.1]:36359 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uWwYs-0003xz-B1 for submit@debbugs.gnu.org; Wed, 02 Jul 2025 08:27:39 -0400 Received: from lists.gnu.org ([2001:470:142::17]:55256) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1uWwYp-0003wr-UK for submit@debbugs.gnu.org; Wed, 02 Jul 2025 08:27:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uWwYk-0004Gn-0Z for bug-gnu-emacs@gnu.org; Wed, 02 Jul 2025 08:27:30 -0400 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uWwYh-0007y4-Au for bug-gnu-emacs@gnu.org; Wed, 02 Jul 2025 08:27:29 -0400 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-ae35f36da9dso880748766b.0 for ; Wed, 02 Jul 2025 05:27:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751459243; x=1752064043; darn=gnu.org; h=content-disposition:mime-version:user-agent:message-id:date:subject :to:from:from:to:cc:subject:date:message-id:reply-to; bh=GFda63Gkr3xYNSUrJlSYm4qyRze+gxTnwQp2/7fuRy4=; b=KyY01X5emyIS+wuQfl4FinLyQ2T5DxblvFDjt3HYNm2AzaWOwBPOSqCMTFRbRtOuQI dv4lzcNQoIZqacpaRoU6HYlallsC9qTEjYjcalVpdpXPgbY5gn7tDEbS1CKLp06cMxV2 0Z41WoVSKXJa/wxKu+BACknykvbEDS5FnZZECxZehcbwEF0+i2GCqnlx0wU6TTafYBHH 65xVrPNEzdjBFqtcSTBEkaM4zbyDeMirD36AWUystWUpVwtXy2PiXy3ycJ7ZHAC1xU6Z cAzZJErPyIqHDEopXVuOSR8d4Is8if7IvwOhJ3KAgn1OqPAvQcjrKlAHgX6XFheSnEnr Wtag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751459243; x=1752064043; h=content-disposition:mime-version:user-agent:message-id:date:subject :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GFda63Gkr3xYNSUrJlSYm4qyRze+gxTnwQp2/7fuRy4=; b=FnpKa7wWdnE3g6gtOhcEmZIBcocZrxP5Hv8AG/n3jQv+lqKVmAqHZD5Bt/hr5DYcbz Jwp5KoAVLDWp2pCpmCL24io1GSyi4e5Y9U5moxE2YAsvFpGJ0lcvI7VEo22Z/ZmFBRWv mWmuxwxCGcDpdZIo5KPDy4Z+f2DfAtSEVUMf6Qa+JnpsqFwMaH2HupUkpCey1+hRYdgq f5G6MPKmxi+qJM61gGo0A2gw8iGPiajjZ8UTqVBU3rJkUoDcSvPg5PUSYcks3ROiFBhy xcgkVQnyPTKcHhMUHV/cWSuYP3bujjLfYk6B5YjSQThoCqd+P5CMHldA0akHiHDVzvy0 i76A== X-Gm-Message-State: AOJu0YwZlOH8UQo51XCKm4CB4oeDibhOjo7um4mGGsgb/T+yr5m8diS8 eFl3/B55bKp1FxV5j2q+1rueWty1K8dTYcqSqX8VT6uiI9SJAcMOlIEV/RTr1g== X-Gm-Gg: ASbGnct27bTvb/TWXZvtpPBRvtjY1PplJ6uYvgZ0hFvU2Yf8Pn/FNLr9fNrZLZRMJnn lE0u4MjhKwIerrbAs10vDEFjrAsVJAAWxcmIdpgkjlnMaBlMLuGYE5oIaj+2XKKUmQKNkme3n0I 6CnKtDf63ARbqa47vXQgud0jNejRH2L9l/QRpKt4BtTXqhGv7+913a8WeaAA2Cc4Npk1SyUg0zC X6w20zhVKobXBhSc3IQz67nV16EiU6PbgsAiPmUb5hRTakZawhVGNqRom1p+eABu4k/SP5RPdzJ y3foBmxmtppzb2nKWWPcoDSzW7Tb86H84Al9ylNF9OonLzwrJj+qDd+wTeI= X-Google-Smtp-Source: AGHT+IFxNQ+33ws2y7J+JA4F4irenvYknLUH718fd6Te38F/lD+FcoBwcEFTvKHperOM2rUI9qUnng== X-Received: by 2002:a17:907:7f14:b0:ad8:9645:798c with SMTP id a640c23a62f3a-ae3c2e447camr259731666b.51.1751459243020; Wed, 02 Jul 2025 05:27:23 -0700 (PDT) Received: from caladan ([31.177.115.39]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-ae353ca2edcsm1054819366b.180.2025.07.02.05.27.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 05:27:22 -0700 (PDT) From: Helmut Eller To: bug-gnu-emacs@gnu.org Subject: feature/igc [PATCH] Trace struct hash_table_test exactly X-Debbugs-Cc: Date: Wed, 02 Jul 2025 14:27:21 +0200 Message-ID: <87sejeixqu.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Trace-struct-hash_table_test-exactly.patch Received-SPF: pass client-ip=2a00:1450:4864:20::636; envelope-from=eller.helmut@gmail.com; helo=mail-ej1-x636.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) >From b08eb9fe786cab0ae92fe7fb63585c198c210e5b Mon Sep 17 00:00:00 2001 From: Helmut Eller Date: Wed, 2 Jul 2025 13:46:20 +0200 Subject: [PATCH] Trace struct hash_table_test exactly * src/lisp.h (struct hash_table_user_test): Moved here from fns.c. * src/fns.c (get_hash_table_user_test): Use igc_alloc_hash_table_user_test. * src/igc.h (igc_alloc_hash_table_user_test): New. * src/igc.c (igc_alloc_hash_table_user_test): Implement it. (scan_hash_table_user_test): Actual tracing coding code. --- src/fns.c | 13 +------------ src/igc.c | 23 +++++++++++++++++++++++ src/igc.h | 1 + src/lisp.h | 10 ++++++++++ 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/fns.c b/src/fns.c index 6ac61469292..cdc2cc52ff4 100644 --- a/src/fns.c +++ b/src/fns.c @@ -6166,17 +6166,6 @@ If (sxhash-equal-including-properties A B), then return reduce_emacs_uint_to_fixnum (hash); } - -/* This is a cache of hash_table_test structures so that they can be - shared between hash tables using the same test. - FIXME: This way of storing and looking up hash_table_test structs - isn't wonderful. Find a better solution. */ -struct hash_table_user_test -{ - struct hash_table_test test; - struct hash_table_user_test *next; -}; - static struct hash_table_user_test *hash_table_user_tests = NULL; #ifndef HAVE_MPS @@ -6212,7 +6201,7 @@ get_hash_table_user_test (Lisp_Object test) if (!ut) { #ifdef HAVE_MPS - ut = igc_xzalloc_ambig (sizeof *ut); + ut = igc_alloc_hash_table_user_test (); #else ut = xmalloc (sizeof *ut); #endif diff --git a/src/igc.c b/src/igc.c index d0bd9eb63e8..6100b9ce918 100644 --- a/src/igc.c +++ b/src/igc.c @@ -1781,6 +1781,20 @@ scan_kboard (mps_ss_t ss, void *start, void *end, void *closure) return MPS_RES_OK; } +static mps_res_t +scan_hash_table_user_test (mps_ss_t ss, void *start, void *end, void *closure) +{ + struct hash_table_user_test *ut = start; + MPS_SCAN_BEGIN (ss) + { + IGC_FIX12_OBJ (ss, &ut->test.user_hash_function); + IGC_FIX12_OBJ (ss, &ut->test.user_cmp_function); + IGC_FIX12_OBJ (ss, &ut->test.name); + } + MPS_SCAN_END (ss); + return MPS_RES_OK; +} + /*********************************************************************** Default pad, fwd, ... ***********************************************************************/ @@ -3575,6 +3589,15 @@ igc_alloc_kboard (void) return kb; } +struct hash_table_user_test * +igc_alloc_hash_table_user_test (void) +{ + struct hash_table_user_test *ut = xzalloc (sizeof *ut); + root_create_exact (global_igc, ut, ut + 1, scan_hash_table_user_test, + "hash-table-user-test"); + return ut; +} + static void finalize_bignum (struct Lisp_Bignum *n) { diff --git a/src/igc.h b/src/igc.h index 308da60ed9f..1de17c62240 100644 --- a/src/igc.h +++ b/src/igc.h @@ -118,6 +118,7 @@ #define EMACS_IGC_H void *igc_xnrealloc_ambig (void *pa, ptrdiff_t nitems, ptrdiff_t item_size); struct kboard *igc_alloc_kboard (void); +struct hash_table_user_test *igc_alloc_hash_table_user_test (void); struct Lisp_Vector *igc_alloc_pseudovector (size_t nwords_mem, size_t nwords_lisp, diff --git a/src/lisp.h b/src/lisp.h index 167f2cb3a8f..4fd591e0ba8 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2629,6 +2629,16 @@ #define DOOBARRAY(oa, it) \ Lisp_Object name; }; +/* This is a cache of hash_table_test structures so that they can be + shared between hash tables using the same test. + FIXME: This way of storing and looking up hash_table_test structs + isn't wonderful. Find a better solution. */ +struct hash_table_user_test +{ + struct hash_table_test test; + struct hash_table_user_test *next; +}; + typedef enum hash_table_weakness_t { Weak_None, /* No weak references. */ Weak_Key, /* Reference to key is weak. */ -- 2.39.5