1260684Skaiw/*- 2260684Skaiw * Copyright (c) 2008-2011 Joseph Koshy 3260684Skaiw * All rights reserved. 4260684Skaiw * 5260684Skaiw * Redistribution and use in source and binary forms, with or without 6260684Skaiw * modification, are permitted provided that the following conditions 7260684Skaiw * are met: 8260684Skaiw * 1. Redistributions of source code must retain the above copyright 9260684Skaiw * notice, this list of conditions and the following disclaimer. 10260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright 11260684Skaiw * notice, this list of conditions and the following disclaimer in the 12260684Skaiw * documentation and/or other materials provided with the distribution. 13260684Skaiw * 14260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17260684Skaiw * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24260684Skaiw * SUCH DAMAGE. 25260684Skaiw * 26300311Semaste * $Id: _libelf_config.h 3400 2016-02-12 18:38:49Z emaste $ 27260684Skaiw */ 28260684Skaiw 29280932Semaste#if defined(__APPLE__) || defined(__DragonFly__) 30260684Skaiw 31260684Skaiw#if defined(__amd64__) 32260684Skaiw#define LIBELF_ARCH EM_X86_64 33260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 34260684Skaiw#define LIBELF_CLASS ELFCLASS64 35260684Skaiw#elif defined(__i386__) 36260684Skaiw#define LIBELF_ARCH EM_386 37260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 38260684Skaiw#define LIBELF_CLASS ELFCLASS32 39260684Skaiw#endif 40260684Skaiw 41260684Skaiw#endif /* __DragonFly__ */ 42260684Skaiw 43260684Skaiw#ifdef __FreeBSD__ 44260684Skaiw 45260684Skaiw/* 46260684Skaiw * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture. 47260684Skaiw * See also: <machine/elf.h>. 48260684Skaiw */ 49260684Skaiw 50260684Skaiw#if defined(__amd64__) 51260684Skaiw 52260684Skaiw#define LIBELF_ARCH EM_X86_64 53260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 54260684Skaiw#define LIBELF_CLASS ELFCLASS64 55260684Skaiw 56276785Semaste#elif defined(__aarch64__) 57276785Semaste 58276785Semaste#define LIBELF_ARCH EM_AARCH64 59276785Semaste#define LIBELF_BYTEORDER ELFDATA2LSB 60276785Semaste#define LIBELF_CLASS ELFCLASS64 61276785Semaste 62260684Skaiw#elif defined(__arm__) 63260684Skaiw 64260684Skaiw#define LIBELF_ARCH EM_ARM 65260684Skaiw#if defined(__ARMEB__) /* Big-endian ARM. */ 66260684Skaiw#define LIBELF_BYTEORDER ELFDATA2MSB 67260684Skaiw#else 68260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 69260684Skaiw#endif 70260684Skaiw#define LIBELF_CLASS ELFCLASS32 71260684Skaiw 72260684Skaiw#elif defined(__i386__) 73260684Skaiw 74260684Skaiw#define LIBELF_ARCH EM_386 75260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 76260684Skaiw#define LIBELF_CLASS ELFCLASS32 77260684Skaiw 78260684Skaiw#elif defined(__ia64__) 79260684Skaiw 80260684Skaiw#define LIBELF_ARCH EM_IA_64 81260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 82260684Skaiw#define LIBELF_CLASS ELFCLASS64 83260684Skaiw 84260684Skaiw#elif defined(__mips__) 85260684Skaiw 86260684Skaiw#define LIBELF_ARCH EM_MIPS 87260684Skaiw#if defined(__MIPSEB__) 88260684Skaiw#define LIBELF_BYTEORDER ELFDATA2MSB 89260684Skaiw#else 90260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 91260684Skaiw#endif 92260684Skaiw#define LIBELF_CLASS ELFCLASS32 93260684Skaiw 94260684Skaiw#elif defined(__powerpc__) 95260684Skaiw 96260684Skaiw#define LIBELF_ARCH EM_PPC 97260684Skaiw#define LIBELF_BYTEORDER ELFDATA2MSB 98260684Skaiw#define LIBELF_CLASS ELFCLASS32 99260684Skaiw 100294664Sbr#elif defined(__riscv64) 101294664Sbr 102294664Sbr#define LIBELF_ARCH EM_RISCV 103294664Sbr#define LIBELF_BYTEORDER ELFDATA2LSB 104294664Sbr#define LIBELF_CLASS ELFCLASS64 105294664Sbr 106260684Skaiw#elif defined(__sparc__) 107260684Skaiw 108260684Skaiw#define LIBELF_ARCH EM_SPARCV9 109260684Skaiw#define LIBELF_BYTEORDER ELFDATA2MSB 110260684Skaiw#define LIBELF_CLASS ELFCLASS64 111260684Skaiw 112260684Skaiw#else 113260684Skaiw#error Unknown FreeBSD architecture. 114260684Skaiw#endif 115260684Skaiw#endif /* __FreeBSD__ */ 116260684Skaiw 117260684Skaiw/* 118260684Skaiw * Definitions for Minix3. 119260684Skaiw */ 120260684Skaiw#ifdef __minix 121260684Skaiw 122260684Skaiw#define LIBELF_ARCH EM_386 123260684Skaiw#define LIBELF_BYTEORDER ELFDATA2LSB 124260684Skaiw#define LIBELF_CLASS ELFCLASS32 125260684Skaiw 126260684Skaiw#endif /* __minix */ 127260684Skaiw 128260684Skaiw#ifdef __NetBSD__ 129260684Skaiw 130260684Skaiw#include <machine/elf_machdep.h> 131260684Skaiw 132260684Skaiw#if !defined(ARCH_ELFSIZE) 133260684Skaiw#error ARCH_ELFSIZE is not defined. 134260684Skaiw#endif 135260684Skaiw 136260684Skaiw#if ARCH_ELFSIZE == 32 137260684Skaiw#define LIBELF_ARCH ELF32_MACHDEP_ID 138260684Skaiw#define LIBELF_BYTEORDER ELF32_MACHDEP_ENDIANNESS 139260684Skaiw#define LIBELF_CLASS ELFCLASS32 140260684Skaiw#define Elf_Note Elf32_Nhdr 141260684Skaiw#else 142260684Skaiw#define LIBELF_ARCH ELF64_MACHDEP_ID 143260684Skaiw#define LIBELF_BYTEORDER ELF64_MACHDEP_ENDIANNESS 144260684Skaiw#define LIBELF_CLASS ELFCLASS64 145260684Skaiw#define Elf_Note Elf64_Nhdr 146260684Skaiw#endif 147260684Skaiw 148260684Skaiw#endif /* __NetBSD__ */ 149260684Skaiw 150260684Skaiw#if defined(__OpenBSD__) 151260684Skaiw 152260684Skaiw#include <machine/exec.h> 153260684Skaiw 154260684Skaiw#define LIBELF_ARCH ELF_TARG_MACH 155260684Skaiw#define LIBELF_BYTEORDER ELF_TARG_DATA 156260684Skaiw#define LIBELF_CLASS ELF_TARG_CLASS 157260684Skaiw 158260684Skaiw#endif 159260684Skaiw 160260684Skaiw/* 161260684Skaiw * GNU & Linux compatibility. 162260684Skaiw * 163260684Skaiw * `__linux__' is defined in an environment runs the Linux kernel and glibc. 164260684Skaiw * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc. 165260684Skaiw * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU 166260684Skaiw * kernel such as GNU/kFreeBSD. 167260684Skaiw */ 168260684Skaiw 169260684Skaiw#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) 170260684Skaiw 171260684Skaiw#if defined(__linux__) 172260684Skaiw 173260684Skaiw#include "native-elf-format.h" 174260684Skaiw 175260684Skaiw#define LIBELF_CLASS ELFTC_CLASS 176260684Skaiw#define LIBELF_ARCH ELFTC_ARCH 177260684Skaiw#define LIBELF_BYTEORDER ELFTC_BYTEORDER 178260684Skaiw 179260684Skaiw#endif /* defined(__linux__) */ 180260684Skaiw 181260684Skaiw#if LIBELF_CLASS == ELFCLASS32 182260684Skaiw#define Elf_Note Elf32_Nhdr 183260684Skaiw#elif LIBELF_CLASS == ELFCLASS64 184260684Skaiw#define Elf_Note Elf64_Nhdr 185260684Skaiw#else 186260684Skaiw#error LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64 187260684Skaiw#endif 188260684Skaiw 189260684Skaiw#endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */ 190