From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by sourceware.org (Postfix) with ESMTPS id 7F55D3835C13 for ; Fri, 14 Jan 2022 18:41:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7F55D3835C13 Received: by mail-pj1-x102d.google.com with SMTP id o1so2127757pjr.2 for ; Fri, 14 Jan 2022 10:41:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ishIpV4tQp4jyKCqOGyGLP1FoHY1XGwwMupdA5ZvfdU=; b=jSlxKWGwcTXlrBRd0NsNNwd0iflyHIzWgGVhM8U7HcKcxZNLpONalPQNNrfyPXj7nA ESl28pSwEvjR8rL2jbCgKbXJXGYeiT7Nw6X2ixgnlCVuqloxo/TGN/GqeinO0I29Sy/E dttD0d5KHVLyuyrCtG/9dRAfti95TIC25SJXwBKYxOjvH7XgqW4lV6nw2YBlHwHRev8S n3wP4iYWtTW0+/CVpdi9GoTOjeXUV5Pl2O7E7FJ4Mt06LV05Zu2l+mYpVwv+KpdjvOnq MBCwFYSqTs8HTq5tvMSImzDl3uvvramkZE1PRDm10gqjM5qSR75AICLK94Oo3lGxsX6+ N2+w== X-Gm-Message-State: AOAM530Dml3uMr8qv1O77zO0Pm55aULpN3hDfKcb+DXhvXzgorcfAYJo vq4FC4bdfIItnWQyN+j0pXB9TsPh53CW850uLAEE1DMzBX0= X-Google-Smtp-Source: ABdhPJz20ZeU5JHSxiE7ooTmNySuKrmBpQQBGl8Q2l1oBJdbGyCeY1PbJ8Msw8uZjdUKxdWNxXxr0yFhEauWM82ZTpA= X-Received: by 2002:a17:902:bf09:b0:149:d2a3:ddac with SMTP id bi9-20020a170902bf0900b00149d2a3ddacmr11111278plb.4.1642185665588; Fri, 14 Jan 2022 10:41:05 -0800 (PST) MIME-Version: 1.0 References: <703f911ba1d0d946e4978830e5d3161674bfc77c.1642179009.git.fweimer@redhat.com> In-Reply-To: <703f911ba1d0d946e4978830e5d3161674bfc77c.1642179009.git.fweimer@redhat.com> From: "H.J. Lu" Date: Fri, 14 Jan 2022 10:40:29 -0800 Message-ID: Subject: Re: [PATCH v2 5/6] x86: Add x86-64-vN check to early startup To: Florian Weimer Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3027.8 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 autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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, 14 Jan 2022 18:41:07 -0000 On Fri, Jan 14, 2022 at 8:53 AM Florian Weimer wrote: > > This ISA level covers the glibc build itself. > cannot be used because this check (by design) happens before > DL_PLATFORM_INIT and the x86 CPU flags initialization. > --- > v2: Reflect renamed Makefile variable. > sysdeps/x86/Makefile | 1 + > sysdeps/x86/dl-get-cpu-features.c | 31 ++++++++++++++++++++++++++++++- > 2 files changed, 31 insertions(+), 1 deletion(-) > > diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile > index 402986ff68..6cf708335c 100644 > --- a/sysdeps/x86/Makefile > +++ b/sysdeps/x86/Makefile > @@ -7,6 +7,7 @@ sysdep_routines += get-cpuid-feature-leaf > sysdep-dl-routines += dl-get-cpu-features > sysdep_headers += sys/platform/x86.h bits/platform/x86.h > > +CFLAGS-dl-get-cpu-features.os += $(rtld-early-cflags) > CFLAGS-get-cpuid-feature-leaf.o += $(no-stack-protector) > > tests += tst-get-cpu-features tst-get-cpu-features-static \ > diff --git a/sysdeps/x86/dl-get-cpu-features.c b/sysdeps/x86/dl-get-cpu-features.c > index 6339c9df4e..4ec0e5d2af 100644 > --- a/sysdeps/x86/dl-get-cpu-features.c > +++ b/sysdeps/x86/dl-get-cpu-features.c > @@ -20,6 +20,7 @@ > > #ifdef SHARED > # include > +# include > > /* NB: Normally, DL_PLATFORM_INIT calls init_cpu_features to initialize > CPU features in dynamic executable. But when loading ld.so inside of > @@ -36,7 +37,35 @@ _dl_x86_init_cpu_features (void) > { > struct cpu_features *cpu_features = __get_cpu_features (); > if (cpu_features->basic.kind == arch_kind_unknown) > - init_cpu_features (cpu_features); > + { > + init_cpu_features (cpu_features); > + > +# if IS_IN (rtld) > + /* See isa-level.c. */ > +# if defined GCCMACRO__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 \ > + && defined HAVE_X86_LAHF_SAHF && defined GCCMACRO__POPCNT__ \ > + && defined GCCMACRO__SSE3__ && defined GCCMACRO__SSSE3__ \ > + && defined GCCMACRO__SSE4_1__ && defined GCCMACRO__SSE4_2__ > + if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V2)) > + _dl_fatal_printf ("\ > +Fatal glibc error: CPU does not support x86-64-v%d\n", 2); > +# if defined GCCMACRO__AVX__ && defined GCCMACRO__AVX2__ \ > + && defined GCCMACRO__F16C__ && defined GCCMACRO__FMA__ \ > + && defined GCCMACRO__LZCNT__ && defined HAVE_X86_MOVBE > + if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V3)) > + _dl_fatal_printf ("\ > +Fatal glibc error: CPU does not support x86-64-v%d\n", 3); > +# if defined GCCMACRO__AVX512F__ && defined GCCMACRO__AVX512BW__ \ > + && defined GCCMACRO__AVX512CD__ && defined GCCMACRO__AVX512DQ__ \ > + && defined GCCMACRO__AVX512VL__ > + if (!(cpu_features->isa_1 & GNU_PROPERTY_X86_ISA_1_V4)) > + _dl_fatal_printf ("\ > +Fatal glibc error: CPU does not support x86-64-v%d\n", 4); > +# endif /* ISA level 4 */ > +# endif /* ISA level 3 */ > +# endif /* ISA level 2 */ > +# endif /* IS_IN (rtld) */ > + } > } > > __ifunc (__x86_cpu_features, __x86_cpu_features, NULL, void, > -- > 2.34.1 > > LGTM. Reviewed-by: H.J. Lu Thanks. -- H.J.