Add .note.gnu.property runtime verification and merge support
[external/binutils.git] / include / elf / common.h
index 1d68f80..ff3a08d 100644 (file)
@@ -1,5 +1,5 @@
 /* ELF support for BFD.
-   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+   Copyright (C) 1991-2016 Free Software Foundation, Inc.
 
    Written by Fred Fish @ Cygnus Support, from information published
    in "UNIX System V Release 4, Programmers Guide: ANSI C and
@@ -73,6 +73,7 @@
 #define ELFOSABI_NSK        14 /* Hewlett-Packard Non-Stop Kernel */
 #define ELFOSABI_AROS       15 /* AROS */
 #define ELFOSABI_FENIXOS     16 /* FenixOS */
+#define ELFOSABI_CLOUDABI    17 /* Nuxi CloudABI */
 #define ELFOSABI_C6000_ELFABI 64 /* Bare-metal TMS320C6000 */
 #define ELFOSABI_C6000_LINUX 65 /* Linux TMS320C6000 */
 #define ELFOSABI_ARM        97 /* ARM */
 #define EM_386           3     /* Intel 80386 */
 #define EM_68K           4     /* Motorola m68k family */
 #define EM_88K           5     /* Motorola m88k family */
-#define EM_486           6     /* Intel 80486 *//* Reserved for future use */
+#define EM_IAMCU         6     /* Intel MCU */
 #define EM_860           7     /* Intel 80860 */
 #define EM_MIPS                  8     /* MIPS R3000 (officially, big-endian only) */
 #define EM_S370                  9     /* IBM System/370 */
 #define EM_MN10200      90     /* Matsushita MN10200 */
 #define EM_PJ           91     /* picoJava */
 #define EM_OR1K                 92     /* OpenRISC 1000 32-bit embedded processor */
-#define EM_ARC_A5       93     /* ARC Cores Tangent-A5 */
+#define EM_ARC_COMPACT  93     /* ARC International ARCompact processor */
 #define EM_XTENSA       94     /* Tensilica Xtensa Architecture */
 #define EM_VIDEOCORE    95     /* Alphamosaic VideoCore processor */
 #define EM_TMM_GPP      96     /* Thompson Multimedia General Purpose Processor */
 #define EM_MICROBLAZE  189     /* Xilinx MicroBlaze 32-bit RISC soft processor core */
 #define EM_CUDA                190     /* NVIDIA CUDA architecture */
 #define EM_TILEGX      191     /* Tilera TILE-Gx multicore architecture family */
+#define EM_ARC_COMPACT2 195    /* Synopsys ARCompact V2 */
 #define EM_RL78                197     /* Renesas RL78 family.  */
 #define EM_78K0R       199     /* Renesas 78K0R.  */
 #define EM_INTEL205    205     /* Reserved by Intel */
 #define EM_INTEL208    208     /* Reserved by Intel */
 #define EM_INTEL209    209     /* Reserved by Intel */
 #define EM_VISIUM      221     /* Controls and Data Services VISIUMcore processor */
+#define EM_FT32         222     /* FTDI Chip FT32 high performance 32-bit RISC architecture */
+#define EM_MOXIE        223     /* Moxie processor family */
 
 /* If it is necessary to assign new unofficial EM_* values, please pick large
    random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
 
 #define EM_CYGNUS_MEP          0xF00D  /* Toshiba MeP */
 
-#define EM_MOXIE                0xFEED  /* Moxie */
+/* Old, unofficial value for Moxie.  */
+#define EM_MOXIE_OLD            0xFEED
 
 /* Old Sunplus S+core7 backend magic number. Written in the absence of an ABI.  */
 #define EM_SCORE_OLD            95
 #define SHF_OS_NONCONFORMING (1 << 8)  /* OS specific processing required */
 #define SHF_GROUP      (1 << 9)        /* Member of a section group */
 #define SHF_TLS                (1 << 10)       /* Thread local storage section */
+#define SHF_COMPRESSED (1 << 11)       /* Section with compressed data */
 
 /* #define SHF_MASKOS  0x0F000000    *//* OS-specific semantics */
 #define SHF_MASKOS     0x0FF00000      /* New value, Oct 4, 1999 Draft */
+#define SHF_GNU_BUILD_NOTE    (1 << 20)        /* Section contains GNU BUILD ATTRIBUTE notes.  */
 #define SHF_MASKPROC   0xF0000000      /* Processor-specific semantics */
 
 /* This used to be implemented as a processor specific section flag.
                                           are not to be further
                                           relocated.  */
 
