12de3b87aSKai Wang /*- 22de3b87aSKai Wang * Copyright (c) 2008-2011 Joseph Koshy 32de3b87aSKai Wang * All rights reserved. 42de3b87aSKai Wang * 52de3b87aSKai Wang * Redistribution and use in source and binary forms, with or without 62de3b87aSKai Wang * modification, are permitted provided that the following conditions 72de3b87aSKai Wang * are met: 82de3b87aSKai Wang * 1. Redistributions of source code must retain the above copyright 92de3b87aSKai Wang * notice, this list of conditions and the following disclaimer. 102de3b87aSKai Wang * 2. Redistributions in binary form must reproduce the above copyright 112de3b87aSKai Wang * notice, this list of conditions and the following disclaimer in the 122de3b87aSKai Wang * documentation and/or other materials provided with the distribution. 132de3b87aSKai Wang * 142de3b87aSKai Wang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 152de3b87aSKai Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 162de3b87aSKai Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 172de3b87aSKai Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 182de3b87aSKai Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 192de3b87aSKai Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 202de3b87aSKai Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 212de3b87aSKai Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 222de3b87aSKai Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 232de3b87aSKai Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 242de3b87aSKai Wang * SUCH DAMAGE. 252de3b87aSKai Wang * 26d003e0d7SEd Maste * $Id: _libelf_config.h 3764 2019-06-28 21:44:46Z emaste $ 272de3b87aSKai Wang */ 282de3b87aSKai Wang 29839fdcfcSJessica Clarke #if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) 302de3b87aSKai Wang 312de3b87aSKai Wang /* 322de3b87aSKai Wang * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture. 33839fdcfcSJessica Clarke * See also: <machine/elf.h> on FreeBSD. 342de3b87aSKai Wang */ 352de3b87aSKai Wang 362de3b87aSKai Wang #if defined(__amd64__) 372de3b87aSKai Wang 382de3b87aSKai Wang #define LIBELF_ARCH EM_X86_64 392de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 402de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 412de3b87aSKai Wang 42a737d64cSEd Maste #elif defined(__aarch64__) 43a737d64cSEd Maste 44a737d64cSEd Maste #define LIBELF_ARCH EM_AARCH64 45a737d64cSEd Maste #define LIBELF_BYTEORDER ELFDATA2LSB 46a737d64cSEd Maste #define LIBELF_CLASS ELFCLASS64 47a737d64cSEd Maste 482de3b87aSKai Wang #elif defined(__arm__) 492de3b87aSKai Wang 502de3b87aSKai Wang #define LIBELF_ARCH EM_ARM 512de3b87aSKai Wang #if defined(__ARMEB__) /* Big-endian ARM. */ 522de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 532de3b87aSKai Wang #else 542de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 552de3b87aSKai Wang #endif 562de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 572de3b87aSKai Wang 582de3b87aSKai Wang #elif defined(__i386__) 592de3b87aSKai Wang 602de3b87aSKai Wang #define LIBELF_ARCH EM_386 612de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 622de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 632de3b87aSKai Wang 642de3b87aSKai Wang #elif defined(__ia64__) 652de3b87aSKai Wang 662de3b87aSKai Wang #define LIBELF_ARCH EM_IA_64 672de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 682de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 692de3b87aSKai Wang 702de3b87aSKai Wang #elif defined(__mips__) 712de3b87aSKai Wang 722de3b87aSKai Wang #define LIBELF_ARCH EM_MIPS 732de3b87aSKai Wang #if defined(__MIPSEB__) 742de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 752de3b87aSKai Wang #else 762de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 772de3b87aSKai Wang #endif 782de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 792de3b87aSKai Wang 804f8d0986SJustin Hibbits #elif defined(__powerpc64__) 814f8d0986SJustin Hibbits 824f8d0986SJustin Hibbits #define LIBELF_ARCH EM_PPC64 83d9052fccSBrandon Bergren #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 84d9052fccSBrandon Bergren #define LIBELF_BYTEORDER ELFDATA2LSB 85d9052fccSBrandon Bergren #else 864f8d0986SJustin Hibbits #define LIBELF_BYTEORDER ELFDATA2MSB 87d9052fccSBrandon Bergren #endif 884f8d0986SJustin Hibbits #define LIBELF_CLASS ELFCLASS64 894f8d0986SJustin Hibbits 902de3b87aSKai Wang #elif defined(__powerpc__) 912de3b87aSKai Wang 922de3b87aSKai Wang #define LIBELF_ARCH EM_PPC 932de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 942de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 952de3b87aSKai Wang 96ca20f8ecSRuslan Bukin #elif defined(__riscv) && (__riscv_xlen == 64) 974f0a4502SRuslan Bukin 984f0a4502SRuslan Bukin #define LIBELF_ARCH EM_RISCV 994f0a4502SRuslan Bukin #define LIBELF_BYTEORDER ELFDATA2LSB 1004f0a4502SRuslan Bukin #define LIBELF_CLASS ELFCLASS64 1014f0a4502SRuslan Bukin 102d003e0d7SEd Maste #elif defined(__riscv64) 103d003e0d7SEd Maste 104d003e0d7SEd Maste #define LIBELF_ARCH EM_RISCV 105d003e0d7SEd Maste #define LIBELF_BYTEORDER ELFDATA2LSB 106d003e0d7SEd Maste #define LIBELF_CLASS ELFCLASS64 107d003e0d7SEd Maste 108*1ae6faf1Syu shan wei #elif defined(__loongarch64) 109*1ae6faf1Syu shan wei 110*1ae6faf1Syu shan wei #define LIBELF_ARCH EM_LOONGARCH 111*1ae6faf1Syu shan wei #define LIBELF_BYTEORDER ELFDATA2LSB 112*1ae6faf1Syu shan wei #define LIBELF_CLASS ELFCLASS64 113*1ae6faf1Syu shan wei 1142de3b87aSKai Wang #elif defined(__sparc__) 1152de3b87aSKai Wang 1162de3b87aSKai Wang #define LIBELF_ARCH EM_SPARCV9 1172de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 1182de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 1192de3b87aSKai Wang 1202de3b87aSKai Wang #else 121839fdcfcSJessica Clarke #error Unknown architecture. 1222de3b87aSKai Wang #endif 123839fdcfcSJessica Clarke #endif /* defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) */ 1242de3b87aSKai Wang 1252de3b87aSKai Wang /* 1262de3b87aSKai Wang * Definitions for Minix3. 1272de3b87aSKai Wang */ 1282de3b87aSKai Wang #ifdef __minix 1292de3b87aSKai Wang 1302de3b87aSKai Wang #define LIBELF_ARCH EM_386 1312de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 1322de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 1332de3b87aSKai Wang 1342de3b87aSKai Wang #endif /* __minix */ 1352de3b87aSKai Wang 1362de3b87aSKai Wang #ifdef __NetBSD__ 1372de3b87aSKai Wang 1382de3b87aSKai Wang #include <machine/elf_machdep.h> 1392de3b87aSKai Wang 1402de3b87aSKai Wang #if !defined(ARCH_ELFSIZE) 1412de3b87aSKai Wang #error ARCH_ELFSIZE is not defined. 1422de3b87aSKai Wang #endif 1432de3b87aSKai Wang 1442de3b87aSKai Wang #if ARCH_ELFSIZE == 32 1452de3b87aSKai Wang #define LIBELF_ARCH ELF32_MACHDEP_ID 1462de3b87aSKai Wang #define LIBELF_BYTEORDER ELF32_MACHDEP_ENDIANNESS 1472de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 1482de3b87aSKai Wang #define Elf_Note Elf32_Nhdr 1492de3b87aSKai Wang #else 1502de3b87aSKai Wang #define LIBELF_ARCH ELF64_MACHDEP_ID 1512de3b87aSKai Wang #define LIBELF_BYTEORDER ELF64_MACHDEP_ENDIANNESS 1522de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 1532de3b87aSKai Wang #define Elf_Note Elf64_Nhdr 1542de3b87aSKai Wang #endif 1552de3b87aSKai Wang 1562de3b87aSKai Wang #endif /* __NetBSD__ */ 1572de3b87aSKai Wang 1582de3b87aSKai Wang #if defined(__OpenBSD__) 1592de3b87aSKai Wang 1602de3b87aSKai Wang #include <machine/exec.h> 1612de3b87aSKai Wang 1622de3b87aSKai Wang #define LIBELF_ARCH ELF_TARG_MACH 1632de3b87aSKai Wang #define LIBELF_BYTEORDER ELF_TARG_DATA 1642de3b87aSKai Wang #define LIBELF_CLASS ELF_TARG_CLASS 1652de3b87aSKai Wang 1662de3b87aSKai Wang #endif 1672de3b87aSKai Wang 1682de3b87aSKai Wang /* 1692de3b87aSKai Wang * GNU & Linux compatibility. 1702de3b87aSKai Wang * 1712de3b87aSKai Wang * `__linux__' is defined in an environment runs the Linux kernel and glibc. 1722de3b87aSKai Wang * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc. 1732de3b87aSKai Wang * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU 1742de3b87aSKai Wang * kernel such as GNU/kFreeBSD. 1752de3b87aSKai Wang */ 1762de3b87aSKai Wang 1772de3b87aSKai Wang #if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 1782de3b87aSKai Wang 1792de3b87aSKai Wang #if defined(__linux__) 1802de3b87aSKai Wang 1812de3b87aSKai Wang #include "native-elf-format.h" 1822de3b87aSKai Wang 1832de3b87aSKai Wang #define LIBELF_CLASS ELFTC_CLASS 1842de3b87aSKai Wang #define LIBELF_ARCH ELFTC_ARCH 1852de3b87aSKai Wang #define LIBELF_BYTEORDER ELFTC_BYTEORDER 1862de3b87aSKai Wang 1872de3b87aSKai Wang #endif /* defined(__linux__) */ 1882de3b87aSKai Wang 1892de3b87aSKai Wang #if LIBELF_CLASS == ELFCLASS32 1902de3b87aSKai Wang #define Elf_Note Elf32_Nhdr 1912de3b87aSKai Wang #elif LIBELF_CLASS == ELFCLASS64 1922de3b87aSKai Wang #define Elf_Note Elf64_Nhdr 1932de3b87aSKai Wang #else 1942de3b87aSKai Wang #error LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64 1952de3b87aSKai Wang #endif 1962de3b87aSKai Wang 1972de3b87aSKai Wang #endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */ 198