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 2967d97fe7SEd Maste #if defined(__APPLE__) || defined(__DragonFly__) 302de3b87aSKai Wang 312de3b87aSKai Wang #if defined(__amd64__) 322de3b87aSKai Wang #define LIBELF_ARCH EM_X86_64 332de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 342de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 352de3b87aSKai Wang #elif defined(__i386__) 362de3b87aSKai Wang #define LIBELF_ARCH EM_386 372de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 382de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 392de3b87aSKai Wang #endif 402de3b87aSKai Wang 412de3b87aSKai Wang #endif /* __DragonFly__ */ 422de3b87aSKai Wang 432de3b87aSKai Wang #ifdef __FreeBSD__ 442de3b87aSKai Wang 452de3b87aSKai Wang /* 462de3b87aSKai Wang * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture. 472de3b87aSKai Wang * See also: <machine/elf.h>. 482de3b87aSKai Wang */ 492de3b87aSKai Wang 502de3b87aSKai Wang #if defined(__amd64__) 512de3b87aSKai Wang 522de3b87aSKai Wang #define LIBELF_ARCH EM_X86_64 532de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 542de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 552de3b87aSKai Wang 56a737d64cSEd Maste #elif defined(__aarch64__) 57a737d64cSEd Maste 58a737d64cSEd Maste #define LIBELF_ARCH EM_AARCH64 59a737d64cSEd Maste #define LIBELF_BYTEORDER ELFDATA2LSB 60a737d64cSEd Maste #define LIBELF_CLASS ELFCLASS64 61a737d64cSEd Maste 622de3b87aSKai Wang #elif defined(__arm__) 632de3b87aSKai Wang 642de3b87aSKai Wang #define LIBELF_ARCH EM_ARM 652de3b87aSKai Wang #if defined(__ARMEB__) /* Big-endian ARM. */ 662de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 672de3b87aSKai Wang #else 682de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 692de3b87aSKai Wang #endif 702de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 712de3b87aSKai Wang 722de3b87aSKai Wang #elif defined(__i386__) 732de3b87aSKai Wang 742de3b87aSKai Wang #define LIBELF_ARCH EM_386 752de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 762de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 772de3b87aSKai Wang 782de3b87aSKai Wang #elif defined(__ia64__) 792de3b87aSKai Wang 802de3b87aSKai Wang #define LIBELF_ARCH EM_IA_64 812de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 822de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 832de3b87aSKai Wang 842de3b87aSKai Wang #elif defined(__mips__) 852de3b87aSKai Wang 862de3b87aSKai Wang #define LIBELF_ARCH EM_MIPS 872de3b87aSKai Wang #if defined(__MIPSEB__) 882de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 892de3b87aSKai Wang #else 902de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 912de3b87aSKai Wang #endif 922de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 932de3b87aSKai Wang 944f8d0986SJustin Hibbits #elif defined(__powerpc64__) 954f8d0986SJustin Hibbits 964f8d0986SJustin Hibbits #define LIBELF_ARCH EM_PPC64 97*d9052fccSBrandon Bergren #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 98*d9052fccSBrandon Bergren #define LIBELF_BYTEORDER ELFDATA2LSB 99*d9052fccSBrandon Bergren #else 1004f8d0986SJustin Hibbits #define LIBELF_BYTEORDER ELFDATA2MSB 101*d9052fccSBrandon Bergren #endif 1024f8d0986SJustin Hibbits #define LIBELF_CLASS ELFCLASS64 1034f8d0986SJustin Hibbits 1042de3b87aSKai Wang #elif defined(__powerpc__) 1052de3b87aSKai Wang 1062de3b87aSKai Wang #define LIBELF_ARCH EM_PPC 1072de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 1082de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 1092de3b87aSKai Wang 110ca20f8ecSRuslan Bukin #elif defined(__riscv) && (__riscv_xlen == 64) 1114f0a4502SRuslan Bukin 1124f0a4502SRuslan Bukin #define LIBELF_ARCH EM_RISCV 1134f0a4502SRuslan Bukin #define LIBELF_BYTEORDER ELFDATA2LSB 1144f0a4502SRuslan Bukin #define LIBELF_CLASS ELFCLASS64 1154f0a4502SRuslan Bukin 116d003e0d7SEd Maste #elif defined(__riscv64) 117d003e0d7SEd Maste 118d003e0d7SEd Maste #define LIBELF_ARCH EM_RISCV 119d003e0d7SEd Maste #define LIBELF_BYTEORDER ELFDATA2LSB 120d003e0d7SEd Maste #define LIBELF_CLASS ELFCLASS64 121d003e0d7SEd Maste 1222de3b87aSKai Wang #elif defined(__sparc__) 1232de3b87aSKai Wang 1242de3b87aSKai Wang #define LIBELF_ARCH EM_SPARCV9 1252de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2MSB 1262de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 1272de3b87aSKai Wang 1282de3b87aSKai Wang #else 1292de3b87aSKai Wang #error Unknown FreeBSD architecture. 1302de3b87aSKai Wang #endif 1312de3b87aSKai Wang #endif /* __FreeBSD__ */ 1322de3b87aSKai Wang 1332de3b87aSKai Wang /* 1342de3b87aSKai Wang * Definitions for Minix3. 1352de3b87aSKai Wang */ 1362de3b87aSKai Wang #ifdef __minix 1372de3b87aSKai Wang 1382de3b87aSKai Wang #define LIBELF_ARCH EM_386 1392de3b87aSKai Wang #define LIBELF_BYTEORDER ELFDATA2LSB 1402de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 1412de3b87aSKai Wang 1422de3b87aSKai Wang #endif /* __minix */ 1432de3b87aSKai Wang 1442de3b87aSKai Wang #ifdef __NetBSD__ 1452de3b87aSKai Wang 1462de3b87aSKai Wang #include <machine/elf_machdep.h> 1472de3b87aSKai Wang 1482de3b87aSKai Wang #if !defined(ARCH_ELFSIZE) 1492de3b87aSKai Wang #error ARCH_ELFSIZE is not defined. 1502de3b87aSKai Wang #endif 1512de3b87aSKai Wang 1522de3b87aSKai Wang #if ARCH_ELFSIZE == 32 1532de3b87aSKai Wang #define LIBELF_ARCH ELF32_MACHDEP_ID 1542de3b87aSKai Wang #define LIBELF_BYTEORDER ELF32_MACHDEP_ENDIANNESS 1552de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS32 1562de3b87aSKai Wang #define Elf_Note Elf32_Nhdr 1572de3b87aSKai Wang #else 1582de3b87aSKai Wang #define LIBELF_ARCH ELF64_MACHDEP_ID 1592de3b87aSKai Wang #define LIBELF_BYTEORDER ELF64_MACHDEP_ENDIANNESS 1602de3b87aSKai Wang #define LIBELF_CLASS ELFCLASS64 1612de3b87aSKai Wang #define Elf_Note Elf64_Nhdr 1622de3b87aSKai Wang #endif 1632de3b87aSKai Wang 1642de3b87aSKai Wang #endif /* __NetBSD__ */ 1652de3b87aSKai Wang 1662de3b87aSKai Wang #if defined(__OpenBSD__) 1672de3b87aSKai Wang 1682de3b87aSKai Wang #include <machine/exec.h> 1692de3b87aSKai Wang 1702de3b87aSKai Wang #define LIBELF_ARCH ELF_TARG_MACH 1712de3b87aSKai Wang #define LIBELF_BYTEORDER ELF_TARG_DATA 1722de3b87aSKai Wang #define LIBELF_CLASS ELF_TARG_CLASS 1732de3b87aSKai Wang 1742de3b87aSKai Wang #endif 1752de3b87aSKai Wang 1762de3b87aSKai Wang /* 1772de3b87aSKai Wang * GNU & Linux compatibility. 1782de3b87aSKai Wang * 1792de3b87aSKai Wang * `__linux__' is defined in an environment runs the Linux kernel and glibc. 1802de3b87aSKai Wang * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc. 1812de3b87aSKai Wang * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU 1822de3b87aSKai Wang * kernel such as GNU/kFreeBSD. 1832de3b87aSKai Wang */ 1842de3b87aSKai Wang 1852de3b87aSKai Wang #if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 1862de3b87aSKai Wang 1872de3b87aSKai Wang #if defined(__linux__) 1882de3b87aSKai Wang 1892de3b87aSKai Wang #include "native-elf-format.h" 1902de3b87aSKai Wang 1912de3b87aSKai Wang #define LIBELF_CLASS ELFTC_CLASS 1922de3b87aSKai Wang #define LIBELF_ARCH ELFTC_ARCH 1932de3b87aSKai Wang #define LIBELF_BYTEORDER ELFTC_BYTEORDER 1942de3b87aSKai Wang 1952de3b87aSKai Wang #endif /* defined(__linux__) */ 1962de3b87aSKai Wang 1972de3b87aSKai Wang #if LIBELF_CLASS == ELFCLASS32 1982de3b87aSKai Wang #define Elf_Note Elf32_Nhdr 1992de3b87aSKai Wang #elif LIBELF_CLASS == ELFCLASS64 2002de3b87aSKai Wang #define Elf_Note Elf64_Nhdr 2012de3b87aSKai Wang #else 2022de3b87aSKai Wang #error LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64 2032de3b87aSKai Wang #endif 2042de3b87aSKai Wang 2052de3b87aSKai Wang #endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */ 206