]>
Commit | Line | Data |
---|---|---|
c41baa79 | 1 | /* Support for reading /etc/ld.so.cache files written by Linux ldconfig. |
9c7ff11a | 2 | Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. |
c41baa79 UD |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
41bdb6e2 AJ |
6 | modify it under the terms of the GNU Lesser General Public |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
c41baa79 UD |
9 | |
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
41bdb6e2 | 13 | Lesser General Public License for more details. |
c41baa79 | 14 | |
41bdb6e2 AJ |
15 | You should have received a copy of the GNU Lesser General Public |
16 | License along with the GNU C Library; if not, write to the Free | |
17 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
18 | 02111-1307 USA. */ | |
c41baa79 | 19 | |
a8fd59b0 AJ |
20 | #include <stdint.h> |
21 | ||
e25054c4 AJ |
22 | #ifndef _DL_CACHE_DEFAULT_ID |
23 | # define _DL_CACHE_DEFAULT_ID 3 | |
24 | #endif | |
c41baa79 | 25 | |
e25054c4 AJ |
26 | #ifndef _dl_cache_check_flags |
27 | # define _dl_cache_check_flags(flags) \ | |
c41baa79 | 28 | ((flags) == 1 || (flags) == _DL_CACHE_DEFAULT_ID) |
e25054c4 | 29 | #endif |
45eca4d1 UD |
30 | |
31 | #ifndef LD_SO_CACHE | |
8ca91b36 | 32 | # define LD_SO_CACHE SYSCONFDIR "/ld.so.cache" |
45eca4d1 UD |
33 | #endif |
34 | ||
bd89c0b5 UD |
35 | #ifndef add_system_dir |
36 | # define add_system_dir(dir) add_dir (dir) | |
37 | #endif | |
38 | ||
45eca4d1 UD |
39 | #define CACHEMAGIC "ld.so-1.7.0" |
40 | ||
41 | /* libc5 and glibc 2.0/2.1 use the same format. For glibc 2.2 another | |
42 | format has been added in a compatible way: | |
43 | The beginning of the string table is used for the new table: | |
e25054c4 | 44 | old_magic |
45eca4d1 UD |
45 | nlibs |
46 | libs[0] | |
47 | ... | |
48 | libs[nlibs-1] | |
e25054c4 AJ |
49 | pad, new magic needs to be aligned |
50 | - this is string[0] for the old format | |
51 | new magic - this is string[0] for the new format | |
45eca4d1 UD |
52 | newnlibs |
53 | ... | |
54 | newlibs[0] | |
55 | ... | |
56 | newlibs[newnlibs-1] | |
57 | string 1 | |
58 | string 2 | |
59 | ... | |
60 | */ | |
61 | struct file_entry | |
62 | { | |
63 | int flags; /* This is 1 for an ELF library. */ | |
64 | unsigned int key, value; /* String table indices. */ | |
65 | }; | |
66 | ||
67 | struct cache_file | |
68 | { | |
69 | char magic[sizeof CACHEMAGIC - 1]; | |
70 | unsigned int nlibs; | |
71 | struct file_entry libs[0]; | |
72 | }; | |
73 | ||
74 | #define CACHEMAGIC_NEW "glibc-ld.so.cache" | |
a8fd59b0 | 75 | #define CACHE_VERSION "1.1" |
ea029468 | 76 | #define CACHEMAGIC_VERSION_NEW CACHEMAGIC_NEW CACHE_VERSION |
45eca4d1 UD |
77 | |
78 | ||
79 | struct file_entry_new | |
80 | { | |
a8fd59b0 AJ |
81 | int32_t flags; /* This is 1 for an ELF library. */ |
82 | uint32_t key, value; /* String table indices. */ | |
a986484f | 83 | uint32_t osversion; /* Required OS version. */ |
a8fd59b0 | 84 | uint64_t hwcap; /* Hwcap entry. */ |
45eca4d1 UD |
85 | }; |
86 | ||
87 | struct cache_file_new | |
88 | { | |
89 | char magic[sizeof CACHEMAGIC_NEW - 1]; | |
90 | char version[sizeof CACHE_VERSION - 1]; | |
a8fd59b0 AJ |
91 | uint32_t nlibs; /* Number of entries. */ |
92 | uint32_t len_strings; /* Size of string table. */ | |
93 | uint32_t unused[5]; /* Leave space for future extensions | |
94 | and align to 8 byte boundary. */ | |
45eca4d1 | 95 | struct file_entry_new libs[0]; /* Entries describing libraries. */ |
a8fd59b0 | 96 | /* After this the string table of size len_strings is found. */ |
45eca4d1 UD |
97 | }; |
98 | ||
e25054c4 AJ |
99 | /* Used to align cache_file_new. */ |
100 | #define ALIGN_CACHE(addr) \ | |
101 | (((addr) + __alignof__ (struct cache_file_new) -1) \ | |
102 | & (~(__alignof__ (struct cache_file_new) - 1))) | |
103 | ||
9c7ff11a UD |
104 | extern int _dl_cache_libcmp (const char *p1, const char *p2) |
105 | internal_function; |