[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