1 /* Support for reading /etc/ld.so.cache files written by Linux ldconfig. 2 Copyright (C) 2003-2022 Free Software Foundation, Inc. 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 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. 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 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library. If not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <ldconfig.h> 20 21 #ifdef __LP64__ 22 # define _DL_CACHE_DEFAULT_ID (FLAG_AARCH64_LIB64 | FLAG_ELF_LIBC6) 23 #else 24 # define _DL_CACHE_DEFAULT_ID (FLAG_AARCH64_LIB32 | FLAG_ELF_LIBC6) 25 #endif 26 27 #define _dl_cache_check_flags(flags) \ 28 ((flags) == _DL_CACHE_DEFAULT_ID) 29 30 #define add_system_dir(dir) \ 31 do \ 32 { \ 33 size_t len = strlen (dir); \ 34 char path[len + 6]; \ 35 memcpy (path, dir, len + 1); \ 36 if (len >= 6 && ! memcmp (path + len - 6, "/lib64", 6)) \ 37 { \ 38 len -= 2; \ 39 path[len] = '\0'; \ 40 } \ 41 if (len >= 9 && ! memcmp (path + len - 9, "/libilp32", 9))\ 42 { \ 43 len -= 5; \ 44 path[len] = '\0'; \ 45 } \ 46 add_dir (path); \ 47 if (len >= 4 && ! memcmp (path + len - 4, "/lib", 4)) \ 48 { \ 49 memcpy (path + len, "64", 3); \ 50 add_dir (path); \ 51 memcpy (path + len, "ilp32", 6); \ 52 add_dir (path); \ 53 } \ 54 } while (0) 55 56 #include_next <dl-cache.h> 57