1 /* Run-time dynamic linker data structures for loaded ELF shared objects. 2 Copyright (C) 2010-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 #ifndef _ARM_LINUX_LDSODEFS_H 20 #define _ARM_LINUX_LDSODEFS_H 1 21 22 #include_next <ldsodefs.h> 23 24 #undef VALID_ELF_HEADER 25 #undef VALID_ELF_OSABI 26 #undef MORE_ELF_HEADER_DATA 27 28 #define EXTRA_OSABI ELFOSABI_ARM_AEABI 29 30 #ifdef __ARM_PCS_VFP 31 # define VALID_FLOAT_ABI(x) \ 32 ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ 33 || !((x) & EF_ARM_ABI_FLOAT_SOFT)) 34 #else 35 # define VALID_FLOAT_ABI(x) \ 36 ((EF_ARM_EABI_VERSION ((x)) != EF_ARM_EABI_VER5) \ 37 || !((x) & EF_ARM_ABI_FLOAT_HARD)) 38 #endif 39 40 #undef VALID_ELF_HEADER 41 #define VALID_ELF_HEADER(hdr,exp,size) \ 42 ((memcmp (hdr, exp, size) == 0 \ 43 || memcmp (hdr, expected2, size) == 0 \ 44 || memcmp (hdr, expected3, size) == 0) \ 45 && VALID_FLOAT_ABI (ehdr->e_flags)) 46 #define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV \ 47 || osabi == ELFOSABI_GNU \ 48 || osabi == EXTRA_OSABI) 49 #define MORE_ELF_HEADER_DATA \ 50 static const unsigned char expected2[EI_PAD] = \ 51 { \ 52 [EI_MAG0] = ELFMAG0, \ 53 [EI_MAG1] = ELFMAG1, \ 54 [EI_MAG2] = ELFMAG2, \ 55 [EI_MAG3] = ELFMAG3, \ 56 [EI_CLASS] = ELFW(CLASS), \ 57 [EI_DATA] = byteorder, \ 58 [EI_VERSION] = EV_CURRENT, \ 59 [EI_OSABI] = ELFOSABI_GNU \ 60 }; \ 61 static const unsigned char expected3[EI_PAD] = \ 62 { \ 63 [EI_MAG0] = ELFMAG0, \ 64 [EI_MAG1] = ELFMAG1, \ 65 [EI_MAG2] = ELFMAG2, \ 66 [EI_MAG3] = ELFMAG3, \ 67 [EI_CLASS] = ELFW(CLASS), \ 68 [EI_DATA] = byteorder, \ 69 [EI_VERSION] = EV_CURRENT, \ 70 [EI_OSABI] = EXTRA_OSABI \ 71 } 72 73 #endif 74