+/* Compression types */
+#define ELFCOMPRESS_ZLIB   1           /* Compressed with zlib.  */
+#define ELFCOMPRESS_LOOS   0x60000000  /* OS-specific semantics, lo */
+#define ELFCOMPRESS_HIOS   0x6FFFFFFF  /* OS-specific semantics, hi */
+#define ELFCOMPRESS_LOPROC 0x70000000  /* Processor-specific semantics, lo */
+#define ELFCOMPRESS_HIPROC 0x7FFFFFFF  /* Processor-specific semantics, hi */
+
 /* Values of note segment descriptor types for core files.  */
 
 #define NT_PRSTATUS    1               /* Contains copy of prstatus struct */
                                        /*   note name must be "LINUX".  */
 #define NT_S390_TDB    0x308           /* S390 transaction diagnostic block */
                                        /*   note name must be "LINUX".  */
+#define NT_S390_VXRS_LOW       0x309   /* S390 vector registers 0-15 upper half */
+                                       /*   note name must be "LINUX".  */
+#define NT_S390_VXRS_HIGH      0x30a   /* S390 vector registers 16-31 */
+                                       /*   note name must be "LINUX".  */
 #define NT_ARM_VFP     0x400           /* ARM VFP registers */
 /* The following definitions should really use NT_AARCH_..., but defined
    this way for compatibility with Linux.  */
 /* Note segment for SystemTap probes.  */
 #define NT_STAPSDT     3
 
+/* Note segments for core files on FreeBSD systems.  Note name is
+   "FreeBSD".  */
+
+#define        NT_FREEBSD_THRMISC      7       /* Thread miscellaneous info. */
+#define        NT_FREEBSD_PROCSTAT_PROC        8       /* Procstat proc data. */
+#define        NT_FREEBSD_PROCSTAT_FILES       9       /* Procstat files data. */
+#define        NT_FREEBSD_PROCSTAT_VMMAP       10      /* Procstat vmmap data. */
+#define        NT_FREEBSD_PROCSTAT_GROUPS      11      /* Procstat groups data. */
+#define        NT_FREEBSD_PROCSTAT_UMASK       12      /* Procstat umask data. */
+#define        NT_FREEBSD_PROCSTAT_RLIMIT      13      /* Procstat rlimit data. */
+#define        NT_FREEBSD_PROCSTAT_OSREL       14      /* Procstat osreldate data. */
+#define        NT_FREEBSD_PROCSTAT_PSSTRINGS   15      /* Procstat ps_strings data. */
+#define        NT_FREEBSD_PROCSTAT_AUXV        16      /* Procstat auxv data. */
+
 /* Note segments for core files on NetBSD systems.  Note name
    must start with "NetBSD-CORE".  */
 
 #define NT_GNU_HWCAP           2       /* Used by ld.so and kernel vDSO.  */
 #define NT_GNU_BUILD_ID                3       /* Generated by ld --build-id.  */
 #define NT_GNU_GOLD_VERSION    4       /* Generated by gold.  */
