From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62c.google.com (mail-pl1-x62c.google.com [IPv6:2607:f8b0:4864:20::62c]) by sourceware.org (Postfix) with ESMTPS id B06C9382C153 for ; Fri, 3 Jun 2022 23:50:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B06C9382C153 Received: by mail-pl1-x62c.google.com with SMTP id o6so2761662plg.2 for ; Fri, 03 Jun 2022 16:50:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LUjZZ0jIPgydRqoZzDvFrZNMQLnZ95pmAdIc2r8paA4=; b=P3mBimqPzeD52cDd9bXlXazHfcMryNFiUQQRcYAd1Gs3XcmUjn4hu4nxDluMvwEaY1 oknBV9i82Z+Unxzx9DZiwXQkMIzYgeY5NvI/w0aBNjgeCaAHjSsL6Th7nZJRN6obUb2Y IDAbY43QcA2LuQ4tRGn5Cu3uQaLwFybfJaSdYlEuZHwNBbE2DfHsZ2WxAyT8Ouj7eM+E fqfdJRqyfY+PIv4U60nIh/1s+lwRkuAILwkLxH2ynw+DnpfXQAxC8QJyEdiJp7qHgge4 dpBaWL19vKzX7s5u5xyd+cHzsNmniM8vzd5vSbJchK58Sy/GGWP+p/4Z/FnVRQ2eUOiM 5eyw== X-Gm-Message-State: AOAM530F91+mTP9nu3ur51jWUuBAOFCAATpCIyEgK7+FKBLULbFJHiO6 r6ATpAcI360X9VL/6gTBL8DcPM1nTGk= X-Google-Smtp-Source: ABdhPJzbEW715kXGIMtiq3egxz7ay8sMAxdnfYAJq+LgM1MEhoCa0pUP1Sa8dn3r6AFTxAuOnHyQaQ== X-Received: by 2002:a17:902:dac3:b0:164:13b2:4913 with SMTP id q3-20020a170902dac300b0016413b24913mr12148943plx.169.1654300209585; Fri, 03 Jun 2022 16:50:09 -0700 (PDT) Received: from noah-tgl.. ([2600:1010:b05f:9399:6bc8:2ae5:27ff:d9b0]) by smtp.gmail.com with ESMTPSA id q17-20020a170902c75100b0015e8d4eb27esm5871884plq.200.2022.06.03.16.50.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jun 2022 16:50:09 -0700 (PDT) From: Noah Goldstein To: libc-alpha@sourceware.org Subject: [PATCH v3 2/8] x86: Add COND_VZEROUPPER that can replace vzeroupper if no `ret` Date: Fri, 3 Jun 2022 18:49:55 -0500 Message-Id: <20220603235001.398195-2-goldstein.w.n@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220603235001.398195-1-goldstein.w.n@gmail.com> References: <20220603044229.2180216-2-goldstein.w.n@gmail.com> <20220603235001.398195-1-goldstein.w.n@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Jun 2022 23:50:12 -0000 The RTM vzeroupper mitigation has no way of replacing inline vzeroupper not before a return. This code does not change any existing functionality. There is no difference in the objdump of libc.so before and after this patch. --- sysdeps/x86_64/multiarch/avx-rtm-vecs.h | 1 + sysdeps/x86_64/sysdep.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/sysdeps/x86_64/multiarch/avx-rtm-vecs.h b/sysdeps/x86_64/multiarch/avx-rtm-vecs.h index 3f531dd47f..6ca9f5e6ba 100644 --- a/sysdeps/x86_64/multiarch/avx-rtm-vecs.h +++ b/sysdeps/x86_64/multiarch/avx-rtm-vecs.h @@ -20,6 +20,7 @@ #ifndef _AVX_RTM_VECS_H #define _AVX_RTM_VECS_H 1 +#define COND_VZEROUPPER COND_VZEROUPPER_XTEST #define ZERO_UPPER_VEC_REGISTERS_RETURN \ ZERO_UPPER_VEC_REGISTERS_RETURN_XTEST diff --git a/sysdeps/x86_64/sysdep.h b/sysdeps/x86_64/sysdep.h index f14d50786d..2cb31a558b 100644 --- a/sysdeps/x86_64/sysdep.h +++ b/sysdeps/x86_64/sysdep.h @@ -106,6 +106,22 @@ lose: \ vzeroupper; \ ret +/* Can be used to replace vzeroupper that is not directly before a + return. */ +#define COND_VZEROUPPER_XTEST \ + xtest; \ + jz 1f; \ + vzeroall; \ + jmp 2f; \ +1: \ + vzeroupper; \ +2: + +/* In RTM define this as COND_VZEROUPPER_XTEST. */ +#ifndef COND_VZEROUPPER +# define COND_VZEROUPPER vzeroupper +#endif + /* Zero upper vector registers and return. */ #ifndef ZERO_UPPER_VEC_REGISTERS_RETURN # define ZERO_UPPER_VEC_REGISTERS_RETURN \ -- 2.34.1