Message ID | b124245ba3070588a8b0d88b915ff9456b27a2d4.1601569371.git.fweimer@redhat.com |
---|---|
State | Committed |
Headers |
Return-Path: <libc-alpha-bounces@sourceware.org> 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 C55D7398B88D; Thu, 1 Oct 2020 16:33:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C55D7398B88D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1601569992; bh=XrYUA5zn7a3l96hU9Sp4Zq/bTGkjnNqNT+RAYueoOmo=; h=To:Subject:In-Reply-To:References:Date:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Snpg5g+uKQQ7wGJ4a5mcUIta81I82KfAoEonEzFxwMpJ2z54ILPdkqv6C384MP/Oa l/DeLj6TVvBsQyYrET2QBj63ORlbjXYFrndM3+oKReKdqQ2DSVQEU3UFuWiqBOjRLV 0b92m7dqbooTIUsuv06L0qtp7Lk8mhJAlbGBhA2E= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by sourceware.org (Postfix) with ESMTP id 10D49398B862 for <libc-alpha@sourceware.org>; Thu, 1 Oct 2020 16:33:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 10D49398B862 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-378-aDiWLtjON7S02CMxveo_Ww-1; Thu, 01 Oct 2020 12:33:07 -0400 X-MC-Unique: aDiWLtjON7S02CMxveo_Ww-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 424AB186DD26 for <libc-alpha@sourceware.org>; Thu, 1 Oct 2020 16:33:06 +0000 (UTC) Received: from oldenburg2.str.redhat.com (ovpn-114-84.ams2.redhat.com [10.36.114.84]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 92BB979984 for <libc-alpha@sourceware.org>; Thu, 1 Oct 2020 16:33:05 +0000 (UTC) To: libc-alpha@sourceware.org Subject: [PATCH 14/28] elf: Enhance ld.so --help to print HWCAP subdirectories In-Reply-To: <cover.1601569371.git.fweimer@redhat.com> References: <cover.1601569371.git.fweimer@redhat.com> Message-Id: <b124245ba3070588a8b0d88b915ff9456b27a2d4.1601569371.git.fweimer@redhat.com> Date: Thu, 01 Oct 2020 18:33:03 +0200 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.11 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, 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 <libc-alpha.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=subscribe> From: Florian Weimer via Libc-alpha <libc-alpha@sourceware.org> Reply-To: Florian Weimer <fweimer@redhat.com> Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" <libc-alpha-bounces@sourceware.org> |
Series |
glibc-hwcaps support
|
|
Commit Message
Florian Weimer
Oct. 1, 2020, 4:33 p.m. UTC
--- elf/dl-usage.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+)
Comments
LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> On 01/10/2020 13:33, Florian Weimer via Libc-alpha wrote: > --- > elf/dl-usage.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/elf/dl-usage.c b/elf/dl-usage.c > index 20aa715cb1..9765d1b5c1 100644 > --- a/elf/dl-usage.c > +++ b/elf/dl-usage.c > @@ -22,6 +22,8 @@ > #include <unistd.h> > #include "version.h" > > +#include <dl-hwcaps.h> > + > void > _dl_usage (const char *argv0, const char *wrong_option) > { > @@ -101,6 +103,65 @@ print_search_path_for_help (struct dl_main_state *state) > print_search_path_for_help_1 (__rtld_search_dirs.dirs); > } > > +/* Helper function for printing flags associated with a HWCAP name. */ > +static void > +print_hwcap_1 (bool *first, bool active, const char *label) > +{ > + if (active) > + { > + if (*first) > + { > + _dl_printf (" ("); > + *first = false; > + } > + else > + _dl_printf (", "); > + _dl_printf ("%s", label); > + } > +} > + > +/* Called after a series of print_hwcap_1 calls to emit the line > + terminator. */ > +static void > +print_hwcap_1_finish (bool *first) > +{ > + if (*first) > + _dl_printf ("\n"); > + else > + _dl_printf (")\n"); > +} > + > +/* Write a list of hwcap subdirectories to standard output. See > + _dl_important_hwcaps in dl-hwcaps.c. */ > +static void > +print_legacy_hwcap_directories (void) > +{ > + _dl_printf ("\n\ > +Legacy HWCAP subdirectories under library search path directories:\n"); > + > + const char *platform = GLRO (dl_platform); > + if (platform != NULL) > + _dl_printf (" %s (AT_PLATFORM)\n", platform); > + > + _dl_printf (" tls (supported, searched)\n"); > + > + uint64_t hwcap_mask = GET_HWCAP_MASK(); > + uint64_t searched = GLRO (dl_hwcap) & hwcap_mask; > + for (int n = 63; n >= 0; --n) > + { > + uint64_t bit = 1ULL << n; UINT64_C(1) maybe? > + if (HWCAP_IMPORTANT & bit) > + { > + _dl_printf (" %s", _dl_hwcap_string (n)); > + bool first = true; > + print_hwcap_1 (&first, GLRO (dl_hwcap) & bit, "supported"); > + print_hwcap_1 (&first, !(hwcap_mask & bit), "masked"); > + print_hwcap_1 (&first, searched & bit, "searched"); > + print_hwcap_1_finish (&first); > + } > + } > +} > + Ok. > void > _dl_help (const char *argv0, struct dl_main_state *state) > { > @@ -136,5 +197,6 @@ This program interpreter self-identifies as: " RTLD "\n\ > ", > argv0); > print_search_path_for_help (state); > + print_legacy_hwcap_directories (); > _exit (0); > } > Ok.
* Adhemerval Zanella via Libc-alpha: > LGTM, thanks. > > Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> Thanks. >> + const char *platform = GLRO (dl_platform); >> + if (platform != NULL) >> + _dl_printf (" %s (AT_PLATFORM)\n", platform); I'm going to change this to (AT_PLATFORM; supported, searched) for consistency with the other lines. >> + >> + _dl_printf (" tls (supported, searched)\n"); >> + >> + uint64_t hwcap_mask = GET_HWCAP_MASK(); >> + uint64_t searched = GLRO (dl_hwcap) & hwcap_mask; >> + for (int n = 63; n >= 0; --n) >> + { >> + uint64_t bit = 1ULL << n; > > UINT64_C(1) maybe? unsigned long long needs to be at least 64 bits in our environment, so I think this should be fine. Florian
Hi Florian, After this patch was merged I started seeing the following error when building with --disable-tunables: l-usage.c: In function ‘print_legacy_hwcap_directories’: dl-usage.c:153:11: error: ‘HWCAP_IMPORTANT’ undeclared (first use in this function) if (HWCAP_IMPORTANT & bit) ^~~~~~~~~~~~~~~ dl-usage.c:153:11: note: each undeclared identifier is reported only once for each function it appears in dl-usage.c:155:31: error: implicit declaration of function ‘_dl_hwcap_string’; did you mean ‘_dl_fatal_printf’? [-Werror=implicit-function-declaration] _dl_printf (" %s", _dl_hwcap_string (n)); ^~~~~~~~~~~~~~~~ _dl_fatal_printf dl-usage.c:155:27: error: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Werror=format=] _dl_printf (" %s", _dl_hwcap_string (n)); ~^ ~~~~~~~~~~~~~~~~~~~~ %d cc1: all warnings being treated as errors make[2]: *** [../o-iterator.mk:9: /home/tcbot/bot-worker/glibc-ppc64le-power8-notunables/vpath/elf/dl-usage.os] Error 1 I could reproduce this on both ppc64le and x84_64 with --disable-tunables. Are we missing an `#include <dl-procinfo.h>`? diff --git a/elf/dl-usage.c b/elf/dl-usage.c index c07f43835b..796ad38b43 100644 --- a/elf/dl-usage.c +++ b/elf/dl-usage.c @@ -22,6 +22,7 @@ #include <unistd.h> #include "version.h" +#include <dl-procinfo.h> #include <dl-hwcaps.h> void -- Matheus Castanho
* Matheus Castanho: > I could reproduce this on both ppc64le and x84_64 with > --disable-tunables. Are we missing an `#include <dl-procinfo.h>`? > > diff --git a/elf/dl-usage.c b/elf/dl-usage.c > index c07f43835b..796ad38b43 100644 > --- a/elf/dl-usage.c > +++ b/elf/dl-usage.c > @@ -22,6 +22,7 @@ > #include <unistd.h> > #include "version.h" > > +#include <dl-procinfo.h> > #include <dl-hwcaps.h> Right, I think that's what's missing. It's an oversight on my part. I tried build-many-glibcs.py on the whole series, but it doesn't have a configuration without tunables. Would you please post your patch to the list? You can also push it at the same time if you want, I think missing #includes are considered trivial under the check-in policy. Thanks, Florian
* Florian Weimer via Libc-alpha: > * Matheus Castanho: > >> I could reproduce this on both ppc64le and x84_64 with >> --disable-tunables. Are we missing an `#include <dl-procinfo.h>`? >> >> diff --git a/elf/dl-usage.c b/elf/dl-usage.c >> index c07f43835b..796ad38b43 100644 >> --- a/elf/dl-usage.c >> +++ b/elf/dl-usage.c >> @@ -22,6 +22,7 @@ >> #include <unistd.h> >> #include "version.h" >> >> +#include <dl-procinfo.h> >> #include <dl-hwcaps.h> > > Right, I think that's what's missing. It's an oversight on my part. I > tried build-many-glibcs.py on the whole series, but it doesn't have a > configuration without tunables. > > Would you please post your patch to the list? You can also push it at > the same time if you want, I think missing #includes are considered > trivial under the check-in policy. Eh, clearly you have posted this to the list already. It's been a long day. 8-/ Please check this in at your convenience. Thanks. Florian
On 10/9/20 2:12 PM, Florian Weimer wrote: > * Florian Weimer via Libc-alpha: > >> * Matheus Castanho: >> >>> I could reproduce this on both ppc64le and x84_64 with >>> --disable-tunables. Are we missing an `#include <dl-procinfo.h>`? >>> >>> diff --git a/elf/dl-usage.c b/elf/dl-usage.c >>> index c07f43835b..796ad38b43 100644 >>> --- a/elf/dl-usage.c >>> +++ b/elf/dl-usage.c >>> @@ -22,6 +22,7 @@ >>> #include <unistd.h> >>> #include "version.h" >>> >>> +#include <dl-procinfo.h> >>> #include <dl-hwcaps.h> >> >> Right, I think that's what's missing. It's an oversight on my part. I >> tried build-many-glibcs.py on the whole series, but it doesn't have a >> configuration without tunables. >> >> Would you please post your patch to the list? You can also push it at >> the same time if you want, I think missing #includes are considered >> trivial under the check-in policy. > > Eh, clearly you have posted this to the list already. It's been a long > day. 8-/ > > Please check this in at your convenience. Thanks. > > Florian > Ok. I'll ask someone to push it for me then. Thanks! -- Matheus Castanho
* Matheus Castanho via Libc-alpha: > On 10/9/20 2:12 PM, Florian Weimer wrote: >> * Florian Weimer via Libc-alpha: >> >>> * Matheus Castanho: >>> >>>> I could reproduce this on both ppc64le and x84_64 with >>>> --disable-tunables. Are we missing an `#include <dl-procinfo.h>`? >>>> >>>> diff --git a/elf/dl-usage.c b/elf/dl-usage.c >>>> index c07f43835b..796ad38b43 100644 >>>> --- a/elf/dl-usage.c >>>> +++ b/elf/dl-usage.c >>>> @@ -22,6 +22,7 @@ >>>> #include <unistd.h> >>>> #include "version.h" >>>> >>>> +#include <dl-procinfo.h> >>>> #include <dl-hwcaps.h> >>> >>> Right, I think that's what's missing. It's an oversight on my part. I >>> tried build-many-glibcs.py on the whole series, but it doesn't have a >>> configuration without tunables. >>> >>> Would you please post your patch to the list? You can also push it at >>> the same time if you want, I think missing #includes are considered >>> trivial under the check-in policy. >> >> Eh, clearly you have posted this to the list already. It's been a long >> day. 8-/ >> >> Please check this in at your convenience. Thanks. >> >> Florian >> > > Ok. I'll ask someone to push it for me then. Thanks! I've pushed it for you. Thanks, Florian
diff --git a/elf/dl-usage.c b/elf/dl-usage.c index 20aa715cb1..9765d1b5c1 100644 --- a/elf/dl-usage.c +++ b/elf/dl-usage.c @@ -22,6 +22,8 @@ #include <unistd.h> #include "version.h" +#include <dl-hwcaps.h> + void _dl_usage (const char *argv0, const char *wrong_option) { @@ -101,6 +103,65 @@ print_search_path_for_help (struct dl_main_state *state) print_search_path_for_help_1 (__rtld_search_dirs.dirs); } +/* Helper function for printing flags associated with a HWCAP name. */ +static void +print_hwcap_1 (bool *first, bool active, const char *label) +{ + if (active) + { + if (*first) + { + _dl_printf (" ("); + *first = false; + } + else + _dl_printf (", "); + _dl_printf ("%s", label); + } +} + +/* Called after a series of print_hwcap_1 calls to emit the line + terminator. */ +static void +print_hwcap_1_finish (bool *first) +{ + if (*first) + _dl_printf ("\n"); + else + _dl_printf (")\n"); +} + +/* Write a list of hwcap subdirectories to standard output. See + _dl_important_hwcaps in dl-hwcaps.c. */ +static void +print_legacy_hwcap_directories (void) +{ + _dl_printf ("\n\ +Legacy HWCAP subdirectories under library search path directories:\n"); + + const char *platform = GLRO (dl_platform); + if (platform != NULL) + _dl_printf (" %s (AT_PLATFORM)\n", platform); + + _dl_printf (" tls (supported, searched)\n"); + + uint64_t hwcap_mask = GET_HWCAP_MASK(); + uint64_t searched = GLRO (dl_hwcap) & hwcap_mask; + for (int n = 63; n >= 0; --n) + { + uint64_t bit = 1ULL << n; + if (HWCAP_IMPORTANT & bit) + { + _dl_printf (" %s", _dl_hwcap_string (n)); + bool first = true; + print_hwcap_1 (&first, GLRO (dl_hwcap) & bit, "supported"); + print_hwcap_1 (&first, !(hwcap_mask & bit), "masked"); + print_hwcap_1 (&first, searched & bit, "searched"); + print_hwcap_1_finish (&first); + } + } +} + void _dl_help (const char *argv0, struct dl_main_state *state) { @@ -136,5 +197,6 @@ This program interpreter self-identifies as: " RTLD "\n\ ", argv0); print_search_path_for_help (state); + print_legacy_hwcap_directories (); _exit (0); }