[{"id":3675790,"web_url":"http://patchwork.ozlabs.org/comment/3675790/","msgid":"<adjQmoIgDWLx1yPg@arm.com>","list_archive_url":null,"date":"2026-04-10T10:27:38","subject":"Re: [PATCH] tests: allow tests to append tunables","submitter":{"id":88214,"url":"http://patchwork.ozlabs.org/api/people/88214/","name":"Yury Khrustalev","email":"yury.khrustalev@arm.com"},"content":"On Tue, Mar 24, 2026 at 02:14:38PM +0000, Yury Khrustalev wrote:\n> Many tests use Glibc tunables. The tunable values are provided via\n> the GLIBC_TUNABLES env variable. Tests set it in makefiles using\n> \n>   tst-foo-ENV = GLIBC_TUNABLES=tunable=value\n> \n> This overwrites environment for this test, so if another env var is\n> set elsewhere, one of these changes would be lost. The correct way\n> should be to append to test's environment:\n> \n>   tst-foo-ENV += GLIBC_TUNABLES=tunable=value\n> \n> However, if two or more tunables need to be set for the same test,\n> the 'tunable=value' part should be appended to previously defined\n> GLIBC_TUNABLES env variable.\n> \n> This commit adds 'tunable-add' that can be used to correctly append\n> another tunable to a test's environment. We also change tests in the\n> malloc and misc folder.\n> \n> ---\n> base-commit: 9f5f18aab4\n> passes regression on aarch64 and x86-64\n\nPolite ping :)","headers":{"Return-Path":"<libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org>","X-Original-To":["incoming@patchwork.ozlabs.org","libc-alpha@sourceware.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","libc-alpha@sourceware.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=nPnv06aW;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=nPnv06aW;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=selector1 header.b=nPnv06aW;\n\tdkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com\n header.a=rsa-sha256 header.s=selector1 header.b=nPnv06aW","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=arm.com","sourceware.org; spf=pass smtp.mailfrom=arm.com","server2.sourceware.org;\n arc=pass smtp.remote-ip=2a01:111:f403:c200::5"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fsY293G70z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 20:29:21 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 72BDF4BA23C2\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 10:29:19 +0000 (GMT)","from DUZPR83CU001.outbound.protection.outlook.com\n (mail-northeuropeazlp170120005.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c200::5])\n by sourceware.org (Postfix) with ESMTPS id AD86F4BA23C3\n for <libc-alpha@sourceware.org>; Fri, 10 Apr 2026 10:28:55 +0000 (GMT)","from DUZPR01CA0222.eurprd01.prod.exchangelabs.com\n (2603:10a6:10:4b4::29) by DBBPR08MB10433.eurprd08.prod.outlook.com\n (2603:10a6:10:52f::10) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Fri, 10 Apr\n 2026 10:28:49 +0000","from DB1PEPF000509E8.eurprd03.prod.outlook.com\n (2603:10a6:10:4b4:cafe::f6) by DUZPR01CA0222.outlook.office365.com\n (2603:10a6:10:4b4::29) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.42 via Frontend Transport; Fri,\n 10 Apr 2026 10:28:49 +0000","from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by\n DB1PEPF000509E8.mail.protection.outlook.com (10.167.242.58) with Microsoft\n SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.17\n via Frontend Transport; Fri, 10 Apr 2026 10:28:49 +0000","from CWLP123CA0266.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:1d5::15)\n by DU0PR08MB8138.eurprd08.prod.outlook.com (2603:10a6:10:3ed::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.42; Fri, 10 Apr\n 2026 10:27:41 +0000","from AMS1EPF0000008E.eurprd05.prod.outlook.com\n (2603:10a6:400:1d5:cafe::95) by CWLP123CA0266.outlook.office365.com\n (2603:10a6:400:1d5::15) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.42 via Frontend Transport; Fri,\n 10 Apr 2026 10:27:41 +0000","from nebula.arm.com (172.205.89.229) by\n AMS1EPF0000008E.mail.protection.outlook.com (10.167.242.85) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9769.17 via Frontend Transport; Fri, 10 Apr 2026 10:27:40 +0000","from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX04.Arm.com\n (10.240.25.138) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Fri, 10 Apr\n 2026 10:27:39 +0000","from arm.com (10.57.20.43) by mail.arm.com (10.240.25.138) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29 via Frontend\n Transport; Fri, 10 Apr 2026 10:27:39 +0000"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 72BDF4BA23C2","OpenDKIM Filter v2.11.0 sourceware.org AD86F4BA23C3"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org AD86F4BA23C3","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org AD86F4BA23C3","ARC-Seal":["i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1775816937; cv=pass;\n b=p3ju+znHoSgLnGRAadYAedZW7gERzuEoKLIDoxQtpBN0BwgJ82DaXLks8NvPhUVeAK2pSPChmeQ9mQu4LS7k6Lopjk4g55+L/pvPZqWPHl+n20CdoDsvbviVR9roVcRu25OmD3m0Sbyc0iLgTphdbiS8WGr/BvatJzQ8zthcDzs=","i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass;\n b=KqS+y8Ue2fIuv6rF3Iaq16i9SHyeIjLHFntetRhrCzRPM2eIuHjbcTVV1ziYyPGuq2bO3wa7+xVblIYRNHuWiXne6P7d2u4h7THaKaVQTvLE7QdlqXRz7SUXeIPT4s0KHKqXYEoJMI2i9TDvpn8RRRufwFfEmwT5rpPQ+jDLyF3vPdkrT9rI2UkGYi/3Gzlj/TquSM6Q2KF6G6EoLu6vk9cEpDOuzX+E5OrYKnRPr8nqDFyGWpFwO/Nbq/opKxa65XDMT6Hab8Z8/KaXwfdt+TsxAj5hsQF5JP4A7nFDLQfrA5hmW0vaMSLdQijgTmchvWXWyXKugU+5y4TQ/PX4Gw==","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=OJmo/ZTQY5KeAFZOVMFLeE5RNvwekBxnybdom+vXSR2p5WmKqGiMagpj10nmJ0Dok8+QGcsRvkU00Zl3D582c2URlSr5+e8VHf/RdSwXPQnQtVh6x+st7wDxFByvwT4EkPxuroqV6ag1ZC2fLVsHMJndII6M8s7neiKQ5sFHYYLFIE+uO2CRIuI0V4jdKK28b9IfG8YwAlBHxboqpGbXIgm29YVOzXkznWOGdlT1EtIBpLqh4FhV9kWT2SlEOjLu1RgB6/7LVB5etrIq1GI1ZAvUJOcjSljATE9rehanLIVvTavUVL5OtCZ/WCsPn8VY3YX850q/tv42gTEPG2Lxhg=="],"ARC-Message-Signature":["i=3; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775816937; c=relaxed/simple;\n bh=/dhWextyD4EfTDm8Eqwk/7mhJwHDUyfCht+kB7jjguo=;\n h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID:\n MIME-Version;\n b=YjnUtzQw7BM9SY2WeUcmbNxPF0kyFJTPqiTjewaBOeW9eWEscUcb+wmQaLOwEX7qBy//scR42uDyMtzEqOxK5/toa/xOKVM6CySy1cKTDLLa6XhS4om7d0uH+/84hL6w4F48ey35AhvrehYUSbQuqJ0De4hSPHdL0n8q6Ho3Csg=","i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=BWbOsfmeCQOe2TdblvbB/D3cxjfXuci116PQ6C6n6l0=;\n b=FgfuIwIhq28bckTvrD+en2s7pv7U8YIaJQgtt2SeyCNX9d51slZZxA98WHuSGR9rWL7ShS5tDHClIfr4KoJhpjWnS8F8gOb3jYRrweAuzh7I7UVqluw20Dxd/A46vJsyHtOiFyQ3lvOkIMIM8RZt5q582sW+LD87xF+CO4WFerG7kl5rjEFkKdhX9qitE53k10N6OCYCgEgetH3gHPAzpQGPiGEP9aSSph4l+Mdgyttz2TJt4REGpl7Ck1BbHstpFGLxioiXPREXITfOa5LKRQINDjyh1XutST4VXtwAkNydksQGu7NPFX1TJc8qE3JmyMQ1W4XvTr8tmLwcLpDRuw==","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=BWbOsfmeCQOe2TdblvbB/D3cxjfXuci116PQ6C6n6l0=;\n b=CEOwFPoGygbwahWM+VXkM1l6X0q2s/ecc606cacqQnOfPvK3ZclvmB/GS3xePG6BjHZzWcEFcjLIjaXu5SgiQNgP9BBQ/enOZ5bswliOR85aGPu6h6226rLuFyMfF1eOBgrgpA8kPPmK4R+Fa48J+Hl39USNYSGf7XaDZuJzZp/O9xXqyw95sYq8mfj6dZ1/flTiWm/wmmxdH2nTam9atyHnWWBjmtJgr+EeIOuEkydWYcKuSMjabhFwm+0tHYrgcGMulCggWLnmnMTgz1zx20IM8DBW2dr+KHg0Kfgf8V8XRNi6mhnh+iOi4uqfKdbww478krXsGjsBZbebzvs7+w=="],"ARC-Authentication-Results":["i=3; server2.sourceware.org","i=2; mx.microsoft.com 1; spf=pass (sender ip is\n 4.158.2.129) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;\n dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1\n spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com])","i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 172.205.89.229) smtp.rcpttodomain=sourceware.org smtp.mailfrom=arm.com;\n dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com;\n dkim=none (message not signed); arc=none (0)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BWbOsfmeCQOe2TdblvbB/D3cxjfXuci116PQ6C6n6l0=;\n b=nPnv06aW1AtKAmP16wMKNSWxPJdjKqguhWCoxjkSZbE0ZrmqMkY7KPYYudOL6yL6o7M5JYuyrezJPrrhPEQFV/vWmAfyIO3E9EwzND8EmeA6im54cbivDz4JDuiOzjGWWRwC8qVjQKuC75hQHwukoQAW7PBnTZXm3T5ab29hjrM=","v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BWbOsfmeCQOe2TdblvbB/D3cxjfXuci116PQ6C6n6l0=;\n b=nPnv06aW1AtKAmP16wMKNSWxPJdjKqguhWCoxjkSZbE0ZrmqMkY7KPYYudOL6yL6o7M5JYuyrezJPrrhPEQFV/vWmAfyIO3E9EwzND8EmeA6im54cbivDz4JDuiOzjGWWRwC8qVjQKuC75hQHwukoQAW7PBnTZXm3T5ab29hjrM="],"X-MS-Exchange-Authentication-Results":["spf=pass (sender IP is 4.158.2.129)\n smtp.mailfrom=arm.com; dkim=pass (signature was verified)\n header.d=arm.com;dmarc=pass action=none header.from=arm.com;","spf=pass (sender IP is 172.205.89.229)\n smtp.mailfrom=arm.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=arm.com;"],"Received-SPF":["Pass (protection.outlook.com: domain of arm.com designates\n 4.158.2.129 as permitted sender) receiver=protection.outlook.com;\n client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C","Pass (protection.outlook.com: domain of arm.com designates\n 172.205.89.229 as permitted sender) receiver=protection.outlook.com;\n client-ip=172.205.89.229; helo=nebula.arm.com; pr=C"],"Date":"Fri, 10 Apr 2026 11:27:38 +0100","From":"Yury Khrustalev <yury.khrustalev@arm.com>","To":"<libc-alpha@sourceware.org>","CC":"Adhemerval Zanella <adhemerval.zanella@linaro.org>, Florian Weimer\n <fweimer@redhat.com>, Wilco Dijkstra <wilco.dijkstra@arm.com>","Subject":"Re: [PATCH] tests: allow tests to append tunables","Message-ID":"<adjQmoIgDWLx1yPg@arm.com>","References":"<20260324141438.3094802-1-yury.khrustalev@arm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Disposition":"inline","In-Reply-To":"<20260324141438.3094802-1-yury.khrustalev@arm.com>","X-EOPAttributedMessage":"1","X-MS-TrafficTypeDiagnostic":"\n AMS1EPF0000008E:EE_|DU0PR08MB8138:EE_|DB1PEPF000509E8:EE_|DBBPR08MB10433:EE_","X-MS-Office365-Filtering-Correlation-Id":"cffb3060-35df-4314-44fa-08de96ebf43b","x-checkrecipientrouted":"true","NoDisclaimer":"true","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam-Untrusted":"BCL:0;\n ARA:13230040|1800799024|36860700016|376014|82310400026|22082099003|56012099003|18002099003;","X-Microsoft-Antispam-Message-Info-Original":"\n BGzwv+PApHa+CYkAnRbaJ63dpFzqYy3sja60TICRE9+TGEtKX7hjPjXUZH2lrjpvqAGEL/WWowLy3e+DC+F9dnaHjP1jk+ZEFlgxCs2M4wIPUgADqvIOoPSWachSudcK+BkFZPtrd+R4/PRLLRVAddYbfNVJgyegVUR2w2vLNOyEdtyvottCXCzLZoReuGlMDBTaZK/8gZwRQ7Qy2sgnjzMfetbpV+XfjW54jZv4gw88m6AqrOOAPhiRIaF6nEuOpTNWr4UwoRZrGAlrsTZXtL4skJszE38yPO4EFdhEBB3nk0E1fpjTSKqhAX/V6oLQ5a5qEx5ljiiMH8AfX0TpOZS3NpGrWgF2LR/KpB1k9c3Ad23gPAWVSiAWetSE0DHGmqJItBhUTlOxJ/xgzOAUpyYR32uWCH+82vWmPu2yHu3brddqTN3QvQyGGa5WvUEbQdPBD82/DqwnEJ7BQW+9EO8ygZcVzlbLhMO2ZNZGm7CSRPslpJEb0ivVmWKxGA/Tf9jmgWHko+QRjgWSo8cZQqO7yDzi4COK/cbdE9BR85R41zJUO1gqcDZMcoqUKCtus9CEoxEERFO5JERzRgXS0Izhnu/rDowu4OSlnp5azZeX0k43fh+kGnc6nEE/msatXSaOJjn3BbitLTWhfKgilpA3Y76FD0uliSDpIvLVcVSUKKuMlhSyPg21Lr0lzA7J7BFzzgaqp7OQxH2VVvzCYQx5XVWockqStOGr6KPJSE1QFR3JNjmouB6fDnCoPCl3U3XW5H/oEQKKGxRGTFX9vA==","X-Forefront-Antispam-Report-Untrusted":"CIP:172.205.89.229; CTRY:IE; LANG:en;\n SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent;\n CAT:NONE;\n SFS:(13230040)(1800799024)(36860700016)(376014)(82310400026)(22082099003)(56012099003)(18002099003);\n DIR:OUT; SFP:1101;","X-Exchange-RoutingPolicyChecked":"\n J+sE2TNW2ViRKau25EGUiTNvWK0md/0CNPt0yd3stkimHU+ItOM7p4/oWMmRpNoXJnPBIiJZjWPclGGwZPejUnCqKSpUVFCZMoEUxEKgaGXdaxc6Ar56tKYHshRxYJOp8Uqe/gQI4S2SkhSWthC1E/SXS/YqF6yEsNeIhTh54XwiN/X0jPYMENRyHlIS7kcrDitXQx4CxzKTB0oFTyVFdWyCBhdYifhCLzyUHwibnMZPpXm1M9QW3aQcb+oY7CpyumYTpfFlCuGHwmmIzLw86/0omT9nrElhL4c4mDuODz4ivfVsWR1fwKv5qun7e19QqwnuG2nHazTl8Ebb06bASw==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":["DU0PR08MB8138","DBBPR08MB10433"],"X-MS-Exchange-Transport-CrossTenantHeadersStripped":"\n DB1PEPF000509E8.eurprd03.prod.outlook.com","X-MS-PublicTrafficType":"Email","X-MS-Office365-Filtering-Correlation-Id-Prvs":"\n cc89f63f-0f74-4d58-8fb1-08de96ebcb8f","X-Microsoft-Antispam":"BCL:0;\n ARA:13230040|376014|1800799024|14060799003|36860700016|35042699022|82310400026|22082099003|56012099003|18002099003;","X-Microsoft-Antispam-Message-Info":"\n XKHP+tNV9zjEeozMt9nqUB76nN/OaVIuv7fbF2EPLlECZRdkXz8SB7nk5lE/bKpMRao+MyHvXDzlizDN02hwt49u1lhmxTL71D2QTw5ZDVLHJs2fw1N5jHeRrlZHiHtYRQNjTlce0uxhEXXO/vYBlAxM5Pok8qNSI9PW5GXzF6RD1OdUb6SAYZnX/oSjAus9NkjWf9ufVcoeRpbIK163zUylVz/7RWp9daEVk9ouCuSX7dGPeDAH9KBFRa2nPwjm5ZdoO6WiUSiompzSpoalj11Gp9qWsIBftX0C39Gh8a+u3xpzm7kF9xiYuEzIvt6Yursldcn7fXUQlTmnGd3T09s11ScgWB/jk5Ztc8cuXuwG0WmoZNMMf/4eSxKDWCCDzHV3l+xHBJdCDrVMiMiCLQhB2U5z91UHrbqpFdiXbOzuvWkRXpNaWvqbbphvIQ8iIOCGqOFiuLh1zyavV4troJKcZVKidUn44AyzYl1CJ6UQfz6oPtwpZrLipcHHMF4ZdAm1KS0r3tibavHuTb2qLue1JXxjH1MaGUS+tTB3rIW1R5FwAfyCJAYfBxWJwww8zm8rjiWhC81lB/+FMxLNy/9hFhIyqJnPaIqolhkhLWaK1iLgfBg82cSnZJNxEl6Qwb5o7EpjmGmIRHaqfxY+phAEFTAI8N/zCngoW4yIe155GUugUT2SR4b0Ps2qlK7rsCIFwXlOWZs2B0rtIeBwQZfu1knjvntTQkowB5kvngEvD6IeNjxpJVvFgCiWv1vAw+Xgmuvjh0uYwoZrD/BQVA==","X-Forefront-Antispam-Report":"CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com;\n PTR:InfoDomainNonexistent; CAT:NONE;\n SFS:(13230040)(376014)(1800799024)(14060799003)(36860700016)(35042699022)(82310400026)(22082099003)(56012099003)(18002099003);\n DIR:OUT; SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n wCOQdNgYKVVrGzRU3/xlg+CagJAkmGELyggpcy2xXawpylt+67rsaN/EQPudso8bxdCt4EqTlj5tG4rGTLK7Iz/qfGzm24QTVOZZloGkJS5tX3cAC59frJvrBNrFjns+aS8JS3GEPRTcMTW4DV26/LbIbLHFjrExarUk/WdOiEApApS5vvDBub1M9dInK2g6WY6owRFrWwJ1/cwlLy8ll/oWu/Vn+GMFpSVUrOxmerlxl6zjFHrUqPwhfMjtFX8T9z6slPIj4aaMOkYOIh+CGpLUs1Zp/r1yoF864GNi3oNml+0nM/8DKRKluEtEJ+6/w9MQ05Zga4Xe7wrLwkH/zC4p/7+3SYxxLyY3sGcBkXvAs1Rw+AXPEbMmX4Qktjk5iZ1/shH9tBNvRpXJUJdCthO50Zusn5QHFhKtOzx7AEiQeHS5PU9o/tErPX9nW6+9","X-OriginatorOrg":"arm.com","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"10 Apr 2026 10:28:49.1194 (UTC)","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n cffb3060-35df-4314-44fa-08de96ebf43b","X-MS-Exchange-CrossTenant-Id":"f34e5979-57d9-4aaa-ad4d-b122a662184d","X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp":"\n TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129];\n Helo=[outbound-uk1.az.dlp.m.darktrace.com]","X-MS-Exchange-CrossTenant-AuthSource":"\n DB1PEPF000509E8.eurprd03.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Anonymous","X-MS-Exchange-CrossTenant-FromEntityHeader":"HybridOnPrem","X-BeenThere":"libc-alpha@sourceware.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Libc-alpha mailing list <libc-alpha.sourceware.org>","List-Unsubscribe":"<https://sourceware.org/mailman/options/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe>","List-Archive":"<https://sourceware.org/pipermail/libc-alpha/>","List-Post":"<mailto:libc-alpha@sourceware.org>","List-Help":"<mailto:libc-alpha-request@sourceware.org?subject=help>","List-Subscribe":"<https://sourceware.org/mailman/listinfo/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=subscribe>","Errors-To":"libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org"}},{"id":3677371,"web_url":"http://patchwork.ozlabs.org/comment/3677371/","msgid":"<53ce1324-63a9-488b-955b-99700e4fdcd6@linaro.org>","list_archive_url":null,"date":"2026-04-14T19:25:01","subject":"Re: [PATCH] tests: allow tests to append tunables","submitter":{"id":66065,"url":"http://patchwork.ozlabs.org/api/people/66065/","name":"Adhemerval Zanella Netto","email":"adhemerval.zanella@linaro.org"},"content":"On 24/03/26 11:14, Yury Khrustalev wrote:\n> Many tests use Glibc tunables. The tunable values are provided via\n> the GLIBC_TUNABLES env variable. Tests set it in makefiles using\n> \n>   tst-foo-ENV = GLIBC_TUNABLES=tunable=value\n> \n> This overwrites environment for this test, so if another env var is\n> set elsewhere, one of these changes would be lost. The correct way\n> should be to append to test's environment:\n> \n>   tst-foo-ENV += GLIBC_TUNABLES=tunable=value\n> \n> However, if two or more tunables need to be set for the same test,\n> the 'tunable=value' part should be appended to previously defined\n> GLIBC_TUNABLES env variable.\n> \n> This commit adds 'tunable-add' that can be used to correctly append\n> another tunable to a test's environment. We also change tests in the\n> malloc and misc folder.\n> \n> ---\n> base-commit: 9f5f18aab4\n> passes regression on aarch64 and x86-64\n\nIt is not clear to me why we need tunables to be composable.  I would \nexpect that cflags, ldflags, and any other build definition to might \nrequire arch specific overrides.\n\nAlso using a make rule to is not much ergonomic, it requires to trace all\nthe previous ENV and other definitions to have the final tunable value.\nI think it is more clear to have clear place where the testing setup is\nset.\n\nMaybe something move simpler would to have:\n\n  tst-foo-TUNABLE1 = ...:\n  tst-foo-TUNABLE2 += ...\n\nand then a rule to join all of them.\n\nWhat kind of testing setup you are working with that requires it? \n\n> \n> ---\n>  Makeconfig                               |  12 +++\n>  Rules                                    |  12 +--\n>  malloc/Makefile                          |  53 +++++-----\n>  sysdeps/unix/sysv/linux/aarch64/Makefile | 117 +++++++++++------------\n>  4 files changed, 99 insertions(+), 95 deletions(-)\n> \n> diff --git a/Makeconfig b/Makeconfig\n> index 8fe7217dd7..9e01489ff9 100644\n> --- a/Makeconfig\n> +++ b/Makeconfig\n> @@ -1479,6 +1479,18 @@ evaluate-test = $(..)scripts/evaluate-test.sh $(test-name) $$? \\\n>  \n>  endif # Makeconfig not yet included\n>  \n> +# Correctly modify Glibc tunable environment variable for the test\n> +# appending new param=value to the environment variable if it is\n> +# already defined for this test:\n> +# $(1) is test name and $(2) is param=value part that needs to be\n> +# appended to the value of the GLIBC_TUNABLES variable.\n> +define tunable-add\n> +$(1)-ENV = $(if \\\n> +$(findstring GLIBC_TUNABLES,$($(1)-ENV)),\\\n> +$(patsubst GLIBC_TUNABLES=%,GLIBC_TUNABLES=%:$(2),$($(1)-ENV)),\\\n> +$($(1)-ENV) GLIBC_TUNABLES=$(2))\n> +endef\n> +\n>  # Local Variables:\n>  # mode: makefile\n>  # End:\n> diff --git a/Rules b/Rules\n> index 9d8587a148..427a7535a4 100644\n> --- a/Rules\n> +++ b/Rules\n> @@ -343,32 +343,32 @@ endif\n>  \n>  # All malloc-check tests will be run with MALLOC_CHECK_=3\n>  define malloc-check-ENVS\n> -$(1)-malloc-check-ENV = MALLOC_CHECK_=3 \\\n> -\t\t\tLD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so\n> +$(1)-malloc-check-ENV += MALLOC_CHECK_=3 \\\n> +\t\t\tLD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n>  endef\n>  $(foreach t,$(tests-malloc-check),$(eval $(call malloc-check-ENVS,$(t))))\n>  \n>  # All malloc-hugetlb1 tests will be run with GLIBC_TUNABLES=glibc.malloc.hugetlb=1\n>  define malloc-hugetlb1-ENVS\n> -$(1)-malloc-hugetlb1-ENV += GLIBC_TUNABLES=glibc.malloc.hugetlb=1\n> +$(call tunable-add,$(1)-malloc-hugetlb1,glibc.malloc.hugetlb=1)\n>  endef\n>  $(foreach t,$(tests-malloc-hugetlb1),$(eval $(call malloc-hugetlb1-ENVS,$(t))))\n>  \n>  # All malloc-hugetlb2 tests will be run with GLIBC_TUNABLE=glibc.malloc.hugetlb=2\n>  define malloc-hugetlb2-ENVS\n> -$(1)-malloc-hugetlb2-ENV += GLIBC_TUNABLES=glibc.malloc.hugetlb=2\n> +$(call tunable-add,$(1)-malloc-hugetlb2,glibc.malloc.hugetlb=2)\n>  endef\n>  $(foreach t,$(tests-malloc-hugetlb2),$(eval $(call malloc-hugetlb2-ENVS,$(t))))\n>  \n>  # All malloc-largetcache tests will be run with GLIBC_TUNABLE=glibc.malloc.tcache_max=1048576\n>  define malloc-largetcache-ENVS\n> -$(1)-malloc-largetcache-ENV += GLIBC_TUNABLES=glibc.malloc.tcache_max=1048576\n> +$(call tunable-add,$(1)-malloc-largetcache,glibc.malloc.tcache_max=1048576)\n>  endef\n>  $(foreach t,$(tests-malloc-largetcache),$(eval $(call malloc-largetcache-ENVS,$(t))))\n>  \n>  # mcheck tests need the debug DSO to support -lmcheck.\n>  define mcheck-ENVS\n> -$(1)-mcheck-ENV = LD_PRELOAD=$(common-objpfx)/malloc/libc_malloc_debug.so\n> +$(1)-mcheck-ENV += LD_PRELOAD=$(common-objpfx)malloc/libc_malloc_debug.so\n>  endef\n>  $(foreach t,$(tests-mcheck),$(eval $(call mcheck-ENVS,$(t))))\n>  \n> diff --git a/malloc/Makefile b/malloc/Makefile\n> index fef5021298..ba540016f3 100644\n> --- a/malloc/Makefile\n> +++ b/malloc/Makefile\n> @@ -437,18 +437,18 @@ endif\n>  malloc-check-env = \\\n>    MALLOC_CHECK_=3 \\\n>    LD_PRELOAD=$(objpfx)/libc_malloc_debug.so\n> -\n> -malloc-check-tunables-env = \\\n> -  GLIBC_TUNABLES=glibc.malloc.check=3 \\\n> -  LD_PRELOAD=$(objpfx)/libc_malloc_debug.so\n> -\n> -tst-malloc-check-ENV = $(malloc-check-env)\n> -tst-malloc-usable-ENV = $(malloc-check-env)\n> -tst-malloc-usable-threaded-main-ENV = $(malloc-check-env)\n> -tst-malloc-usable-threaded-worker-ENV = $(malloc-check-env)\n> -tst-malloc-usable-tunables-ENV = $(malloc-check-tunables-env)\n> -tst-malloc-usable-tunables-threaded-main-ENV = $(malloc-check-tunables-env)\n> -tst-malloc-usable-tunables-threaded-worker-ENV = $(malloc-check-tunables-env)\n> +tst-malloc-check-ENV += $(malloc-check-env)\n> +tst-malloc-usable-ENV += $(malloc-check-env)\n> +tst-malloc-usable-threaded-main-ENV += $(malloc-check-env)\n> +tst-malloc-usable-threaded-worker-ENV += $(malloc-check-env)\n> +\n> +malloc-check-tunables-env = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-malloc-usable-tunables-ENV += $(malloc-check-tunables-env)\n> +tst-malloc-usable-tunables-threaded-main-ENV += $(malloc-check-tunables-env)\n> +tst-malloc-usable-tunables-threaded-worker-ENV += $(malloc-check-tunables-env)\n> +$(eval $(call tunable-add,tst-malloc-usable-tunables,glibc.malloc.check=3))\n> +$(eval $(call tunable-add,tst-malloc-usable-tunables-threaded-main,glibc.malloc.check=3))\n> +$(eval $(call tunable-add,tst-malloc-usable-tunables-threaded-worker,glibc.malloc.check=3))\n>  \n>  CPPFLAGS-malloc-debug.c += -DUSE_TCACHE=0\n>  CPPFLAGS-malloc.c += -DUSE_TCACHE=1\n> @@ -489,32 +489,31 @@ $(objpfx)tst-interpose-static-nothread: $(objpfx)tst-interpose-aux-nothread.o\n>  $(objpfx)tst-interpose-static-thread: \\\n>    $(objpfx)tst-interpose-aux-thread.o $(static-thread-library)\n>  \n> -tst-dynarray-ENV = MALLOC_TRACE=$(objpfx)tst-dynarray.mtrace \\\n> +tst-dynarray-ENV += MALLOC_TRACE=$(objpfx)tst-dynarray.mtrace \\\n>  \t\t   LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-dynarray-mem.out: $(objpfx)tst-dynarray.out\n>  \t$(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray.mtrace > $@; \\\n>  \t$(evaluate-test)\n>  \n> -tst-dynarray-fail-ENV = MALLOC_TRACE=$(objpfx)tst-dynarray-fail.mtrace \\\n> +tst-dynarray-fail-ENV += MALLOC_TRACE=$(objpfx)tst-dynarray-fail.mtrace \\\n>  \t\t\tLD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-dynarray-fail-mem.out: $(objpfx)tst-dynarray-fail.out\n>  \t$(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray-fail.mtrace > $@; \\\n>  \t$(evaluate-test)\n>  \n> -tst-compathooks-on-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> -tst-compathooks-on-mcheck-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> -tst-compathooks-on-malloc-check-ENV = \\\n> +tst-compathooks-on-ENV += LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-compathooks-on-mcheck-ENV += LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-compathooks-on-malloc-check-ENV += \\\n>  \tLD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> -tst-mallocstate-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> -tst-mallocstate-malloc-check-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-mallocstate-ENV += LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  \n>  # The test needs malloc_get_state/malloc_set_state which is in\n>  # libc_malloc_debug.so.\n>  $(objpfx)tst-mallocstate: $(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-mallocstate-malloc-check: $(objpfx)libc_malloc_debug.so\n> -tst-mallocstate-threaded-main-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-mallocstate-threaded-main-ENV += LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-mallocstate-threaded-main: $(objpfx)libc_malloc_debug.so\n> -tst-mallocstate-threaded-worker-ENV = LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n> +tst-mallocstate-threaded-worker-ENV += LD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-mallocstate-threaded-worker: $(objpfx)libc_malloc_debug.so\n>  \n>  $(objpfx)tst-aligned-alloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n> @@ -522,18 +521,18 @@ $(objpfx)tst-aligned-alloc-random-thread.out: $(objpfx)tst-aligned_alloc-lib.so\n>  $(objpfx)tst-aligned-alloc-random-thread-cross.out: $(objpfx)tst-aligned_alloc-lib.so\n>  $(objpfx)tst-malloc-random.out: $(objpfx)tst-aligned_alloc-lib.so\n>  \n> -tst-aligned-alloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> -tst-aligned-alloc-random-thread-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> -tst-aligned-alloc-random-thread-cross-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> -tst-malloc-random-ENV = LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> +tst-aligned-alloc-random-ENV += LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> +tst-aligned-alloc-random-thread-ENV += LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> +tst-aligned-alloc-random-thread-cross-ENV += LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n> +tst-malloc-random-ENV += LD_PRELOAD=$(objpfx)tst-aligned_alloc-lib.so\n>  \n> -tst-free-aligned-sized-trace-ENV = MALLOC_TRACE=$(objpfx)tst-free-aligned-sized-mem.mtrace \\\n> +tst-free-aligned-sized-trace-ENV += MALLOC_TRACE=$(objpfx)tst-free-aligned-sized-mem.mtrace \\\n>  \tLD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-free-aligned-sized-mtrace.out: $(objpfx)tst-free-aligned-sized-trace.out\n>  \t$(common-objpfx)malloc/mtrace $(objpfx)tst-free-aligned-sized-mem.mtrace > $@; \\\n>  \t$(evaluate-test)\n>  \n> -tst-free-sized-trace-ENV = MALLOC_TRACE=$(objpfx)tst-free-sized-mem.mtrace \\\n> +tst-free-sized-trace-ENV += MALLOC_TRACE=$(objpfx)tst-free-sized-mem.mtrace \\\n>  \tLD_PRELOAD=$(objpfx)libc_malloc_debug.so\n>  $(objpfx)tst-free-sized-mtrace.out: $(objpfx)tst-free-sized-trace.out\n>  \t$(common-objpfx)malloc/mtrace $(objpfx)tst-free-sized-mem.mtrace > $@; \\\n> diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile\n> index 57461fded7..2270027286 100644\n> --- a/sysdeps/unix/sysv/linux/aarch64/Makefile\n> +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile\n> @@ -70,21 +70,18 @@ $(objpfx)tst-bti-ld-debug-dlopen.out: $(objpfx)tst-bti-mod-unprot.so\n>  $(objpfx)tst-bti-permissive-dlopen.out: $(objpfx)tst-bti-mod-unprot.so\n>  \n>  $(objpfx)tst-bti-abort-unprot-preload.out: $(objpfx)tst-bti-mod-unprot-preload.so\n> -tst-bti-abort-unprot-preload-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1 \\\n> -  LD_PRELOAD=$(objpfx)tst-bti-mod-unprot-preload.so\n> +$(eval $(call tunable-add,tst-bti-abort-unprot-preload,glibc.cpu.aarch64_bti=1))\n> +tst-bti-abort-unprot-preload-ENV += LD_PRELOAD=$(objpfx)tst-bti-mod-unprot-preload.so\n>  \n>  $(objpfx)tst-bti-dep-prot-preload.out: $(objpfx)tst-bti-mod-prot-preload.so\n>  # The 'fun' function will be provided by the preload library\n>  LDFLAGS-tst-bti-dep-prot-preload = -Wl,--unresolved-symbols=ignore-all\n> -tst-bti-dep-prot-preload-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0 \\\n> -  LD_PRELOAD=$(objpfx)tst-bti-mod-prot-preload.so\n> +$(eval $(call tunable-add,tst-bti-dep-prot-preload,glibc.cpu.aarch64_bti=0))\n> +tst-bti-dep-prot-preload-ENV += LD_PRELOAD=$(objpfx)tst-bti-mod-prot-preload.so\n>  \n>  $(objpfx)tst-bti-permissive-preload.out: $(objpfx)tst-bti-mod-unprot-preload.so\n> -tst-bti-permissive-preload-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0 \\\n> -  LD_PRELOAD=$(objpfx)tst-bti-mod-unprot-preload.so\n> +$(eval $(call tunable-add,tst-bti-permissive-preload,glibc.cpu.aarch64_bti=0))\n> +tst-bti-permissive-preload-ENV += LD_PRELOAD=$(objpfx)tst-bti-mod-unprot-preload.so\n>  \n>  CFLAGS-tst-bti-abort-unprot.o += -mbranch-protection=none\n>  CFLAGS-tst-bti-ld-debug-exe.o += -mbranch-protection=none\n> @@ -93,17 +90,17 @@ CFLAGS-tst-bti-mod-unprot.os += -mbranch-protection=none\n>  CFLAGS-tst-bti-mod-unprot-preload.os += -mbranch-protection=none\n>  CFLAGS-tst-bti-mod-unprot-audit.os += -mbranch-protection=none\n>  \n> -tst-bti-abort-imm-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-abort-transitive-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-abort-unprot-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-dep-prot-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-dlopen-imm-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-dlopen-prot-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> -tst-bti-dlopen-transitive-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> +$(eval $(call tunable-add,tst-bti-abort-imm,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-abort-transitive,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-abort-unprot,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-dep-prot,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-dlopen-imm,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-dlopen-prot,glibc.cpu.aarch64_bti=1))\n> +$(eval $(call tunable-add,tst-bti-dlopen-transitive,glibc.cpu.aarch64_bti=1))\n>  \n> -tst-bti-permissive-imm-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0\n> -tst-bti-permissive-transitive-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0\n> -tst-bti-permissive-dlopen-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0\n> +$(eval $(call tunable-add,tst-bti-permissive-imm,glibc.cpu.aarch64_bti=0))\n> +$(eval $(call tunable-add,tst-bti-permissive-transitive,glibc.cpu.aarch64_bti=0))\n> +$(eval $(call tunable-add,tst-bti-permissive-dlopen,glibc.cpu.aarch64_bti=0))\n>  \n>  $(objpfx)tst-bti-unprot-audit.out: $(objpfx)tst-bti-mod-unprot-audit.so\n>  tst-bti-unprot-audit-ARGS = -- $(host-test-program-cmd)\n> @@ -112,7 +109,7 @@ $(objpfx)tst-bti-prot-audit.out: $(objpfx)tst-bti-mod-prot-audit.so\n>  $(objpfx)tst-bti-prot-audit: $(objpfx)tst-bti-mod-prot.so\n>  tst-bti-prot-audit-ARGS = -- $(host-test-program-cmd)\n>  \n> -tst-bti-permissive-audit-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=0\n> +$(eval $(call tunable-add,tst-bti-permissive-audit,glibc.cpu.aarch64_bti=0))\n>  $(objpfx)tst-bti-permissive-audit.out: $(objpfx)tst-bti-mod-unprot-audit.so\n>  $(objpfx)tst-bti-permissive-audit: $(objpfx)tst-bti-mod.so\n>  tst-bti-permissive-audit-ARGS = -- $(host-test-program-cmd)\n> @@ -131,7 +128,7 @@ tests-static += \\\n>    tst-bti-abort-static \\\n>    # tests-static\n>  \n> -tst-bti-abort-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_bti=1\n> +$(eval $(call tunable-add,tst-bti-abort-static,glibc.cpu.aarch64_bti=1))\n>  CFLAGS-tst-bti-abort-static.o += -mbranch-protection=none\n>  \n>  $(objpfx)tst-bti-ld-debug-%.out: $(..)elf/tst-dl-debug-protect.sh $(objpfx)tst-bti-ld-debug-%\n> @@ -224,37 +221,37 @@ LDFLAGS-tst-gcs-optional-static-on += -Wl,-z,gcs=always\n>  LDFLAGS-tst-gcs-optional-static-off += -Wl,-z,gcs=never\n>  LDFLAGS-tst-gcs-override-static += -Wl,-z,gcs=never\n>  \n> -tst-gcs-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0\n> -tst-gcs-enforced-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-enforced-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-optional-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-optional-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3\n> +$(eval $(call tunable-add,tst-gcs-disabled,glibc.cpu.aarch64_gcs=0))\n> +$(eval $(call tunable-add,tst-gcs-enforced,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-enforced-abort,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-optional-on,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-optional-off,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-override,glibc.cpu.aarch64_gcs=3))\n>  \n> -tst-gcs-disabled-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0\n> -tst-gcs-enforced-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-enforced-static-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-optional-static-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-optional-static-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-override-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3\n> +$(eval $(call tunable-add,tst-gcs-disabled-static,glibc.cpu.aarch64_gcs=0))\n> +$(eval $(call tunable-add,tst-gcs-enforced-static,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-enforced-static-abort,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-optional-static-on,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-optional-static-off,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-override-static,glibc.cpu.aarch64_gcs=3))\n>  \n>  LDFLAGS-tst-gcs-execv += -Wl,-z,gcs=always\n> -tst-gcs-execv-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> +$(eval $(call tunable-add,tst-gcs-execv,glibc.cpu.aarch64_gcs=1))\n>  tst-gcs-execv-ARGS = -- $(host-test-program-cmd)\n>  LDFLAGS-tst-gcs-fork += -Wl,-z,gcs=always\n> -tst-gcs-fork-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> +$(eval $(call tunable-add,tst-gcs-fork,glibc.cpu.aarch64_gcs=2))\n>  \n>  LDFLAGS-tst-gcs-lock += -Wl,-z,gcs=always\n> -tst-gcs-lock-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> +$(eval $(call tunable-add,tst-gcs-lock,glibc.cpu.aarch64_gcs=1))\n>  LDFLAGS-tst-gcs-lock-ptrace += -Wl,-z,gcs=always\n> -tst-gcs-lock-ptrace-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> +$(eval $(call tunable-add,tst-gcs-lock-ptrace,glibc.cpu.aarch64_gcs=1))\n>  tst-gcs-lock-ptrace-ARGS = -- $(host-test-program-cmd)\n>  LDFLAGS-tst-gcs-lock-static += -Wl,-z,gcs=always\n> -tst-gcs-lock-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> +$(eval $(call tunable-add,tst-gcs-lock-static,glibc.cpu.aarch64_gcs=1))\n>  LDFLAGS-tst-gcs-unlock += -Wl,-z,gcs=always\n> -tst-gcs-unlock-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> +$(eval $(call tunable-add,tst-gcs-unlock,glibc.cpu.aarch64_gcs=2))\n>  LDFLAGS-tst-gcs-unlock-static += -Wl,-z,gcs=always\n> -tst-gcs-unlock-static-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> +$(eval $(call tunable-add,tst-gcs-unlock-static,glibc.cpu.aarch64_gcs=2))\n>  \n>  # force one of the dependencies to be unmarked\n>  LDFLAGS-tst-gcs-mod2.so += -Wl,-z,gcs=never\n> @@ -283,10 +280,10 @@ $(objpfx)tst-gcs-mod1.so: $(objpfx)tst-gcs-mod2.so\n>  $(objpfx)tst-gcs-ld-debug-both: $(objpfx)tst-gcs-mod2.so\n>  $(objpfx)tst-gcs-ld-debug-shared: $(objpfx)tst-gcs-mod1.so $(objpfx)tst-gcs-mod3.so\n>  \n> -tst-gcs-shared-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0\n> -tst-gcs-shared-enforced-abort-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-shared-optional-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-shared-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3\n> +$(eval $(call tunable-add,tst-gcs-shared-disabled,glibc.cpu.aarch64_gcs=0))\n> +$(eval $(call tunable-add,tst-gcs-shared-enforced-abort,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-shared-optional,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-shared-override,glibc.cpu.aarch64_gcs=3))\n>  \n>  LDFLAGS-tst-gcs-dlopen-disabled = -Wl,-z,gcs=always\n>  LDFLAGS-tst-gcs-dlopen-enforced = -Wl,-z,gcs=always\n> @@ -296,11 +293,11 @@ LDFLAGS-tst-gcs-dlopen-override = -Wl,-z,gcs=always\n>  LDFLAGS-tst-gcs-ld-debug-exe = -Wl,-z,gcs=never\n>  LDFLAGS-tst-gcs-ld-debug-both = -Wl,-z,gcs=never\n>  \n> -tst-gcs-dlopen-disabled-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0\n> -tst-gcs-dlopen-enforced-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1\n> -tst-gcs-dlopen-optional-on-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-dlopen-optional-off-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2\n> -tst-gcs-dlopen-override-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3\n> +$(eval $(call tunable-add,tst-gcs-dlopen-disabled,glibc.cpu.aarch64_gcs=0))\n> +$(eval $(call tunable-add,tst-gcs-dlopen-enforced,glibc.cpu.aarch64_gcs=1))\n> +$(eval $(call tunable-add,tst-gcs-dlopen-optional-on,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-dlopen-optional-off,glibc.cpu.aarch64_gcs=2))\n> +$(eval $(call tunable-add,tst-gcs-dlopen-override,glibc.cpu.aarch64_gcs=3))\n>  \n>  $(objpfx)tst-gcs-dlopen-disabled.out: $(objpfx)tst-gcs-mod2.so\n>  $(objpfx)tst-gcs-dlopen-enforced.out: $(objpfx)tst-gcs-mod2.so\n> @@ -311,7 +308,7 @@ $(objpfx)tst-gcs-ld-debug-dlopen.out: $(objpfx)tst-gcs-mod2.so\n>  \n>  LDFLAGS-tst-gcs-noreturn = -Wl,-z,gcs=always\n>  \n> -tst-gcs-noreturn-ENV = GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0\n> +$(eval $(call tunable-add,tst-gcs-noreturn,glibc.cpu.aarch64_gcs=0))\n>  \n>  $(objpfx)tst-gcs-ld-debug-%.out: $(..)elf/tst-dl-debug-protect.sh $(objpfx)tst-gcs-ld-debug-%\n>  \t$(SHELL) $< $(objpfx) '$(test-wrapper-env)' '$(rtld-prefix)' \\\n> @@ -329,18 +326,14 @@ $(objpfx)tst-gcs-preload-enforced-abort: $(objpfx)tst-gcs-mod1.so\n>  $(objpfx)tst-gcs-preload-optional: $(objpfx)tst-gcs-mod1.so\n>  $(objpfx)tst-gcs-preload-override: $(objpfx)tst-gcs-mod1.so\n>  \n> -tst-gcs-preload-disabled-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=0 \\\n> -  LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> -tst-gcs-preload-enforced-abort-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1 \\\n> -  LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> -tst-gcs-preload-optional-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=2 \\\n> -  LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> -tst-gcs-preload-override-ENV = \\\n> -  GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=3 \\\n> -  LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> +$(eval $(call tunable-add,tst-gcs-preload-disabled,glibc.cpu.aarch64_gcs=0))\n> +tst-gcs-preload-disabled-ENV += LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> +$(eval $(call tunable-add,tst-gcs-preload-enforced-abort,glibc.cpu.aarch64_gcs=1))\n> +tst-gcs-preload-enforced-abort-ENV += LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> +$(eval $(call tunable-add,tst-gcs-preload-optional,glibc.cpu.aarch64_gcs=2))\n> +tst-gcs-preload-optional-ENV += LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n> +$(eval $(call tunable-add,tst-gcs-preload-override,glibc.cpu.aarch64_gcs=3))\n> +tst-gcs-preload-override-ENV += LD_PRELOAD=$(objpfx)tst-gcs-mod1.so\n>  \n>  LDFLAGS-tst-gcs-audit1.so += -Wl,-z,gcs=never\n>","headers":{"Return-Path":"<libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org>","X-Original-To":["incoming@patchwork.ozlabs.org","libc-alpha@sourceware.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","libc-alpha@sourceware.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=w2u7B1RY;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=w2u7B1RY","sourceware.org;\n dmarc=pass (p=none dis=none) header.from=linaro.org","sourceware.org; spf=pass smtp.mailfrom=linaro.org","server2.sourceware.org;\n arc=none smtp.remote-ip=2607:f8b0:4864:20::1333"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fwDl50m2Qz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 05:25:37 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 123404BA2E09\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 19:25:35 +0000 (GMT)","from mail-dy1-x1333.google.com (mail-dy1-x1333.google.com\n [IPv6:2607:f8b0:4864:20::1333])\n by sourceware.org (Postfix) with ESMTPS id 3CFF64BA2E08\n for <libc-alpha@sourceware.org>; Tue, 14 Apr 2026 19:25:07 +0000 (GMT)","by mail-dy1-x1333.google.com with SMTP id\n 5a478bee46e88-2ba895adfeaso6236067eec.0\n for <libc-alpha@sourceware.org>; Tue, 14 Apr 2026 12:25:07 -0700 (PDT)","from ?IPV6:2804:1b3:a7c3:2557:c10c:f31f:5ab:e991?\n ([2804:1b3:a7c3:2557:c10c:f31f:5ab:e991])\n by smtp.gmail.com with ESMTPSA id\n 5a478bee46e88-2d55f5c6afdsm22079259eec.4.2026.04.14.12.25.03\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Tue, 14 Apr 2026 12:25:05 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 123404BA2E09","OpenDKIM Filter v2.11.0 sourceware.org 3CFF64BA2E08"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 3CFF64BA2E08","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 3CFF64BA2E08","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776194707; cv=none;\n b=XYHsB/EfedmRE/bpfGFHP2+nFJ0LMBmTIw6bJJKy3mRQmHplVinfibdBb47mol7Bk/sNZ546doR3JV1aX5pI9JNRPG7UA8uQIkr35LHkj1qsDnDeM2l1VshuUkO3+Kzveh4euv4RoOEKaVUQPspERw8j9ff+ahdy8Sk6clr9jPk=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776194707; c=relaxed/simple;\n bh=y7WS/d0lMs2R8u5TArzGXkZRSgu3hc7T6XzoGzfhLJ0=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From;\n b=tYNsCO7TMwS+OKSVTp09UQRaXwf/t/+1/Ap1pN3LGtWku66YMKFF0baF2KNMxCz+asPzrgLJCWJj+pOx9bN4vGONwjizOQtkj296Ero+x3Rl26s9ojAxM5HpYIUR/L7Lt8xGM9SI8YyVr1OgcSzvvViB+3YQREP9zJoAO25NLVA=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776194706; x=1776799506; darn=sourceware.org;\n h=content-transfer-encoding:in-reply-to:organization:from\n :content-language:references:cc:to:subject:user-agent:mime-version\n :date:message-id:from:to:cc:subject:date:message-id:reply-to;\n bh=zdtDesP7wCX8m4UMD0TOc6ehEEwLRR9yY4P8RYD1Vmw=;\n b=w2u7B1RYRkFVWUfE8/T1ZmNMgxj6YJLSdbxP5GcHkT+iR64p9e/DBPm6n0WX5xVFr6\n VQWZUuWx0usnKEl+v0VI2jtDpbqz9y7EIW92DAyhtnV6EIpu0Q06nQH9HwgwO5tB0CDj\n 5SASc2nHfHUffvJRnBQ9FRHLfnP6F9cpfPt9Zft6RlZpE1ZZZA+zaArXMThHy7hjhsXn\n scaG57TjsVpjIyW50825xTJQNu/nLWyZbxft/UWiszKU5oG3d3LxOfN7lO+llJMtbI09\n HrZurNyFyW+X7rFnEBeB79nx8cHLsqaRAHo27GAawufAJWY+8TLE93/oinQQsfk24RMw\n LxKQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776194706; x=1776799506;\n h=content-transfer-encoding:in-reply-to:organization:from\n :content-language:references:cc:to:subject:user-agent:mime-version\n :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=zdtDesP7wCX8m4UMD0TOc6ehEEwLRR9yY4P8RYD1Vmw=;\n b=f+QFZLZFSGQbBP7vV0ZmBhNnbCqlxrpMLJ6WqtTNZeQ+vjIAC9mT9W7BzaroJug7C7\n YjDdijFYhdV+h91t0B5NC4A2lH4UKdyVojv+KUarbInb5sBW3BTPF5mJ4cCsXyHuei5q\n FZpRfXKCQ1tRG1cuWFHCMN4XJlwdxeh+xFpuK7N7/CdiOAX5BWvV2uqQi0lXC+6uqy4N\n c3sQ8gfxxaJgdvD9XRoumxmRHYs6H3b6TwGR7IiZAHh0hKgJD0WMK4UXwPVbW9DKUZCi\n Ga4x+DX/wWkBEjZruLfcvxu8lvQYslGilJSIaQ7jCDwWN38cnKNzRK32EgW0UaG9r9oa\n L5Jw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9s0MhjcKDV2SEn5Ke53ohKNl/o9QqbIT9FAQO+v88vktr91gi0TpfMKq0VuVmKM8bk97mCUIgoTk+M@sourceware.org","X-Gm-Message-State":"AOJu0YxQVAo9PjEWudhWnzE5Lt3tai6BPRzu/RGh5SjtllmXAMJtYjeT\n EoZwdigphcxCnrQ0NwJOjoYYr6n+muY7loPh8cZwX/dQbkxmf9P+Gq8jPDc4U+B9dH3m8OSJ0tp\n DG1ow","X-Gm-Gg":"AeBDievebOfFEZad6AH/X0g8mIxMhcnSRMuLNSD7T6lw2h0xbvFlP7l5KMGnmmqpUGK\n JNke6P8T8s+GHo5czUUJav82OnQI3d/C55YGtbJcYE5nuArtzoeZfWEorWxBzCTAveXCKgd5tFm\n 38c/Piv1oJIigusNnYoHzJTVMr9kJzMUKGwXqA8M2d9oOV9rKigVrCUMmuvFM5BVq1ak/e011RC\n ag7KhGHZMUUlCfJcPCOteUWATVzDGdk92g5HvGzGDTHf5fdlc68tkq98/vKg7u5JwoA7PCIVdEA\n 849xaGObnBHF0Z22jbd/dmbzBkb2pzXMmTcOs37TRdT8+ArA5C/26wkHpSPEpaNsbKWyH3Pt+3L\n xEks+kd7kE4e3Si7SngmOzpX8ZbP/lC8+DbXPQbH4zExEXGh4LebI7nOUm9YozkmLjgTFDgwe5U\n DizZ/cZaGy26eWmNVPSvCkTf5yylIyizGBHsm8dBjNAIC9OdEDpbzh+8icSGydNftN/3giyGc+4\n pwPXVs8f3JklHNs6lEhe1rO5rljRy6CyAnMKwVfXw==","X-Received":"by 2002:a05:7300:e828:b0:2ca:7eb4:3e0f with SMTP id\n 5a478bee46e88-2d586699913mr10083486eec.5.1776194705730;\n Tue, 14 Apr 2026 12:25:05 -0700 (PDT)","Message-ID":"<53ce1324-63a9-488b-955b-99700e4fdcd6@linaro.org>","Date":"Tue, 14 Apr 2026 16:25:01 -0300","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH] tests: allow tests to append tunables","To":"Yury Khrustalev <yury.khrustalev@arm.com>, libc-alpha@sourceware.org","Cc":"Florian Weimer <fweimer@redhat.com>,\n Wilco Dijkstra <wilco.dijkstra@arm.com>","References":"<20260324141438.3094802-1-yury.khrustalev@arm.com>","Content-Language":"en-US","From":"Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>","Organization":"Linaro","In-Reply-To":"<20260324141438.3094802-1-yury.khrustalev@arm.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","X-BeenThere":"libc-alpha@sourceware.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Libc-alpha mailing list <libc-alpha.sourceware.org>","List-Unsubscribe":"<https://sourceware.org/mailman/options/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe>","List-Archive":"<https://sourceware.org/pipermail/libc-alpha/>","List-Post":"<mailto:libc-alpha@sourceware.org>","List-Help":"<mailto:libc-alpha-request@sourceware.org?subject=help>","List-Subscribe":"<https://sourceware.org/mailman/listinfo/libc-alpha>,\n <mailto:libc-alpha-request@sourceware.org?subject=subscribe>","Errors-To":"libc-alpha-bounces~incoming=patchwork.ozlabs.org@sourceware.org"}}]