Add comment regarding include order of <sys/ptrace.h> and <asm/ptrace.h>
[binutils-gdb.git] / elfcpp / elfcpp.h
index 1f629ced05d3ad59b9f29cfb9c52aee825f038f7..fdee7ce3b8b6f93868d5366ce340063bd8ca5fea 100644 (file)
@@ -1,6 +1,6 @@
 // elfcpp.h -- main header file for elfcpp    -*- C++ -*-
 
-// Copyright (C) 2006-2017 Free Software Foundation, Inc.
+// Copyright (C) 2006-2021 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of elfcpp.
@@ -413,6 +413,10 @@ enum SHT
   // AARCH64-specific section type.
   SHT_AARCH64_ATTRIBUTES = 0x70000003,
 
+  // CSKY-specific section types.
+  // Object file compatibility attributes.
+  SHT_CSKY_ATTRIBUTES = 0x70000001,
+
   // Link editor is to sort the entries in this section based on the
   // address specified in the associated symbol table entry.
   SHT_ORDERED = 0x7fffffff
@@ -434,6 +438,7 @@ enum SHF
   SHF_TLS = 0x400,
   SHF_COMPRESSED = 0x800,
   SHF_MASKOS = 0x0ff00000,
+  SHF_GNU_RETAIN = 0x200000,
   SHF_MASKPROC = 0xf0000000,
 
   // Indicates this section requires ordering in relation to
@@ -728,6 +733,7 @@ enum DT
 
   // The remaining values are extensions used by GNU or Solaris.
   DT_VALRNGLO = 0x6ffffd00,
+  DT_GNU_FLAGS_1 = 0x6ffffdf4,
   DT_GNU_PRELINKED = 0x6ffffdf5,
   DT_GNU_CONFLICTSZ = 0x6ffffdf6,
   DT_GNU_LIBLISTSZ = 0x6ffffdf7,
@@ -913,7 +919,14 @@ enum DF_1
   DF_1_INTERPOSE = 0x400,
   DF_1_NODEFLIB = 0x800,
   DF_1_NODUMP = 0x1000,
-  DF_1_CONLFAT = 0x2000
+  DF_1_CONLFAT = 0x2000,
+  DF_1_PIE = 0x08000000
+};
+
+// Flags found in the DT_GNU_FLAGS_1 dynamic element.
+enum DF_GNU_1
+{
+  DF_GNU_1_UNIQUE = 0x1,
 };
 
 // Version numbers which appear in the vd_version field of a Verdef
@@ -984,7 +997,9 @@ enum
   NT_GNU_BUILD_ID = 3,
   // The version of gold used to link.  Th descriptor is just a
   // string.
-  NT_GNU_GOLD_VERSION = 4
+  NT_GNU_GOLD_VERSION = 4,
+  // Program property note, as described in "Linux Extensions to the gABI".
+  NT_GNU_PROPERTY_TYPE_0 = 5
 };
 
 // The OS values which may appear in word 0 of a NT_GNU_ABI_TAG note.
@@ -999,6 +1014,33 @@ enum
   ELF_NOTE_OS_SYLLABLE = 5
 };
 
+// Program property types for NT_GNU_PROPERTY_TYPE_0.
+
+enum
+{
+  GNU_PROPERTY_STACK_SIZE = 1,
+  GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
+  GNU_PROPERTY_LOPROC = 0xc0000000,
+  GNU_PROPERTY_X86_COMPAT_ISA_1_USED = 0xc0000000,
+  GNU_PROPERTY_X86_COMPAT_ISA_1_NEEDED = 0xc0000001,
+  GNU_PROPERTY_X86_UINT32_AND_LO = 0xc0000002,
+  GNU_PROPERTY_X86_UINT32_AND_HI = 0xc0007fff,
+  GNU_PROPERTY_X86_UINT32_OR_LO = 0xc0008000,
+  GNU_PROPERTY_X86_UINT32_OR_HI = 0xc000ffff,
+  GNU_PROPERTY_X86_UINT32_OR_AND_LO = 0xc0010000,
+  GNU_PROPERTY_X86_UINT32_OR_AND_HI = 0xc0017fff,
+  GNU_PROPERTY_X86_COMPAT_2_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 0,
+  GNU_PROPERTY_X86_COMPAT_2_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 0,
+  GNU_PROPERTY_X86_FEATURE_1_AND = GNU_PROPERTY_X86_UINT32_AND_LO + 0,
+  GNU_PROPERTY_X86_ISA_1_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 2,
+  GNU_PROPERTY_X86_FEATURE_2_NEEDED = GNU_PROPERTY_X86_UINT32_OR_LO + 1,
+  GNU_PROPERTY_X86_ISA_1_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 2,
+  GNU_PROPERTY_X86_FEATURE_2_USED = GNU_PROPERTY_X86_UINT32_OR_AND_LO + 1,
+  GNU_PROPERTY_HIPROC = 0xdfffffff,
+  GNU_PROPERTY_LOUSER = 0xe0000000,
+  GNU_PROPERTY_HIUSER = 0xffffffff
+};
+
 } // End namespace elfcpp.
 
 // Include internal details after defining the types.
@@ -1058,6 +1100,14 @@ class Ehdr
   get_e_ident() const
   { return this->p_->e_ident; }
 
+  unsigned char
+  get_ei_osabi() const
+  { return this->p_->e_ident[EI_OSABI]; }
+
+  unsigned char
+  get_ei_abiversion() const
+  { return this->p_->e_ident[EI_ABIVERSION]; }
+
   Elf_Half
   get_e_type() const
   { return Convert<16, big_endian>::convert_host(this->p_->e_type); }