123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
- Copyright (C) 1999-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
- #include <stdint.h>
- #ifndef _DL_CACHE_DEFAULT_ID
- # define _DL_CACHE_DEFAULT_ID 3
- #endif
- #ifndef _dl_cache_check_flags
- # define _dl_cache_check_flags(flags) \
- ((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID)
- #endif
- #ifndef LD_SO_CACHE
- # define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
- #endif
- #ifndef add_system_dir
- # define add_system_dir(dir) add_dir (dir)
- #endif
- #define CACHEMAGIC "ld.so-1.7.0"
- /* libc5 and glibc 2.0/2.1 use the same format. For glibc 2.2 another
- format has been added in a compatible way:
- The beginning of the string table is used for the new table:
- old_magic
- nlibs
- libs[0]
- ...
- libs[nlibs-1]
- pad, new magic needs to be aligned
- - this is string[0] for the old format
- new magic - this is string[0] for the new format
- newnlibs
- ...
- newlibs[0]
- ...
- newlibs[newnlibs-1]
- string 1
- string 2
- ...
- */
- struct file_entry
- {
- int flags; /* This is 1 for an ELF library. */
- unsigned int key, value; /* String table indices. */
- };
- struct cache_file
- {
- char magic[sizeof CACHEMAGIC - 1];
- unsigned int nlibs;
- struct file_entry libs[0];
- };
- #define CACHEMAGIC_NEW "glibc-ld.so.cache"
- #define CACHE_VERSION "1.1"
- #define CACHEMAGIC_VERSION_NEW CACHEMAGIC_NEW CACHE_VERSION
- struct file_entry_new
- {
- int32_t flags; /* This is 1 for an ELF library. */
- uint32_t key, value; /* String table indices. */
- uint32_t osversion; /* Required OS version. */
- uint64_t hwcap; /* Hwcap entry. */
- };
- struct cache_file_new
- {
- char magic[sizeof CACHEMAGIC_NEW - 1];
- char version[sizeof CACHE_VERSION - 1];
- uint32_t nlibs; /* Number of entries. */
- uint32_t len_strings; /* Size of string table. */
- uint32_t unused[5]; /* Leave space for future extensions
- and align to 8 byte boundary. */
- struct file_entry_new libs[0]; /* Entries describing libraries. */
- /* After this the string table of size len_strings is found. */
- };
- /* Used to align cache_file_new. */
- #define ALIGN_CACHE(addr) \
- (((addr) + __alignof__ (struct cache_file_new) -1) \
- & (~(__alignof__ (struct cache_file_new) - 1)))
- extern int _dl_cache_libcmp (const char *p1, const char *p2) attribute_hidden;
|