From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by sourceware.org (Postfix) with ESMTPS id 118F53858D3C for ; Fri, 16 Feb 2024 00:21:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 118F53858D3C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 118F53858D3C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708042881; cv=none; b=KNR7u7rDk/H4zVW6WBvHYnQbAnaNIcyq3hEXNJkcDBqQHBGi6W89bN5hu9IpfgY38m4rdxzYNaQlIOO82ffsUQIr5gp2RkuXBu+0QKsd9m1kSN1m77dron2gXnvaNCtGuQlEXpKV7Fjz7GojFaVJvaoxz8SjmbaIh50+q18Se1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708042881; c=relaxed/simple; bh=1WURgQ33mV/sMXfntFInQyRjH8gpLlhEe4ieVyHRiRs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=HFPNcinFCxleG6bdcbQF8VVW2jtMJhz0C6e64OGlc9OYWA/WIpc6x9rfPSmoRNojkdYbsDP+IbkCBS8xAzdhEYpxycrxlT4umXV+TPhvfyxdyMcac2ZPi1U+so0T0Q98M4s5GhisnutJ7dmR9JFneabzGUx/WAtKpFcPTyGBwbM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-6e0a37751cbso1394641b3a.2 for ; Thu, 15 Feb 2024 16:21:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708042876; x=1708647676; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=CM+onNoJnbr3FsIWan2BnaEcs5TSbTbfpSvgAVwo0mk=; b=ibLCJ1OmOPymotYJ8gixjdV10HxHOfKNjmh2hmF/P8TpXq/U8aKbqBt1+54XPYr0tZ ooDLp+Ofv56dnV80i9DntuvuZyCpI4ZMyAme197Z+pbyodXB6gmJa32QSQWzRN06a+e9 eAJDbu68f732g+n66/dudnIj2kx4Ri2yYutPOLLZ6GOJsswq7ePeb3Kdmev1NhcmcG9A mFPbP7CmF9Q2fcqNGgLe9fw5guU7gx7QsKwnjIx40UYFtvTqKu8rwhxTF1IuHkxKzibm Z1Q6jw/g/bLjBBDVHKGz0GK04Nr1t6ZNdKO8Yjvoc+r7MzuECXXx2xNv7KjCNa+sqwWP W0+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708042876; x=1708647676; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=CM+onNoJnbr3FsIWan2BnaEcs5TSbTbfpSvgAVwo0mk=; b=TtdjWuLR1UPuBV5I232jJs2k23v2pAdpfzj/jSgqoMyo5Qfng82q9vG1bQ0XvjpSP+ g/bxFoJXhe9Eygzdmvs3tOZk2iOknLLQ/NcA4GtX7sFS/+/2e8OGkGpnaWOf/GKzhug2 vV1anxmjG9Ws2bWngsDDqjDn1NRdNuM/F7dqJJmvDq55rjkogS0CqmZz2F39gYHupe61 CY5ctVjrPo0VfNDVLsreCMbkz5riEX0caYw0c0GkXUa9RkdUGBnqW/5KlnnwbHVY1YvU G59sTy9XjJBQf+Xfir7MAkX6eiaQOOAbOV1A1il0zi3pbwA/fa87dQp0z1U4Mf1czuF/ aRIg== X-Gm-Message-State: AOJu0YyT1YA/6Ah36v6zLE47oZMKL53zrboNEPQYh4/baqaZTBoHUKSC Z3WU9w/dwpiNYL2AwhofFcYTmRXALHM5WqDpBuc72K8A88TDgtC6ISfMFPIf X-Google-Smtp-Source: AGHT+IEp/boUljhqdB4NxNf4Sl3QiFzsItXy9Kise3e+sJ8DHK/jwGWGbPJBhRN8s6C6pF0vMjuPIg== X-Received: by 2002:a05:6a00:2fd1:b0:6db:d2f5:9e28 with SMTP id fn17-20020a056a002fd100b006dbd2f59e28mr3642807pfb.10.1708042875967; Thu, 15 Feb 2024 16:21:15 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.58.89.72]) by smtp.gmail.com with ESMTPSA id t123-20020a625f81000000b006ddc75edd55sm1975554pfb.152.2024.02.15.16.21.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Feb 2024 16:21:15 -0800 (PST) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 8E4C274005D; Thu, 15 Feb 2024 16:21:14 -0800 (PST) From: "H.J. Lu" To: libc-alpha@sourceware.org Cc: goldstein.w.n@gmail.com, fweimer@redhat.com, adhemerval.zanella@linaro.org Subject: [PATCH v7 0/2] x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers Date: Thu, 15 Feb 2024 16:21:12 -0800 Message-ID: <20240216002114.2255406-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3012.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_ABUSEAT,RCVD_IN_DNSWL_NONE,RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Changes in v7: 1. Generate malloc-for-test.map at build time to get the correct version map for malloc. Changes in v6: 1. Drop Tile registers. Changes in v5: 1. Also preserve Tile registers. 2. Add an error check in i386 dl-tlsdesc-dynamic.h. Changes in v4: 1. Add APX registers to STATE_SAVE_MASK so that APX registers are saved in ld.so trampoline. 2. Also save x87 FPU stack registers for TLSDESC_CALL and TLS_DESC_CALL. 3. Change i386 _dl_tlsdesc_dynamic to IFUNC. 4. Rename GLRO(dl_x86_64_tlsdesc_dynamic) to GLRO(dl_x86_tlsdesc_dynamic) for both i386 and x86-64. 5. Update the testcase for i386 with a simple malloc interceptor. Changes in v3: 1. Don't add GLRO(dl_x86_64_tlsdesc_dynamic) to libc.a. Changes in v2: 1. Add GLRO(dl_x86_64_runtime_resolve) to optimize elf_machine_runtime_setup. --- Add APX registers to STATE_SAVE_MASK so that APX registers are saved in ld.so trampoline. This fixes BZ #31371. Compiler generates the following instruction sequence for GNU2 dynamic TLS access: leaq tls_var@TLSDESC(%rip), %rax call *tls_var@TLSCALL(%rax) or leal tls_var@TLSDESC(%ebx), %eax call *tls_var@TLSCALL(%eax) CALL instruction is transparent to compiler which assumes all registers, except for EFLAGS and RAX/EAX, are unchanged after CALL. When _dl_tlsdesc_dynamic is called, it calls __tls_get_addr on the slow path. __tls_get_addr is a normal function which doesn't preserve any caller-saved registers. _dl_tlsdesc_dynamic saved and restored integer caller-saved registers, but didn't preserve any other caller-saved registers. Add _dl_tlsdesc_dynamic IFUNC functions for FNSAVE, FXSAVE, XSAVE and XSAVEC to save and restore all caller-saved registers. This fixes BZ #31372. Add GLRO(dl_x86_64_runtime_resolve) with GLRO(dl_x86_tlsdesc_dynamic) to optimize elf_machine_runtime_setup. H.J. Lu (2): x86-64: Save APX registers in ld.so trampoline x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers elf/Makefile | 36 +++- elf/malloc-for-test.c | 32 ++++ elf/malloc-for-test.map.in | 8 + elf/tst-gnu2-tls2.c | 97 ++++++++++ elf/tst-gnu2-tls2.h | 26 +++ elf/tst-gnu2-tls2mod0.c | 28 +++ elf/tst-gnu2-tls2mod1.c | 28 +++ elf/tst-gnu2-tls2mod2.c | 28 +++ sysdeps/i386/dl-machine.h | 2 +- sysdeps/i386/dl-tlsdesc-dynamic.h | 190 +++++++++++++++++++ sysdeps/i386/dl-tlsdesc.S | 115 +++++------ sysdeps/i386/tst-gnu2-tls2.c | 5 + sysdeps/x86/Makefile | 7 +- sysdeps/x86/cpu-features.c | 56 +++++- sysdeps/x86/dl-procinfo.c | 16 ++ sysdeps/{x86_64 => x86}/features-offsets.sym | 2 + sysdeps/x86/malloc-for-test.c | 33 ++++ sysdeps/x86/sysdep.h | 56 +++++- sysdeps/x86_64/Makefile | 2 +- sysdeps/x86_64/dl-machine.h | 19 +- sysdeps/x86_64/dl-procinfo.c | 16 ++ sysdeps/x86_64/dl-tlsdesc-dynamic.h | 166 ++++++++++++++++ sysdeps/x86_64/dl-tlsdesc.S | 108 ++++------- sysdeps/x86_64/dl-trampoline-save.h | 34 ++++ sysdeps/x86_64/dl-trampoline-state.h | 51 +++++ sysdeps/x86_64/dl-trampoline.S | 20 +- sysdeps/x86_64/dl-trampoline.h | 34 +--- 27 files changed, 995 insertions(+), 220 deletions(-) create mode 100644 elf/malloc-for-test.c create mode 100644 elf/malloc-for-test.map.in create mode 100644 elf/tst-gnu2-tls2.c create mode 100644 elf/tst-gnu2-tls2.h create mode 100644 elf/tst-gnu2-tls2mod0.c create mode 100644 elf/tst-gnu2-tls2mod1.c create mode 100644 elf/tst-gnu2-tls2mod2.c create mode 100644 sysdeps/i386/dl-tlsdesc-dynamic.h create mode 100644 sysdeps/i386/tst-gnu2-tls2.c rename sysdeps/{x86_64 => x86}/features-offsets.sym (89%) create mode 100644 sysdeps/x86/malloc-for-test.c create mode 100644 sysdeps/x86_64/dl-tlsdesc-dynamic.h create mode 100644 sysdeps/x86_64/dl-trampoline-save.h create mode 100644 sysdeps/x86_64/dl-trampoline-state.h -- 2.43.0