From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 1F54E396E846 for ; Thu, 8 Apr 2021 15:30:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1F54E396E846 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-191-KcuCGly6O0eNcz0JhGSCdw-1; Thu, 08 Apr 2021 11:30:00 -0400 X-MC-Unique: KcuCGly6O0eNcz0JhGSCdw-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 94F76188352E; Thu, 8 Apr 2021 15:29:59 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-112-12.rdu2.redhat.com [10.10.112.12]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 800E15C8A8; Thu, 8 Apr 2021 15:29:58 +0000 (UTC) From: Florian Weimer To: Stefan Liebler Cc: libc-alpha@sourceware.org Subject: Re: s390x: Diagnose missing VXE at run time if required at build time References: <87k0pfmmpy.fsf@oldenburg.str.redhat.com> <294a9d07-64bc-7db7-6cd9-1fe4fdbfc1f9@linux.ibm.com> Date: Thu, 08 Apr 2021 17:30:14 +0200 In-Reply-To: <294a9d07-64bc-7db7-6cd9-1fe4fdbfc1f9@linux.ibm.com> (Stefan Liebler's message of "Thu, 8 Apr 2021 16:49:02 +0200") Message-ID: <87eefk3ibd.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP 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-List-Received-Date: Thu, 08 Apr 2021 15:30:05 -0000 * Stefan Liebler: > I've just had a quick look to dl_platform_init for other architectures > to check if there are similar checks. But I haven't found those there. > Are there similar checks for other architectures at a different place? There is a check in sysdeps/x86/dl-prop.h, but that's different because it looks at ELF data, not build flags. > Is there a special reason for this check beyond giving the user an error > message instead of crashing with SIGILL? No, there isn't. It's merely about the diagnostic. > The user will get the error message if build with -march=z14 and running > on z13. If this binary is running on zEC12, it just crashes with SIGILL > as there is a z13 vector instructions before dl_platform_init. Currently > it works on z13, but who knows if this does not change if build with a > different gcc version? To be honest, this change is mostly driven by downstream requirements. Our zEC12 hardware is powered off, but the z13 hardware is not, so there is some space for confusion. I'm going to post a similar patch for POWER9 if I can get it to work. There we actually hit the issue you mention: some of them min/max instructions are actually used early during startup. I don't know yet if that's before or after the point I'm patching here for s390x. > The __LONG_DOUBLE_VX__ macro is quite new and the first gcc release will > be gcc 11. But there is also the __ARCH__ macro. If defined by the used > gcc, it is set to the architecture level determined by -march=xyz > (z15=13; z14=12; z13=11; ...). > See gcc commit "S/390: Rename __S390_ARCH_LEVEL__ to __ARCH__." > https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=4727e06bb7c047a10aa502c829b7e4b519d8082b > If I remember correctly, this was introduced with gcc 7 or 8. > > Would it make sense to add such a check also if build with -march=z15?: > #if defined __ARCH__ > # if __ARCH__ >= 13 > if (!(GLRO(dl_hwcap) & HWCAP_S390_VXRS_EXT2)) > _dl_fatal_printf ("\ > Fatal glibc error: CPU lacks VXRS_EXT2 support (z15 or later required)\n"); > # elif __ARCH__ >= 12 > if (!(GLRO(dl_hwcap) & HWCAP_S390_VXE)) > _dl_fatal_printf ("\ > Fatal glibc error: CPU lacks VXE support (z14 or later required)\n"); > #endif This is fine with me too. Thanks, Florian