get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2215404/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2215404,
    "url": "http://patchwork.ozlabs.org/api/patches/2215404/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/glibc/patch/20260324141438.3094802-1-yury.khrustalev@arm.com/",
    "project": {
        "id": 41,
        "url": "http://patchwork.ozlabs.org/api/projects/41/?format=api",
        "name": "GNU C Library",
        "link_name": "glibc",
        "list_id": "libc-alpha.sourceware.org",
        "list_email": "libc-alpha@sourceware.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260324141438.3094802-1-yury.khrustalev@arm.com>",
    "list_archive_url": null,
    "date": "2026-03-24T14:14:38",
    "name": "tests: allow tests to append tunables",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "304ebb312483308667c49fb4b57a01505398676e",
    "submitter": {
        "id": 88214,
        "url": "http://patchwork.ozlabs.org/api/people/88214/?format=api",
        "name": "Yury Khrustalev",
        "email": "yury.khrustalev@arm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/glibc/patch/20260324141438.3094802-1-yury.khrustalev@arm.com/mbox/",
    "series": [
        {
            "id": 497299,
            "url": "http://patchwork.ozlabs.org/api/series/497299/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/glibc/list/?series=497299",
            "date": "2026-03-24T14:14:38",
            "name": "tests: allow tests to append tunables",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497299/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2215404/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2215404/checks/",
    "tags": {},
    "related": [],
    "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=fail reason=\"signature verification failed\" (1024-bit key;\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=foss header.b=kFpU1sYu;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org\n (client-ip=38.145.34.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=fail reason=\"signature verification failed\" (1024-bit key,\n unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256\n header.s=foss header.b=kFpU1sYu",
            "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=none smtp.remote-ip=217.140.110.172"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 4fgBrf3fLJz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 25 Mar 2026 01:15:14 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 5D3294BB3BE6\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 24 Mar 2026 14:15:12 +0000 (GMT)",
            "from foss.arm.com (foss.arm.com [217.140.110.172])\n by sourceware.org (Postfix) with ESMTP id 614EE4BA2E0B\n for <libc-alpha@sourceware.org>; Tue, 24 Mar 2026 14:14:47 +0000 (GMT)",
            "from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])\n by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BE8721476;\n Tue, 24 Mar 2026 07:14:40 -0700 (PDT)",
            "from fdebian.localdomain (G7GWP2TF97.cambridge.arm.com [10.1.38.42])\n by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id\n 140FE3F915; Tue, 24 Mar 2026 07:14:45 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 5D3294BB3BE6",
            "OpenDKIM Filter v2.11.0 sourceware.org 614EE4BA2E0B"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 614EE4BA2E0B",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 614EE4BA2E0B",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774361687; cv=none;\n b=Pyr5jTK9MJSdHhSzy2jxhlQAujc85TFbZFHqVJQpSpGWZSO5tu0jAx/gcFDuEb419a/bVO345O834TJTelqN2ViHpHCnPlwoIl48m8B+k9WHhujo/t7hiY8Bb3pqv9rP+uY+CYqjdVxXMLEgk9KjSvG8szYGFFMO4V5Avph03Y0=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1774361687; c=relaxed/simple;\n bh=XW30Sy7uj9ZJOcjYxfhDPWy3etZJ72SwNKo9pOXN5q8=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=RnkMWVt5E3kylfzXi6ZmVrSpM3eTIPDBHBL1RDL/dyYTlQX6SW/PEghP7jGb8dkfINLQazJfQ2jUAnEkxOprD88q0qvhT+uRQcDcGC2vksp8EV00u0yJfEYlXrpPWBNHhYl86sCVOI5GH8UDhgCaT06g4NOUKvDY2idp6QZN3nU=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss;\n t=1774361686; bh=XW30Sy7uj9ZJOcjYxfhDPWy3etZJ72SwNKo9pOXN5q8=;\n h=From:To:Cc:Subject:Date:From;\n b=kFpU1sYur7QY3jPa+GB78IhJghW8am0uvbjFDFJnBWF5Y64GTSifEqUxHQDgH/mK4\n NC1K2bu2kyd/Y8pwfd4MV9JY5DRlvC24wEBJ0SZ4zqx6OzJ9hbP7+oqAiMW95uLJfa\n gdTydCRfYbOyuq2urOosCQswifrGmaKu17pDqAvM=",
        "From": "Yury Khrustalev <yury.khrustalev@arm.com>",
        "To": "libc-alpha@sourceware.org",
        "Cc": "Adhemerval Zanella <adhemerval.zanella@linaro.org>,\n Florian Weimer <fweimer@redhat.com>,\n Wilco Dijkstra <wilco.dijkstra@arm.com>",
        "Subject": "[PATCH] tests: allow tests to append tunables",
        "Date": "Tue, 24 Mar 2026 14:14:38 +0000",
        "Message-ID": "<20260324141438.3094802-1-yury.khrustalev@arm.com>",
        "X-Mailer": "git-send-email 2.47.3",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "Many tests use Glibc tunables. The tunable values are provided via\nthe GLIBC_TUNABLES env variable. Tests set it in makefiles using\n\n  tst-foo-ENV = GLIBC_TUNABLES=tunable=value\n\nThis overwrites environment for this test, so if another env var is\nset elsewhere, one of these changes would be lost. The correct way\nshould be to append to test's environment:\n\n  tst-foo-ENV += GLIBC_TUNABLES=tunable=value\n\nHowever, if two or more tunables need to be set for the same test,\nthe 'tunable=value' part should be appended to previously defined\nGLIBC_TUNABLES env variable.\n\nThis commit adds 'tunable-add' that can be used to correctly append\nanother tunable to a test's environment. We also change tests in the\nmalloc and misc folder.\n\n---\nbase-commit: 9f5f18aab4\npasses regression on aarch64 and x86-64\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(-)",
    "diff": "diff --git a/Makeconfig b/Makeconfig\nindex 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:\ndiff --git a/Rules b/Rules\nindex 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 \ndiff --git a/malloc/Makefile b/malloc/Makefile\nindex 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 > $@; \\\ndiff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile\nindex 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 \n",
    "prefixes": []
}