_libelf_config.h revision 260697
11638Srgrimes/*-
21638Srgrimes * Copyright (c) 2008-2011 Joseph Koshy
31638Srgrimes * All rights reserved.
41638Srgrimes *
51638Srgrimes * Redistribution and use in source and binary forms, with or without
61638Srgrimes * modification, are permitted provided that the following conditions
71638Srgrimes * are met:
81638Srgrimes * 1. Redistributions of source code must retain the above copyright
91638Srgrimes *    notice, this list of conditions and the following disclaimer.
101638Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
111638Srgrimes *    notice, this list of conditions and the following disclaimer in the
12263142Seadler *    documentation and/or other materials provided with the distribution.
131638Srgrimes *
141638Srgrimes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
151638Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
161638Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
171638Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
181638Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
191638Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
201638Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
211638Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
221638Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
231638Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
241638Srgrimes * SUCH DAMAGE.
251638Srgrimes *
261638Srgrimes * $Id: _libelf_config.h 2287 2011-12-04 06:45:47Z jkoshy $
271638Srgrimes */
281638Srgrimes
291638Srgrimes#ifdef	__DragonFly__
301638Srgrimes
311638Srgrimes#if	defined(__amd64__)
321638Srgrimes#define	LIBELF_ARCH		EM_X86_64
331638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
341638Srgrimes#define	LIBELF_CLASS		ELFCLASS64
351638Srgrimes#elif	defined(__i386__)
361638Srgrimes#define	LIBELF_ARCH		EM_386
371638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
381638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
391638Srgrimes#endif
401638Srgrimes
411638Srgrimes#endif	/* __DragonFly__ */
421638Srgrimes
431638Srgrimes#ifdef __FreeBSD__
441638Srgrimes
451638Srgrimes/*
461638Srgrimes * Define LIBELF_{ARCH,BYTEORDER,CLASS} based on the machine architecture.
471638Srgrimes * See also: <machine/elf.h>.
481638Srgrimes */
491638Srgrimes
501638Srgrimes#if	defined(__amd64__)
511638Srgrimes
521638Srgrimes#define	LIBELF_ARCH		EM_X86_64
531638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
541638Srgrimes#define	LIBELF_CLASS		ELFCLASS64
551638Srgrimes
561638Srgrimes#elif	defined(__arm__)
571638Srgrimes
581638Srgrimes#define	LIBELF_ARCH		EM_ARM
591638Srgrimes#if	defined(__ARMEB__)	/* Big-endian ARM. */
601638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2MSB
611638Srgrimes#else
621638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
631638Srgrimes#endif
641638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
651638Srgrimes
661638Srgrimes#elif	defined(__i386__)
671638Srgrimes
681638Srgrimes#define	LIBELF_ARCH		EM_386
691638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
701638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
711638Srgrimes
721638Srgrimes#elif	defined(__ia64__)
731638Srgrimes
741638Srgrimes#define	LIBELF_ARCH		EM_IA_64
751638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
761638Srgrimes#define	LIBELF_CLASS		ELFCLASS64
771638Srgrimes
781638Srgrimes#elif	defined(__mips__)
791638Srgrimes
801638Srgrimes#define	LIBELF_ARCH		EM_MIPS
811638Srgrimes#if	defined(__MIPSEB__)
821638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2MSB
831638Srgrimes#else
841638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
851638Srgrimes#endif
861638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
871638Srgrimes
881638Srgrimes#elif	defined(__powerpc__)
891638Srgrimes
901638Srgrimes#define	LIBELF_ARCH		EM_PPC
911638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2MSB
921638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
931638Srgrimes
941638Srgrimes#elif	defined(__sparc__)
951638Srgrimes
961638Srgrimes#define	LIBELF_ARCH		EM_SPARCV9
971638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2MSB
981638Srgrimes#define	LIBELF_CLASS		ELFCLASS64
991638Srgrimes
1001638Srgrimes#else
1011638Srgrimes#error	Unknown FreeBSD architecture.
1021638Srgrimes#endif
1031638Srgrimes#endif  /* __FreeBSD__ */
1041638Srgrimes
1051638Srgrimes/*
1061638Srgrimes * Definitions for Minix3.
1071638Srgrimes */
1081638Srgrimes#ifdef __minix
1091638Srgrimes
1101638Srgrimes#define	LIBELF_ARCH		EM_386
1111638Srgrimes#define	LIBELF_BYTEORDER	ELFDATA2LSB
1121638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
1131638Srgrimes
1141638Srgrimes#endif	/* __minix */
1151638Srgrimes
1161638Srgrimes#ifdef __NetBSD__
1171638Srgrimes
1181638Srgrimes#include <machine/elf_machdep.h>
1191638Srgrimes
1201638Srgrimes#if	!defined(ARCH_ELFSIZE)
1211638Srgrimes#error	ARCH_ELFSIZE is not defined.
1221638Srgrimes#endif
1231638Srgrimes
1241638Srgrimes#if	ARCH_ELFSIZE == 32
1251638Srgrimes#define	LIBELF_ARCH		ELF32_MACHDEP_ID
1261638Srgrimes#define	LIBELF_BYTEORDER	ELF32_MACHDEP_ENDIANNESS
1271638Srgrimes#define	LIBELF_CLASS		ELFCLASS32
1281638Srgrimes#define	Elf_Note		Elf32_Nhdr
1291638Srgrimes#else
1301638Srgrimes#define	LIBELF_ARCH		ELF64_MACHDEP_ID
1311638Srgrimes#define	LIBELF_BYTEORDER	ELF64_MACHDEP_ENDIANNESS
1321638Srgrimes#define	LIBELF_CLASS		ELFCLASS64
1331638Srgrimes#define	Elf_Note		Elf64_Nhdr
1341638Srgrimes#endif
1351638Srgrimes
1361638Srgrimes#endif	/* __NetBSD__ */
1371638Srgrimes
1381638Srgrimes#if defined(__OpenBSD__)
1391638Srgrimes
1401638Srgrimes#include <machine/exec.h>
1411638Srgrimes
1421638Srgrimes#define	LIBELF_ARCH		ELF_TARG_MACH
1431638Srgrimes#define	LIBELF_BYTEORDER	ELF_TARG_DATA
1441638Srgrimes#define	LIBELF_CLASS		ELF_TARG_CLASS
1451638Srgrimes
1461638Srgrimes#endif
1471638Srgrimes
1481638Srgrimes/*
1491638Srgrimes * GNU & Linux compatibility.
1501638Srgrimes *
1511638Srgrimes * `__linux__' is defined in an environment runs the Linux kernel and glibc.
1521638Srgrimes * `__GNU__' is defined in an environment runs a GNU kernel (Hurd) and glibc.
1531638Srgrimes * `__GLIBC__' is defined for an environment that runs glibc over a non-GNU
1541638Srgrimes *     kernel such as GNU/kFreeBSD.
1551638Srgrimes */
1561638Srgrimes
1571638Srgrimes#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
1581638Srgrimes
1591638Srgrimes#if defined(__linux__)
1601638Srgrimes
1611638Srgrimes#include "native-elf-format.h"
1621638Srgrimes
1631638Srgrimes#define	LIBELF_CLASS		ELFTC_CLASS
1641638Srgrimes#define	LIBELF_ARCH		ELFTC_ARCH
1651638Srgrimes#define	LIBELF_BYTEORDER	ELFTC_BYTEORDER
1661638Srgrimes
1671638Srgrimes#endif	/* defined(__linux__) */
1681638Srgrimes
1691638Srgrimes#if	LIBELF_CLASS == ELFCLASS32
1701638Srgrimes#define	Elf_Note		Elf32_Nhdr
1711638Srgrimes#elif   LIBELF_CLASS == ELFCLASS64
1721638Srgrimes#define	Elf_Note		Elf64_Nhdr
1731638Srgrimes#else
1741638Srgrimes#error  LIBELF_CLASS needs to be one of ELFCLASS32 or ELFCLASS64
1751638Srgrimes#endif
1761638Srgrimes
1771638Srgrimes#endif /* defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) */
1781638Srgrimes