From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x430.google.com (mail-pf1-x430.google.com [IPv6:2607:f8b0:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 587CE386D61E for ; Thu, 15 Feb 2024 20:32:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 587CE386D61E 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 587CE386D61E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::430 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708029166; cv=none; b=tCIO4yviNH1MLcj8H6OGs98PpNdb8zDRhMAbvIIYVpAnNJBok/vjcmm/EGdLe7qT3vV+e7PkulHQ+hVgWPotlv0NaSP8p4qIfwKI3ZgbSGIMfUjGlTDRsOWx9DURg4pSy1iTk7dz6pv9VjbFQmJDNYiHeb+5bgUxe3kQkS8nm9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708029166; c=relaxed/simple; bh=l7gGUZSZ+NF53OIFOhdplejgOCBjU8eBNG6eyQXk8yY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=GsosTRy1QYyBxwGXpTsypzXa9YNlm9ifSAGq88iSpvOJe0nXwjckJY1eW+5PkIoJzMDKu7JoGwfTJA46/Jwfj869bXiUtsNTP5FlGNMRyCVj2JTtHnTxDhilf3NqoSLWoCYBufDQimOO6euxwV9FJdR8r7s8giSV0lpqeKdPm3U= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-6e104196e6eso1367391b3a.0 for ; Thu, 15 Feb 2024 12:32:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708029163; x=1708633963; 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=zcmuBtygSId0P4qzkGINSmkTnlvyi3wZ5urmhIRtCBs=; b=jpMs3isQgPM8FhABRLgHLdyJ5qJsRiMHZLxgcD/ZI6fr2fktm3MkX/gbz3rg3e7rDw /dgeUVOWIdlqTU3Z9nCQe+qbxvmaXlQuKqz2Vj2+Kaszvx1ZQCCAF+bnRCZz3yq+fiNc 0XiCOoh3GCcZkInEb2v81VRZDkNeHxJuKxx7LqRRSrGB9Iu8tI3BlhPJAnnOB0QGv4v6 B9xjboCqRFRAZAs0mqRbsmjauPJj/o4leTNB/o/7dNnQGTFDRkFds4rGilyeBezMQGSw vvShd682dUcVnujgJRkZ7Muh3bEWxGdGG9JOYw0s1Q+z3bnnqsWSzva4l5BtAzb3Xw9J wdzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708029163; x=1708633963; 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=zcmuBtygSId0P4qzkGINSmkTnlvyi3wZ5urmhIRtCBs=; b=DiOfc1o2vEdwMHyjScvrOtgoznQNfPFzIJ1LnnJTaT30pXO7kI/bpyZI4RVkJal2Ot rLmtSEib6Plcj6cfkZPub+ztwVtp7h8vfoi4cBRwPfMeIkDa+YZeOO+OcOKSV9vSVN53 sMd/QV8nWY4VKHreM9AUZYps9BHvvuVnGCriHYUhkFUKg/KPa9T9wa61+6XnQt2jaPjh GMixgjx1VkHO6oqTai+vQWiLX6ddoiVy6sIwoEoH0nZHKfmFv3+ru81Q0UBGtuzaPPqH +e3GariFH/0k5dLArdL1vG06bg3P2jsqsVOVAFVmW6ZbOeT5kUJEDM6T6b0XpuTnR2lV NxVA== X-Gm-Message-State: AOJu0YyYalgnsvVuICmMt3/xfFHDGHpjw94jyobg5VhfASvcMEE6Lqdx LQz2nsc1uZiRH4++19XJJaGSNLoAC224yUQHfp0skaVarjfSZnUF X-Google-Smtp-Source: AGHT+IH7LRFRGbti89J0QHjVQPudjZ9osnkMFwpzsFK08y0sknaeif/wfgq88AJJJg4pfzefRmiVeg== X-Received: by 2002:a05:6a00:124b:b0:6e0:4717:7a0d with SMTP id u11-20020a056a00124b00b006e047177a0dmr3965253pfi.5.1708029163285; Thu, 15 Feb 2024 12:32:43 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.58.89.72]) by smtp.gmail.com with ESMTPSA id y127-20020a62ce85000000b006e03b413056sm1809461pfg.188.2024.02.15.12.32.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Feb 2024 12:32:42 -0800 (PST) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 5512B74005D; Thu, 15 Feb 2024 12:32:41 -0800 (PST) From: "H.J. Lu" To: libc-alpha@sourceware.org Cc: goldstein.w.n@gmail.com, fweimer@redhat.com Subject: [PATCH v5 0/2] x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers Date: Thu, 15 Feb 2024 12:32:39 -0800 Message-ID: <20240215203241.1938288-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=-3011.9 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 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 and Tile 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 and Tile registers in ld.so trampoline x86: Update _dl_tlsdesc_dynamic to preserve caller-saved registers elf/Makefile | 19 ++ elf/malloc-for-test.c | 32 ++++ elf/malloc-for-test.map | 6 + 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 | 58 +++++- 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, 980 insertions(+), 218 deletions(-) create mode 100644 elf/malloc-for-test.c create mode 100644 elf/malloc-for-test.map 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