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