1a1b5ec25Sjsg /*- 2a1b5ec25Sjsg * Copyright (c) 2008-2011 Joseph Koshy 3a1b5ec25Sjsg * All rights reserved. 4a1b5ec25Sjsg * 5a1b5ec25Sjsg * Redistribution and use in source and binary forms, with or without 6a1b5ec25Sjsg * modification, are permitted provided that the following conditions 7a1b5ec25Sjsg * are met: 8a1b5ec25Sjsg * 1. Redistributions of source code must retain the above copyright 9a1b5ec25Sjsg * notice, this list of conditions and the following disclaimer. 10a1b5ec25Sjsg * 2. Redistributions in binary form must reproduce the above copyright 11a1b5ec25Sjsg * notice, this list of conditions and the following disclaimer in the 12a1b5ec25Sjsg * documentation and/or other materials provided with the distribution. 13a1b5ec25Sjsg * 14a1b5ec25Sjsg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15a1b5ec25Sjsg * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16a1b5ec25Sjsg * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17a1b5ec25Sjsg * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18a1b5ec25Sjsg * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19a1b5ec25Sjsg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20a1b5ec25Sjsg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21a1b5ec25Sjsg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22a1b5ec25Sjsg * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23a1b5ec25Sjsg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24a1b5ec25Sjsg * SUCH DAMAGE. 25a1b5ec25Sjsg * 26*63b93652Sjsg * $Id: _libelf_config.h,v 1.2 2020/05/18 06:46:23 jsg Exp $ 27a1b5ec25Sjsg */ 28a1b5ec25Sjsg 29a1b5ec25Sjsg #if defined(__APPLE__) || defined(__DragonFly__) 30a1b5ec25Sjsg 31a1b5ec25Sjsg #if defined(__amd64__) 32a1b5ec25Sjsg #define LIBELF_ARCH EM_X86_64 33a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 34a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 35a1b5ec25Sjsg #elif defined(__i386__) 36a1b5ec25Sjsg #define LIBELF_ARCH EM_386 37a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 38a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 39a1b5ec25Sjsg #endif 40a1b5ec25Sjsg 41a1b5ec25Sjsg #endif /* __DragonFly__ */ 42a1b5ec25Sjsg 43a1b5ec25Sjsg #ifdef __FreeBSD__ 44a1b5ec25Sjsg 45a1b5ec25Sjsg /* 46a1b5ec25Sjsg * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture. 47a1b5ec25Sjsg * See also: <machine/elf.h>. 48a1b5ec25Sjsg */ 49a1b5ec25Sjsg 50a1b5ec25Sjsg #if defined(__amd64__) 51a1b5ec25Sjsg 52a1b5ec25Sjsg #define LIBELF_ARCH EM_X86_64 53a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 54a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 55a1b5ec25Sjsg 56a1b5ec25Sjsg #elif defined(__aarch64__) 57a1b5ec25Sjsg 58a1b5ec25Sjsg #define LIBELF_ARCH EM_AARCH64 59a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 60a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 61a1b5ec25Sjsg 62a1b5ec25Sjsg #elif defined(__arm__) 63a1b5ec25Sjsg 64a1b5ec25Sjsg #define LIBELF_ARCH EM_ARM 65a1b5ec25Sjsg #if defined(__ARMEB__) /* Big-endian ARM. */ 66a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2MSB 67a1b5ec25Sjsg #else 68a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 69a1b5ec25Sjsg #endif 70a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 71a1b5ec25Sjsg 72a1b5ec25Sjsg #elif defined(__i386__) 73a1b5ec25Sjsg 74a1b5ec25Sjsg #define LIBELF_ARCH EM_386 75a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 76a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 77a1b5ec25Sjsg 78a1b5ec25Sjsg #elif defined(__ia64__) 79a1b5ec25Sjsg 80a1b5ec25Sjsg #define LIBELF_ARCH EM_IA_64 81a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 82a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 83a1b5ec25Sjsg 84a1b5ec25Sjsg #elif defined(__mips__) 85a1b5ec25Sjsg 86a1b5ec25Sjsg #define LIBELF_ARCH EM_MIPS 87a1b5ec25Sjsg #if defined(__MIPSEB__) 88a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2MSB 89a1b5ec25Sjsg #else 90a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 91a1b5ec25Sjsg #endif 92a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 93a1b5ec25Sjsg 94a1b5ec25Sjsg #elif defined(__powerpc__) 95a1b5ec25Sjsg 96a1b5ec25Sjsg #define LIBELF_ARCH EM_PPC 97a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2MSB 98a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 99a1b5ec25Sjsg 100a1b5ec25Sjsg #elif defined(__riscv) && (__riscv_xlen == 64) 101a1b5ec25Sjsg 102a1b5ec25Sjsg #define LIBELF_ARCH EM_RISCV 103a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 104a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 105a1b5ec25Sjsg 106*63b93652Sjsg #elif defined(__riscv64) 107*63b93652Sjsg 108*63b93652Sjsg #define LIBELF_ARCH EM_RISCV 109*63b93652Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 110*63b93652Sjsg #define LIBELF_CLASS ELFCLASS64 111*63b93652Sjsg 112a1b5ec25Sjsg #elif defined(__sparc__) 113a1b5ec25Sjsg 114a1b5ec25Sjsg #define LIBELF_ARCH EM_SPARCV9 115a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2MSB 116a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 117a1b5ec25Sjsg 118a1b5ec25Sjsg #else 119a1b5ec25Sjsg #error Unknown FreeBSD architecture. 120a1b5ec25Sjsg #endif 121a1b5ec25Sjsg #endif /* __FreeBSD__ */ 122a1b5ec25Sjsg 123a1b5ec25Sjsg /* 124a1b5ec25Sjsg * Definitions for Minix3. 125a1b5ec25Sjsg */ 126a1b5ec25Sjsg #ifdef __minix 127a1b5ec25Sjsg 128a1b5ec25Sjsg #define LIBELF_ARCH EM_386 129a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFDATA2LSB 130a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 131a1b5ec25Sjsg 132a1b5ec25Sjsg #endif /* __minix */ 133a1b5ec25Sjsg 134a1b5ec25Sjsg #ifdef __NetBSD__ 135a1b5ec25Sjsg 136a1b5ec25Sjsg #include <machine/elf_machdep.h> 137a1b5ec25Sjsg 138a1b5ec25Sjsg #if !defined(ARCH_ELFSIZE) 139a1b5ec25Sjsg #error ARCH_ELFSIZE is not defined. 140a1b5ec25Sjsg #endif 141a1b5ec25Sjsg 142a1b5ec25Sjsg #if ARCH_ELFSIZE == 32 143a1b5ec25Sjsg #define LIBELF_ARCH ELF32_MACHDEP_ID 144a1b5ec25Sjsg #define LIBELF_BYTEORDER ELF32_MACHDEP_ENDIANNESS 145a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS32 146a1b5ec25Sjsg #define Elf_Note Elf32_Nhdr 147a1b5ec25Sjsg #else 148a1b5ec25Sjsg #define LIBELF_ARCH ELF64_MACHDEP_ID 149a1b5ec25Sjsg #define LIBELF_BYTEORDER ELF64_MACHDEP_ENDIANNESS 150a1b5ec25Sjsg #define LIBELF_CLASS ELFCLASS64 151a1b5ec25Sjsg #define Elf_Note Elf64_Nhdr 152a1b5ec25Sjsg #endif 153a1b5ec25Sjsg 154a1b5ec25Sjsg #endif /* __NetBSD__ */ 155a1b5ec25Sjsg 156a1b5ec25Sjsg #if defined(__OpenBSD__) 157a1b5ec25Sjsg 158a1b5ec25Sjsg #include <machine/exec.h> 159a1b5ec25Sjsg 160a1b5ec25Sjsg #define LIBELF_ARCH ELF_TARG_MACH 161a1b5ec25Sjsg #define LIBELF_BYTEORDER ELF_TARG_DATA 162a1b5ec25Sjsg #define LIBELF_CLASS ELF_TARG_CLASS 163a1b5ec25Sjsg 164a1b5ec25Sjsg #endif 165a1b5ec25Sjsg 166a1b5ec25Sjsg /* 167a1b5ec25Sjsg * GNU & Linux compatibility. 168a1b5ec25Sjsg * 169a1b5ec25Sjsg * `__linux__' is defined in an environment runs the Linux kernel and glibc. 170a1b5ec25Sjsg * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc. 171a1b5ec25Sjsg * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU 172a1b5ec25Sjsg * kernel such as GNU/kFreeBSD. 173a1b5ec25Sjsg */ 174a1b5ec25Sjsg 175a1b5ec25Sjsg #if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 176a1b5ec25Sjsg 177a1b5ec25Sjsg #if defined(__linux__) 178a1b5ec25Sjsg 179a1b5ec25Sjsg #include "native-elf-format.h" 180a1b5ec25Sjsg 181a1b5ec25Sjsg #define LIBELF_CLASS ELFTC_CLASS 182a1b5ec25Sjsg #define LIBELF_ARCH ELFTC_ARCH 183a1b5ec25Sjsg #define LIBELF_BYTEORDER ELFTC_BYTEORDER 184a1b5ec25Sjsg 185a1b5ec25Sjsg #endif /* defined(__linux__) */ 186a1b5ec25Sjsg 187a1b5ec25Sjsg #if LIBELF_CLASS == ELFCLASS32 188a1b5ec25Sjsg #define Elf_Note Elf32_Nhdr 189a1b5ec25Sjsg #elif LIBELF_CLASS == ELFCLASS64 190a1b5ec25Sjsg #define Elf_Note Elf64_Nhdr 191a1b5ec25Sjsg #else 192a1b5ec25Sjsg #error LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64 193a1b5ec25Sjsg #endif 194a1b5ec25Sjsg 195a1b5ec25Sjsg #endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */ 196