20c7173849
Change-Id: Id3b833d405596735becb3346f3b08c6da57033fe
543 خطوط
9.5 KiB
C
543 خطوط
9.5 KiB
C
/*-
|
|
* Copyright (c) 2009 Joseph Koshy
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* $Id: _elftc.h 2064 2011-10-26 15:12:32Z jkoshy $
|
|
*/
|
|
|
|
/**
|
|
** Miscellanous definitions needed by multiple components.
|
|
**/
|
|
|
|
#ifndef _ELFTC_H
|
|
#define _ELFTC_H
|
|
|
|
#ifndef NULL
|
|
#define NULL ((void *) 0)
|
|
#endif
|
|
|
|
#ifndef offsetof
|
|
// change from (int) to (char *) for x64 gcc
|
|
#define offsetof(T, M) ((char *) &((T*) 0) -> M)
|
|
#endif
|
|
|
|
/*
|
|
* Supply macros missing from <sys/queue.h>
|
|
*/
|
|
|
|
#ifndef STAILQ_FOREACH_SAFE
|
|
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
|
for ((var) = STAILQ_FIRST((head)); \
|
|
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
|
|
(var) = (tvar))
|
|
#endif
|
|
|
|
#ifndef STAILQ_LAST
|
|
#define STAILQ_LAST(head, type, field) \
|
|
(STAILQ_EMPTY((head)) ? \
|
|
NULL : \
|
|
((struct type *)(void *) \
|
|
((char *)((head)->stqh_last) - offsetof(struct type, field))))
|
|
#endif
|
|
|
|
#ifndef TAILQ_FOREACH_SAFE
|
|
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
|
for ((var) = TAILQ_FIRST((head)); \
|
|
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
|
(var) = (tvar))
|
|
#endif
|
|
|
|
/*
|
|
* Symbols that are sometimes missing in system headers.
|
|
*/
|
|
|
|
#ifndef DT_DEPRECATED_SPARC_REGISTER
|
|
#define DT_DEPRECATED_SPARC_REGISTER 0x70000001
|
|
#endif
|
|
|
|
#ifndef DT_GNU_PRELINKED
|
|
#define DT_GNU_PRELINKED 0x6FFFFDF5U
|
|
#endif
|
|
|
|
#ifndef DT_GNU_CONFLICTSZ
|
|
#define DT_GNU_CONFLICTSZ 0x6FFFFDF6U
|
|
#endif
|
|
|
|
#ifndef DT_GNU_LIBLISTSZ
|
|
#define DT_GNU_LIBLISTSZ 0x6FFFFDF7U
|
|
#endif
|
|
|
|
#ifndef DT_GNU_HASH
|
|
#define DT_GNU_HASH 0x6FFFFEF5U
|
|
#endif
|
|
|
|
#ifndef DT_GNU_CONFLICT
|
|
#define DT_GNU_CONFLICT 0x6FFFFEF8U
|
|
#endif
|
|
|
|
#ifndef DT_GNU_LIBLIST
|
|
#define DT_GNU_LIBLIST 0x6FFFFEF9U
|
|
#endif
|
|
|
|
#ifndef DT_MAXPOSTAGS
|
|
#define DT_MAXPOSTAGS 34
|
|
#endif
|
|
|
|
#ifndef DT_SUNW_AUXILIARY
|
|
#define DT_SUNW_AUXILIARY 0x6000000D
|
|
#endif
|
|
|
|
#ifndef DT_SUNW_CAP
|
|
#define DT_SUNW_CAP 0x60000010
|
|
#endif
|
|
|
|
#ifndef DT_SUNW_FILTER
|
|
#define DT_SUNW_FILTER 0x6000000F
|
|
#endif
|
|
|
|
#ifndef DT_SUNW_RTLDINF
|
|
#define DT_SUNW_RTLDINF 0x6000000E
|
|
#endif
|
|
|
|
#ifndef DT_USED
|
|
#define DT_USED 0x7FFFFFFE
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_86OPEN
|
|
#define ELFOSABI_86OPEN 5
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_AIX
|
|
#define ELFOSABI_AIX 7
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_HURD
|
|
#define ELFOSABI_HURD 4
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_NONE
|
|
#define ELFOSABI_NONE 0
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_NSK
|
|
#define ELFOSABI_NSK 14
|
|
#endif
|
|
|
|
#ifndef ELFOSABI_OPENVMS
|
|
#define ELFOSABI_OPENVMS 13
|
|
#endif
|
|
|
|
/*
|
|
* Supply missing EM_XXX definitions.
|
|
*/
|
|
#ifndef EM_68HC05
|
|
#define EM_68HC05 72
|
|
#endif
|
|
|
|
#ifndef EM_68HC08
|
|
#define EM_68HC08 71
|
|
#endif
|
|
|
|
#ifndef EM_68HC11
|
|
#define EM_68HC11 70
|
|
#endif
|
|
|
|
#ifndef EM_68HC16
|
|
#define EM_68HC16 69
|
|
#endif
|
|
|
|
#ifndef EM_ARCA
|
|
#define EM_ARCA 109
|
|
#endif
|
|
|
|
#ifndef EM_ARC_A5
|
|
#define EM_ARC_A5 93
|
|
#endif
|
|
|
|
#ifndef EM_AVR
|
|
#define EM_AVR 83
|
|
#endif
|
|
|
|
#ifndef EM_BLACKFIN
|
|
#define EM_BLACKFIN 106
|
|
#endif
|
|
|
|
#ifndef EM_CR
|
|
#define EM_CR 103
|
|
#endif
|
|
|
|
#ifndef EM_CRIS
|
|
#define EM_CRIS 76
|
|
#endif
|
|
|
|
#ifndef EM_D10V
|
|
#define EM_D10V 85
|
|
#endif
|
|
|
|
#ifndef EM_D30V
|
|
#define EM_D30V 86
|
|
#endif
|
|
|
|
#ifndef EM_F2MC16
|
|
#define EM_F2MC16 104
|
|
#endif
|
|
|
|
#ifndef EM_FIREPATH
|
|
#define EM_FIREPATH 78
|
|
#endif
|
|
|
|
#ifndef EM_FR30
|
|
#define EM_FR30 84
|
|
#endif
|
|
|
|
#ifndef EM_FX66
|
|
#define EM_FX66 66
|
|
#endif
|
|
|
|
#ifndef EM_HUANY
|
|
#define EM_HUANY 81
|
|
#endif
|
|
|
|
#ifndef EM_IP2K
|
|
#define EM_IP2K 101
|
|
#endif
|
|
|
|
#ifndef EM_JAVELIN
|
|
#define EM_JAVELIN 77
|
|
#endif
|
|
|
|
#ifndef EM_M32R
|
|
#define EM_M32R 88
|
|
#endif
|
|
|
|
#ifndef EM_MAX
|
|
#define EM_MAX 102
|
|
#endif
|
|
|
|
#ifndef EM_MMIX
|
|
#define EM_MMIX 80
|
|
#endif
|
|
|
|
#ifndef EM_MN10200
|
|
#define EM_MN10200 90
|
|
#endif
|
|
|
|
#ifndef EM_MN10300
|
|
#define EM_MN10300 89
|
|
#endif
|
|
|
|
#ifndef EM_MSP430
|
|
#define EM_MSP430 105
|
|
#endif
|
|
|
|
#ifndef EM_NS32K
|
|
#define EM_NS32K 97
|
|
#endif
|
|
|
|
#ifndef EM_OPENRISC
|
|
#define EM_OPENRISC 92
|
|
#endif
|
|
|
|
#ifndef EM_PDSP
|
|
#define EM_PDSP 63
|
|
#endif
|
|
|
|
#ifndef EM_PJ
|
|
#define EM_PJ 91
|
|
#endif
|
|
|
|
#ifndef EM_PRISM
|
|
#define EM_PRISM 82
|
|
#endif
|
|
|
|
#ifndef EM_SEP
|
|
#define EM_SEP 108
|
|
#endif
|
|
|
|
#ifndef EM_SE_C33
|
|
#define EM_SE_C33 107
|
|
#endif
|
|
|
|
#ifndef EM_SNP1K
|
|
#define EM_SNP1K 99
|
|
#endif
|
|
|
|
#ifndef EM_ST19
|
|
#define EM_ST19 74
|
|
#endif
|
|
|
|
#ifndef EM_ST200
|
|
#define EM_ST200 100
|
|
#endif
|
|
|
|
#ifndef EM_ST7
|
|
#define EM_ST7 68
|
|
#endif
|
|
|
|
#ifndef EM_ST9PLUS
|
|
#define EM_ST9PLUS 67
|
|
#endif
|
|
|
|
#ifndef EM_SVX
|
|
#define EM_SVX 73
|
|
#endif
|
|
|
|
#ifndef EM_TMM_GPP
|
|
#define EM_TMM_GPP 96
|
|
#endif
|
|
|
|
#ifndef EM_TPC
|
|
#define EM_TPC 98
|
|
#endif
|
|
|
|
#ifndef EM_UNICORE
|
|
#define EM_UNICORE 110
|
|
#endif
|
|
|
|
#ifndef EM_V850
|
|
#define EM_V850 87
|
|
#endif
|
|
|
|
#ifndef EM_VAX
|
|
#define EM_VAX 75
|
|
#endif
|
|
|
|
#ifndef EM_VIDEOCORE
|
|
#define EM_VIDEOCORE 95
|
|
#endif
|
|
|
|
#ifndef EM_XTENSA
|
|
#define EM_XTENSA 94
|
|
#endif
|
|
|
|
#ifndef EM_ZSP
|
|
#define EM_ZSP 79
|
|
#endif
|
|
|
|
#ifndef PN_XNUM
|
|
#define PN_XNUM 0xFFFFU
|
|
#endif
|
|
|
|
#ifndef R_IA_64_DIR32LSB
|
|
#define R_IA_64_DIR32LSB 0x25
|
|
#endif
|
|
|
|
#ifndef R_IA_64_DIR64LSB
|
|
#define R_IA_64_DIR64LSB 0x27
|
|
#endif
|
|
|
|
#ifndef R_IA_64_SECREL32LSB
|
|
#define R_IA_64_SECREL32LSB 0x65
|
|
#endif
|
|
|
|
#ifndef R_MIPS_32
|
|
#define R_MIPS_32 0x2
|
|
#endif
|
|
|
|
#ifndef R_PPC_ADDR32
|
|
#define R_PPC_ADDR32 0x1
|
|
#endif
|
|
|
|
#ifndef R_SPARC_UA32
|
|
#define R_SPARC_UA32 23
|
|
#endif
|
|
|
|
#ifndef R_SPARC_UA64
|
|
#define R_SPARC_UA64 54
|
|
#endif
|
|
|
|
#ifndef R_X86_64_32
|
|
#define R_X86_64_32 10
|
|
#endif
|
|
|
|
#ifndef R_X86_64_64
|
|
#define R_X86_64_64 1
|
|
#endif
|
|
|
|
#ifndef SHT_AMD64_UNWIND
|
|
#define SHT_AMD64_UNWIND 0x70000001
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_ANNOTATE
|
|
#define SHT_SUNW_ANNOTATE 0X6FFFFFF7
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_DEBUGSTR
|
|
#define SHT_SUNW_DEBUGSTR 0X6FFFFFF8
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_DEBUG
|
|
#define SHT_SUNW_DEBUG 0X6FFFFFF9
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_cap
|
|
#define SHT_SUNW_cap 0x6FFFFFF5
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_dof
|
|
#define SHT_SUNW_dof 0x6FFFFFF4
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_verdef
|
|
#define SHT_SUNW_verdef 0x6FFFFFFD
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_verneed
|
|
#define SHT_SUNW_verneed 0x6FFFFFFE
|
|
#endif
|
|
|
|
#ifndef SHT_SUNW_versym
|
|
#define SHT_SUNW_versym 0x6FFFFFFF
|
|
#endif
|
|
|
|
#ifndef SHN_XINDEX
|
|
#define SHN_XINDEX 0xFFFFU
|
|
#endif
|
|
|
|
#ifndef SHT_GNU_ATTRIBUTES
|
|
#define SHT_GNU_ATTRIBUTES 0x6FFFFFF5U
|
|
#endif
|
|
|
|
#ifndef SHT_GNU_HASH
|
|
#define SHT_GNU_HASH 0x6FFFFFF6U
|
|
#endif
|
|
|
|
#ifndef SHT_GNU_LIBLIST
|
|
#define SHT_GNU_LIBLIST 0x6FFFFFF7U
|
|
#endif
|
|
|
|
/*
|
|
* VCS Ids.
|
|
*/
|
|
|
|
#ifndef ELFTC_VCSID
|
|
|
|
#if defined(__FreeBSD__)
|
|
#define ELFTC_VCSID(ID) __FBSDID(ID)
|
|
#endif
|
|
|
|
#if defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)
|
|
#if defined(__GNUC__)
|
|
#define ELFTC_VCSID(ID) __asm__(".ident\t\"" ID "\"")
|
|
#else
|
|
#define ELFTC_VCSID(ID) /**/
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(__NetBSD__)
|
|
#define ELFTC_VCSID(ID) __RCSID(ID)
|
|
#endif
|
|
|
|
#endif /* ELFTC_VCSID */
|
|
|
|
/*
|
|
* Provide an equivalent for getprogname(3).
|
|
*/
|
|
|
|
#ifndef ELFTC_GETPROGNAME
|
|
|
|
#if defined(__FreeBSD__) || defined(__NetBSD__)
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define ELFTC_GETPROGNAME() getprogname()
|
|
|
|
#endif /* defined(__FreeBSD__) || defined(__NetBSD__) */
|
|
|
|
|
|
#if defined(__linux__)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/*
|
|
* GLIBC based systems have a global 'char *' pointer referencing
|
|
* the executable's name.
|
|
*/
|
|
extern /*const*/ char *program_invocation_short_name;
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#define ELFTC_GETPROGNAME() program_invocation_short_name
|
|
|
|
#endif /* __linux__ */
|
|
|
|
#endif /* ELFTC_GETPROGNAME */
|
|
|
|
/**
|
|
** Per-OS configuration.
|
|
**/
|
|
|
|
#if defined(__linux__)
|
|
|
|
#include <endian.h>
|
|
|
|
#define ELFTC_BYTE_ORDER __BYTE_ORDER
|
|
#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN __LITTLE_ENDIAN
|
|
#define ELFTC_BYTE_ORDER_BIG_ENDIAN __BIG_ENDIAN
|
|
|
|
/*
|
|
* Debian GNU/Linux is missing strmode(3).
|
|
*/
|
|
#define ELFTC_HAVE_STRMODE 0
|
|
|
|
/* Whether we need to supply {be,le}32dec. */
|
|
#define ELFTC_NEED_BYTEORDER_EXTENSIONS 1
|
|
|
|
#define roundup2 roundup
|
|
|
|
#endif /* __linux__ */
|
|
|
|
|
|
#if defined(__FreeBSD__)
|
|
|
|
#include <osreldate.h>
|
|
#include <sys/endian.h>
|
|
|
|
#define ELFTC_BYTE_ORDER _BYTE_ORDER
|
|
#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN
|
|
#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN
|
|
|
|
#define ELFTC_HAVE_STRMODE 1
|
|
#if __FreeBSD_version <= 900000
|
|
#define ELFTC_BROKEN_YY_NO_INPUT 1
|
|
#endif
|
|
#endif /* __FreeBSD__ */
|
|
|
|
|
|
#if defined(__NetBSD__)
|
|
|
|
#include <sys/endian.h>
|
|
|
|
#define ELFTC_BYTE_ORDER _BYTE_ORDER
|
|
#define ELFTC_BYTE_ORDER_LITTLE_ENDIAN _LITTLE_ENDIAN
|
|
#define ELFTC_BYTE_ORDER_BIG_ENDIAN _BIG_ENDIAN
|
|
|
|
#define ELFTC_HAVE_STRMODE 1
|
|
#define ELFTC_BROKEN_YY_NO_INPUT 1
|
|
#endif /* __NetBSD __ */
|
|
|
|
#endif /* _ELFTC_H */
|