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