From patchwork Tue Feb 2 21:51:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 41910 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 30FE33846400; Tue, 2 Feb 2021 21:51:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 30FE33846400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612302682; bh=203n5EhMhNzuj208MPolVJe+csxoPzYv95xTxugcWGQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=GvyQ3MhIK0E8WlJyafZpQnZ3gSfsWoHVH1qsjL6JhH6fYRWFwl+kIEM6Z6xFVd8s6 zMwfXkyw5Rs2NGRAsnyfBlSebZBwi4DraP/fqLTO60kPTDBRPpqRvRkxIKuijN5uUo cMvkt/wE2Z1UkHpy+qFRjzFy3MyFHwpeUWHXW/Dw= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) by sourceware.org (Postfix) with ESMTPS id 65654385800F for ; Tue, 2 Feb 2021 21:51:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 65654385800F Received: by mail-pg1-x531.google.com with SMTP id b21so15800553pgk.7 for ; Tue, 02 Feb 2021 13:51:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=203n5EhMhNzuj208MPolVJe+csxoPzYv95xTxugcWGQ=; b=l19R4g9RqRh/teJC2T0Liu3I84viEvWJJaNKc1iH74xUwSKPNe1gWLCNO55Pw1dgeU nlmuc8empYe1C+YG0PiGhbDZakwF93wyJBwJOOLft6SnNcVtR1qnp41TMc3hccWxz2se dRiKeUryjtUd35jcuDQpUI2ftL7WyKzYWtR0gqO5oQXlHlZnTLO6fwrYGqFIcQ97Rn49 uxW5A0e2G+btFnAo+VS9/WysSr68+pfk8qR9gJAzr108S0SKVRtg0YcD7WyY9GOmolKo ImFLF4pzQgYYUWVdjQd4lD8QBZKekAzvLFbYNw1gkH04i8oKFeNqcI13vv9Thlgu1T1k WPXg== X-Gm-Message-State: AOAM531WWr35L5bZZxIKDQICgw1+5OBmC8TQGAWvyAEPyI13D5HoePHY Brat5NpxBPE/HQr7eaqenAgahOL4lIc= X-Google-Smtp-Source: ABdhPJylvg/2HdVMHRPZSfOd6ExGRIKuvkyejbaLNC8/OUm97O6gECil2JbDnZiL5oE8SnYgUkuTEg== X-Received: by 2002:a63:5942:: with SMTP id j2mr139026pgm.33.1612302677129; Tue, 02 Feb 2021 13:51:17 -0800 (PST) Received: from gnu-cfl-2.localdomain (c-69-181-90-243.hsd1.ca.comcast.net. [69.181.90.243]) by smtp.gmail.com with ESMTPSA id s21sm21628699pga.12.2021.02.02.13.51.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Feb 2021 13:51:16 -0800 (PST) Received: from gnu-cfl-2.localdomain (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 67EA01A0247 for ; Tue, 2 Feb 2021 13:51:14 -0800 (PST) To: libc-alpha@sourceware.org Subject: [PATCH] x86: Require full ISA support for x86-64 level marker [BZ #27318] Date: Tue, 2 Feb 2021 13:51:12 -0800 Message-Id: <20210202215112.1002416-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-Spam-Status: No, score=-3038.4 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, URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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-Patchwork-Original-From: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" Since -march=sandybridge enables ISAs in x86-64 ISA level v3, the v3 marker is set in libc.so. We couldn't set the needed ISA marker to v2 since this libc won't run on all v2 machines. Technically, the v3 marker is correct. But the resulting libc.so won't run on Sandy Brigde, which is a v2 machine, even when libc is compiled with -march=sandybridge: $ ./elf/ld.so ./libc.so ./libc.so: (p) CPU ISA level is lower than required: needed: 7; got: 3 Instead, we should require full ISA support for x86-64 level marker to detect such case: In file included from ../sysdeps/x86/abi-note.c:28: ../sysdeps/x86/isa-level.c:62:5: error: #error "Invalid ISAs for x86-64 ISA level v3" 62 | # error "Invalid ISAs for x86-64 ISA level v3" | ^~~~~ --- sysdeps/x86/isa-level.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/sysdeps/x86/isa-level.c b/sysdeps/x86/isa-level.c index aaf524cb56..cbd3526406 100644 --- a/sysdeps/x86/isa-level.c +++ b/sysdeps/x86/isa-level.c @@ -31,6 +31,9 @@ #ifdef INCLUDE_X86_ISA_LEVEL # if defined __x86_64__ || defined __FXSR__ || !defined _SOFT_FLOAT \ || defined __MMX__ || defined __SSE__ || defined __SSE2__ +# if !defined __SSE__ || !defined __SSE2__ +# error "Invalid ISAs for x86-64 ISA level baseline" +# endif # define ISA_BASELINE GNU_PROPERTY_X86_ISA_1_BASELINE # else # define ISA_BASELINE 0 @@ -40,6 +43,12 @@ || (defined __x86_64__ && defined __LAHF_SAHF__) \ || defined __POPCNT__ || defined __SSE3__ \ || defined __SSSE3__ || defined __SSE4_1__ || defined __SSE4_2__ +# if !defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 \ + || (defined __x86_64__ && !defined __LAHF_SAHF__) \ + || !defined __POPCNT__ || !defined __SSE3__ \ + || !defined __SSSE3__ || !defined __SSE4_1__ || !defined __SSE4_2__ +# error "Invalid ISAs for x86-64 ISA level v2" +# endif # define ISA_V2 GNU_PROPERTY_X86_ISA_1_V2 # else # define ISA_V2 0 @@ -48,6 +57,10 @@ # if defined __AVX__ || defined __AVX2__ || defined __F16C__ \ || defined __FMA__ || defined __LZCNT__ || defined __MOVBE__ \ || defined __XSAVE__ +# if !defined __AVX__ || !defined __AVX2__ || !defined __F16C__ \ + || !defined __FMA__ || !defined __LZCNT__ || !defined __MOVBE__ +# error "Invalid ISAs for x86-64 ISA level v3" +# endif # define ISA_V3 GNU_PROPERTY_X86_ISA_1_V3 # else # define ISA_V3 0 @@ -55,6 +68,11 @@ # if defined __AVX512F__ || defined __AVX512BW__ || defined __AVX512CD__ \ || defined __AVX512DQ__ || defined __AVX512VL__ +# if !defined __AVX512F__ || !defined __AVX512BW__ \ + || !defined __AVX512CD__ || !defined __AVX512DQ__ \ + || !defined __AVX512VL__ +# error "Invalid ISAs for x86-64 ISA level v4" +# endif # define ISA_V4 GNU_PROPERTY_X86_ISA_1_V4 # else # define ISA_V4 0