[PATCH BZ #23668] Default to the new format for ld.so.cache
Florian Weimer
fweimer@redhat.com
Fri May 8 18:58:40 GMT 2020
* Josh Triplett:
> diff --git a/elf/dl-cache.c b/elf/dl-cache.c
> index 6ee5153ff9..75bd9d9536 100644
> --- a/elf/dl-cache.c
> +++ b/elf/dl-cache.c
> @@ -203,7 +203,14 @@ _dl_load_cache_lookup (const char *name)
> - the old format with the new format in it
> - only the new format
> The following checks if the cache contains any of these formats. */
> - if (file != MAP_FAILED && cachesize > sizeof *cache
> + if (file != MAP_FAILED && cachesize > sizeof *cache_new
> + && memcmp (file, CACHEMAGIC_VERSION_NEW,
> + sizeof CACHEMAGIC_VERSION_NEW - 1) == 0)
> + {
> + cache_new = file;
> + cache = file;
> + }
> + else if (file != MAP_FAILED && cachesize > sizeof *cache
> && memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1) == 0)
> {
> size_t offset;
> @@ -220,13 +227,6 @@ _dl_load_cache_lookup (const char *name)
> sizeof CACHEMAGIC_VERSION_NEW - 1) != 0)
> cache_new = (void *) -1;
> }
> - else if (file != MAP_FAILED && cachesize > sizeof *cache_new
> - && memcmp (file, CACHEMAGIC_VERSION_NEW,
> - sizeof CACHEMAGIC_VERSION_NEW - 1) == 0)
> - {
> - cache_new = file;
> - cache = file;
> - }
> else
> {
> if (file != MAP_FAILED)
I do not think this is needed. It's just a minor performance
optimization, right?
There's a missing consistency check on the new-format path (both with
and without your patch), but we can add that separately.
I think we can remove support for the old cache format completely.
> diff --git a/elf/ldconfig.c b/elf/ldconfig.c
> index fbdd814edf..1ce4a29566 100644
> --- a/elf/ldconfig.c
> +++ b/elf/ldconfig.c
> @@ -95,7 +95,7 @@ int opt_verbose;
>
> /* Format to support. */
> /* 0: only libc5/glibc2; 1: both; 2: only glibc 2.2. */
> -int opt_format = 1;
> +int opt_format = 2;
>
> /* Build cache. */
> static int opt_build_cache = 1;
> @@ -148,7 +148,7 @@ static const struct argp_option options[] =
> { NULL, 'f', N_("CONF"), 0, N_("Use CONF as configuration file"), 0},
> { NULL, 'n', NULL, 0, N_("Only process directories specified on the command line. Don't build cache."), 0},
> { NULL, 'l', NULL, 0, N_("Manually link individual libraries."), 0},
> - { "format", 'c', N_("FORMAT"), 0, N_("Format to use: new, old or compat (default)"), 0},
> + { "format", 'c', N_("FORMAT"), 0, N_("Format to use: new (default), old, or compat"), 0},
> { "ignore-aux-cache", 'i', NULL, 0, N_("Ignore auxiliary cache file"), 0},
> { NULL, 0, NULL, 0, NULL, 0 }
> };
But this patch a good start. Do you need help installing it?
Thanks,
Florian
More information about the Libc-alpha
mailing list