+#define NT_GNU_PROPERTY_TYPE_0  5      /* Generated by gcc.  */
+
+#define NT_GNU_BUILD_ATTRIBUTE_OPEN    0x100
+#define NT_GNU_BUILD_ATTRIBUTE_FUNC    0x101
+
+#define GNU_BUILD_ATTRIBUTE_TYPE_NUMERIC       '*'
+#define GNU_BUILD_ATTRIBUTE_TYPE_STRING                '$'
+#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_TRUE     '+'
+#define GNU_BUILD_ATTRIBUTE_TYPE_BOOL_FALSE    '!'
+
+#define GNU_BUILD_ATTRIBUTE_VERSION    1
+#define GNU_BUILD_ATTRIBUTE_STACK_PROT 2
+#define GNU_BUILD_ATTRIBUTE_RELRO      3
+#define GNU_BUILD_ATTRIBUTE_STACK_SIZE 4
+#define GNU_BUILD_ATTRIBUTE_TOOL       5
+#define GNU_BUILD_ATTRIBUTE_ABI                6
+#define GNU_BUILD_ATTRIBUTE_PIC                7
+#define GNU_BUILD_ATTRIBUTE_SHORT_ENUM 8
+
+#define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property"
+#define GNU_BUILD_ATTRS_SECTION_NAME   ".gnu.build.attributes"
+
+/* Values used in GNU .note.gnu.property notes (NT_GNU_PROPERTY_TYPE_0).  */
+#define GNU_PROPERTY_STACK_SIZE                        1
+#define GNU_PROPERTY_NO_COPY_ON_PROTECTED      2
+#define GNU_PROPERTY_COMPILER_FLAGS            32
+
+/* Bit masks for compiler flags:  */
+/* Pre/post cxx11 ABI.  */
+#define GNU_PROPERTY_USECXX_VALIDATION         (1U << 0)
+#define GNU_PROPERTY_USECXX11_ABI              (1U << 1)
+/* Sanitizer flags.  */
+#define GNU_PROPERTY_SANITIZE_VALIDATION       (1U << 2)
+#define GNU_PROPERTY_SANITIZE_ADDRESS          (1U << 3)
+#define GNU_PROPERTY_SANITIZE_UNDEFINED                (1U << 4)
+#define GNU_PROPERTY_SANITIZE_THREAD           (1U << 5)
+
+/* Processor-specific semantics, lo */
+#define GNU_PROPERTY_LOPROC  0xc0000000
+/* Processor-specific semantics, hi */
+#define GNU_PROPERTY_HIPROC  0xdfffffff
+/* Application-specific semantics, lo */
+#define GNU_PROPERTY_LOUSER  0xe0000000
+/* Application-specific semantics, hi */
+#define GNU_PROPERTY_HIUSER  0xffffffff
+
+#define GNU_PROPERTY_X86_ISA_1_USED            0xc0000000
+#define GNU_PROPERTY_X86_ISA_1_NEEDED          0xc0000001
+
+#define GNU_PROPERTY_X86_ISA_1_486           (1U << 0)
+#define GNU_PROPERTY_X86_ISA_1_586           (1U << 1)
+#define GNU_PROPERTY_X86_ISA_1_686           (1U << 2)
+#define GNU_PROPERTY_X86_ISA_1_SSE           (1U << 3)
+#define GNU_PROPERTY_X86_ISA_1_SSE2          (1U << 4)
+#define GNU_PROPERTY_X86_ISA_1_SSE3          (1U << 5)
+#define GNU_PROPERTY_X86_ISA_1_SSSE3         (1U << 6)
+#define GNU_PROPERTY_X86_ISA_1_SSE4_1        (1U << 7)
+#define GNU_PROPERTY_X86_ISA_1_SSE4_2        (1U << 8)
+#define GNU_PROPERTY_X86_ISA_1_AVX           (1U << 9)
+#define GNU_PROPERTY_X86_ISA_1_AVX2          (1U << 10)
+#define GNU_PROPERTY_X86_ISA_1_AVX512F       (1U << 11)
+#define GNU_PROPERTY_X86_ISA_1_AVX512CD      (1U << 12)
+#define GNU_PROPERTY_X86_ISA_1_AVX512ER      (1U << 13)
+#define GNU_PROPERTY_X86_ISA_1_AVX512PF      (1U << 14)
+#define GNU_PROPERTY_X86_ISA_1_AVX512VL      (1U << 15)
+#define GNU_PROPERTY_X86_ISA_1_AVX512DQ      (1U << 16)
+#define GNU_PROPERTY_X86_ISA_1_AVX512BW      (1U << 17)
 
 /* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG).  */
 #define GNU_ABI_TAG_LINUX      0
 #define GNU_ABI_TAG_SOLARIS    2
 #define GNU_ABI_TAG_FREEBSD    3
 #define GNU_ABI_TAG_NETBSD     4
+#define GNU_ABI_TAG_SYLLABLE   5
+#define GNU_ABI_TAG_NACL       6
 
 /* Values for NetBSD .note.netbsd.ident notes.  Note name is "NetBSD".  */
 
 #define NT_NETBSD_IDENT                1
+#define NT_NETBSD_MARCH                5
 
 /* Values for OpenBSD .note.openbsd.ident notes.  Note name is "OpenBSD".  */
 
 #define        DF_1_SYMINTPOSE 0x00800000
 #define        DF_1_GLOBAUDIT  0x01000000
 #define        DF_1_SINGLETON  0x02000000
+#define        DF_1_STUB       0x04000000
+#define        DF_1_PIE        0x08000000
 
 /* Flag values for the DT_FLAGS entry. */
 #define DF_ORIGIN      (1 << 0)
 #define AT_L2_CACHESHAPE  36
 #define AT_L3_CACHESHAPE  37
 
+#define AT_FREEBSD_EXECPATH     15      /* Path to the executable. */
+#define AT_FREEBSD_CANARY       16      /* Canary for SSP. */
+#define AT_FREEBSD_CANARYLEN    17      /* Length of the canary. */
+#define AT_FREEBSD_OSRELDATE    18      /* OSRELDATE. */
+#define AT_FREEBSD_NCPUS        19      /* Number of CPUs. */
+#define AT_FREEBSD_PAGESIZES    20      /* Pagesizes. */
+#define AT_FREEBSD_PAGESIZESLEN 21      /* Number of pagesizes. */
+#define AT_FREEBSD_TIMEKEEP     22      /* Pointer to timehands. */
+#define AT_FREEBSD_STACKPROT    23      /* Initial stack protection. */
+
 #define AT_SUN_UID      2000    /* Effective user ID.  */
 #define AT_SUN_RUID     2001    /* Real user ID.  */
 #define AT_SUN_GID      2002    /* Effective group ID.  */
 #define AT_SUN_LDNAME   2006    /* String giving name of dynamic linker.  */
 #define AT_SUN_LPAGESZ  2007    /* Large pagesize.   */
 #define AT_SUN_PLATFORM 2008    /* Platform name string.  */
+#undef AT_SUN_HWCAP
 #define AT_SUN_HWCAP    2009   /* Machine dependent hints about
                                   processor capabilities.  */
 #define AT_SUN_IFLUSH   2010    /* Should flush icache? */