From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::225]) by sourceware.org (Postfix) with ESMTPS id 1C70238582AF for ; Wed, 14 Sep 2022 18:11:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 1C70238582AF Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=otheo.eu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=otheo.eu Received: (Authenticated sender: #01#@otheo.eu) by mail.gandi.net (Postfix) with ESMTPSA id B3D421C0003 for ; Wed, 14 Sep 2022 18:11:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=otheo.eu; s=gm1; t=1663179077; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k/uH6NeQ1beI3VhnKFAnBCy9ktojNGqY0q6IF1gtzpU=; b=mBVyArFsoUwWtlsaXRcxj/H6bCZNmHfvxvM5U0EJrdVKjPZH3bFw1yHMm7fQt4t2S8ZBYg S+lxobIT7JzC5BI28PIq3wMjYAmx9bo3CZK0X+DpkwvHXURxAHyEbmlMvuxIWTn6X/+IaO FNhKzI6lZAG6h4FIfAtnCfiewMu0EO/bshYml/E8J7QUd5mkuHmphw1oG6mvhuZZNgO63I syuWyrxz3AoCGotgTjWFUtCLtaxRqer8EeUqGZqdJ5HVtw52Ih8Z/gBaXV94LvRNnxLRNO rLD32RaLGr8i9wIemuEQMX4Y6WCoxISV2a5q6FYECOS13RjIRdrsyy7W6ppTCQ== Date: Wed, 14 Sep 2022 20:10:01 +0200 From: Javier Pello To: libc-alpha@sourceware.org Subject: [PATCH 2/6] elf: Remove legacy hwcaps support from ldconfig Message-Id: <20220914201001.2ac0162aa25060849f44817b@otheo.eu> In-Reply-To: <20220914200724.8e685fbbaf441c96d19011c6@otheo.eu> References: <20220905200652.d69204581d15c64647da5cd2@otheo.eu> <87h71l9crb.fsf@oldenburg.str.redhat.com> <20220906201207.e7b3d08272af5649754e76b1@otheo.eu> <87h71i6rfa.fsf@oldenburg.str.redhat.com> <20220914200724.8e685fbbaf441c96d19011c6@otheo.eu> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.32; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,JMQ_SPF_NEUTRAL,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Remove support for the legacy hwcaps subdirectories from ldconfig. Signed-off-by: Javier Pello --- elf/ldconfig.c | 149 +++---------------------------------------------- 1 file changed, 8 insertions(+), 141 deletions(-) diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 6f37f38f..9399c228 100644 --- a/elf/ldconfig.c +++ b/elf/ldconfig.c @@ -46,16 +46,6 @@ #include -/* This subpath in search path entries is always supported and - included in the cache for backwards compatibility. */ -#define TLS_SUBPATH "tls" - -/* The MSB of the hwcap field is set for objects in TLS_SUBPATH - directories. There is always TLS support in glibc, so the dynamic - loader does not check the bit directly. But more hwcap bits make a - an object more preferred, so the bit still has meaning. */ -#define TLS_HWCAP_BIT 63 - #ifndef LD_SO_CONF # define LD_SO_CONF SYSCONFDIR "/ld.so.conf" #endif @@ -120,9 +110,6 @@ static char *cache_file; /* Configuration file. */ static const char *config_file; -/* Mask to use for important hardware capabilities. */ -static unsigned long int hwcap_mask = HWCAP_IMPORTANT; - /* Name and version of program. */ static void print_version (FILE *stream, struct argp_state *state); void (*argp_program_version_hook) (FILE *, struct argp_state *) @@ -163,75 +150,6 @@ static struct argp argp = options, parse_opt, NULL, doc, NULL, more_help, NULL }; -/* Check if string corresponds to an important hardware capability or - a platform. */ -static int -is_hwcap_platform (const char *name) -{ - int hwcap_idx = _dl_string_hwcap (name); - - /* Is this a normal hwcap for the machine like "fpu?" */ - if (hwcap_idx != -1 && ((1 << hwcap_idx) & hwcap_mask)) - return 1; - - /* Is this a platform pseudo-hwcap like "i686?" */ - hwcap_idx = _dl_string_platform (name); - if (hwcap_idx != -1) - return 1; - - /* Backwards-compatibility for the "tls" subdirectory. */ - if (strcmp (name, TLS_SUBPATH) == 0) - return 1; - - return 0; -} - -/* Get hwcap (including platform) encoding of path. */ -static uint64_t -path_hwcap (const char *path) -{ - char *str = xstrdup (path); - char *ptr; - uint64_t hwcap = 0; - uint64_t h; - - size_t len; - - len = strlen (str); - if (str[len] == '/') - str[len] = '\0'; - - /* Search pathname from the end and check for hwcap strings. */ - for (;;) - { - ptr = strrchr (str, '/'); - - if (ptr == NULL) - break; - - h = _dl_string_hwcap (ptr + 1); - - if (h == (uint64_t) -1) - { - h = _dl_string_platform (ptr + 1); - if (h == (uint64_t) -1) - { - if (strcmp (ptr + 1, TLS_SUBPATH) == 0) - h = TLS_HWCAP_BIT; - else - break; - } - } - hwcap += 1ULL << h; - - /* Search the next part of the path. */ - *ptr = '\0'; - } - - free (str); - return hwcap; -} - /* Handle program arguments. */ static error_t parse_opt (int key, char *arg, struct argp_state *state) @@ -747,27 +665,15 @@ struct dlib_entry static void search_dir (const struct dir_entry *entry) { - uint64_t hwcap; - if (entry->hwcaps == NULL) - { - hwcap = path_hwcap (entry->path); - if (opt_verbose) - { - if (hwcap != 0) - printf ("%s: (hwcap: %#.16" PRIx64 ")", entry->path, hwcap); - else - printf ("%s:", entry->path); - } - } - else + if (opt_verbose) { - hwcap = 0; - if (opt_verbose) + if (entry->hwcaps == NULL) + printf ("%s:", entry->path); + else printf ("%s: (hwcap: \"%s\")", entry->path, glibc_hwcaps_subdirectory_name (entry->hwcaps)); + printf (_(" (from %s:%d)\n"), entry->from_file, entry->from_line); } - if (opt_verbose) - printf (_(" (from %s:%d)\n"), entry->from_file, entry->from_line); char *dir_name; char *real_file_name; @@ -813,9 +719,7 @@ search_dir (const struct dir_entry *entry) subdirectory)? The dynamic linker is also considered as shared library. */ if (!_dl_is_dso (direntry->d_name) - && (direntry->d_type == DT_REG - || (entry->hwcaps == NULL - && !is_hwcap_platform (direntry->d_name)))) + && (direntry->d_type == DT_REG || entry->hwcaps == NULL)) continue; size_t len = strlen (direntry->d_name); @@ -863,7 +767,6 @@ search_dir (const struct dir_entry *entry) } struct stat stat_buf; - bool is_dir; int is_link = S_ISLNK (lstat_buf.st_mode); if (is_link) { @@ -898,37 +801,13 @@ search_dir (const struct dir_entry *entry) if (opt_chroot != NULL) free (target_name); - is_dir = S_ISDIR (stat_buf.st_mode); - /* lstat_buf is later stored, update contents. */ lstat_buf.st_dev = stat_buf.st_dev; lstat_buf.st_ino = stat_buf.st_ino; lstat_buf.st_size = stat_buf.st_size; lstat_buf.st_ctime = stat_buf.st_ctime; } - else - is_dir = S_ISDIR (lstat_buf.st_mode); - - /* No descending into subdirectories if this directory is a - glibc-hwcaps subdirectory (which are not recursive). */ - if (entry->hwcaps == NULL - && is_dir && is_hwcap_platform (direntry->d_name)) - { - if (!is_link - && direntry->d_type != DT_UNKNOWN - && __builtin_expect (lstat (real_file_name, &lstat_buf), 0)) - { - error (0, errno, _("Cannot lstat %s"), file_name); - continue; - } - - /* Handle subdirectory later. */ - struct dir_entry *new_entry = new_sub_entry (entry, file_name, - &lstat_buf); - add_single_dir (new_entry, 0); - continue; - } - else if (!S_ISREG (lstat_buf.st_mode) && !is_link) + else if (!S_ISREG (lstat_buf.st_mode)) continue; char *real_name; @@ -1103,7 +982,7 @@ search_dir (const struct dir_entry *entry) } if (opt_build_cache) add_to_cache (entry->path, filename, dlib_ptr->soname, - dlib_ptr->flag, dlib_ptr->isa_level, hwcap, + dlib_ptr->flag, dlib_ptr->isa_level, 0, entry->hwcaps); } @@ -1290,16 +1169,6 @@ parse_conf_include (const char *config_file, unsigned int lineno, free (copy); } -/* Honour LD_HWCAP_MASK. */ -static void -set_hwcap (void) -{ - char *mask = getenv ("LD_HWCAP_MASK"); - - if (mask) - hwcap_mask = strtoul (mask, NULL, 0); -} - int main (int argc, char **argv) @@ -1332,8 +1201,6 @@ main (int argc, char **argv) add_dir_1 (argv[i], "", 0); } - set_hwcap (); - if (opt_chroot != NULL) { /* Normalize the path a bit, we might need it for printing later. */ -- 2.36.0