(root)/
binutils-2.41/
elfcpp/
x86_64.h
       1  // x86-64.h -- ELF definitions specific to EM_X86_64  -*- C++ -*-
       2  
       3  // Copyright (C) 2006-2023 Free Software Foundation, Inc.
       4  // Written by Andrew Chatham.
       5  
       6  // This file is part of elfcpp.
       7     
       8  // This program is free software; you can redistribute it and/or
       9  // modify it under the terms of the GNU Library General Public License
      10  // as published by the Free Software Foundation; either version 2, or
      11  // (at your option) any later version.
      12  
      13  // In addition to the permissions in the GNU Library General Public
      14  // License, the Free Software Foundation gives you unlimited
      15  // permission to link the compiled version of this file into
      16  // combinations with other programs, and to distribute those
      17  // combinations without any restriction coming from the use of this
      18  // file.  (The Library Public License restrictions do apply in other
      19  // respects; for example, they cover modification of the file, and
      20  /// distribution when not linked into a combined executable.)
      21  
      22  // This program is distributed in the hope that it will be useful, but
      23  // WITHOUT ANY WARRANTY; without even the implied warranty of
      24  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      25  // Library General Public License for more details.
      26  
      27  // You should have received a copy of the GNU Library General Public
      28  // License along with this program; if not, write to the Free Software
      29  // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
      30  // 02110-1301, USA.
      31  
      32  #ifndef ELFCPP_X86_64_H
      33  #define ELFCPP_X86_64_H
      34  
      35  namespace elfcpp
      36  {
      37  
      38  // Documentation is taken from
      39  //   http://www.x86-64.org/documentation/abi-0.98.pdf
      40  //   elf.h
      41  // Documentation for the TLS relocs is taken from
      42  //   http://people.redhat.com/drepper/tls.pdf
      43  //   http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt
      44  
      45  enum
      46  {
      47    R_X86_64_NONE = 0,       // No reloc
      48    R_X86_64_64 = 1,         // Direct 64 bit
      49    R_X86_64_PC32 = 2,       // PC relative 32 bit signed
      50    R_X86_64_GOT32 = 3,      // 32 bit GOT entry
      51    R_X86_64_PLT32 = 4,      // 32 bit PLT address
      52    R_X86_64_COPY = 5,       // Copy symbol at runtime
      53    R_X86_64_GLOB_DAT = 6,   // Create GOT entry
      54    R_X86_64_JUMP_SLOT = 7,  // Create PLT entry
      55    R_X86_64_RELATIVE = 8,   // Adjust by program base
      56    R_X86_64_GOTPCREL = 9,   // 32 bit signed PC relative offset to GOT
      57    R_X86_64_32 = 10,        // Direct 32 bit zero extended
      58    R_X86_64_32S = 11,       // Direct 32 bit sign extended
      59    R_X86_64_16 = 12,        // Direct 16 bit zero extended
      60    R_X86_64_PC16 = 13,      // 16 bit sign extended pc relative
      61    R_X86_64_8 = 14,         // Direct 8 bit sign extended
      62    R_X86_64_PC8 = 15,       // 8 bit sign extended pc relative
      63  
      64    // TLS relocations
      65    R_X86_64_DTPMOD64 = 16,  // ID of module containing symbol
      66    R_X86_64_DTPOFF64 = 17,  // Offset in module's TLS block
      67    R_X86_64_TPOFF64 = 18,   // Offset in initial TLS block
      68    R_X86_64_TLSGD = 19,     // 32 bit signed PC relative offset to two
      69                             // GOT entries for GD symbol
      70    R_X86_64_TLSLD = 20,     // 32 bit signed PC relative offset to two
      71                             // GOT entries for LD symbol
      72    R_X86_64_DTPOFF32 = 21,  // Offset in TLS block
      73    R_X86_64_GOTTPOFF = 22,  // 32 bit signed PC relative offset to GOT
      74                             // entry for IE symbol
      75    R_X86_64_TPOFF32 = 23,   // Offset in initial TLS block
      76  
      77    R_X86_64_PC64 = 24,      // 64-bit PC relative
      78    R_X86_64_GOTOFF64 = 25,  // 64-bit GOT offset
      79    R_X86_64_GOTPC32 = 26,   // 32-bit PC relative offset to GOT
      80  
      81    R_X86_64_GOT64 = 27,     // 64-bit GOT entry offset
      82    R_X86_64_GOTPCREL64 = 28, // 64-bit PC relative offset to GOT entry
      83    R_X86_64_GOTPC64 = 29,   // 64-bit PC relative offset to GOT
      84    R_X86_64_GOTPLT64 = 30,  // Like GOT64, indicates that PLT entry needed
      85    R_X86_64_PLTOFF64 = 31,  // 64-bit GOT relative offset to PLT entry
      86  
      87    R_X86_64_SIZE32 = 32,
      88    R_X86_64_SIZE64 = 33,
      89  
      90    R_X86_64_GOTPC32_TLSDESC = 34, // 32-bit PC relative to TLS descriptor in GOT
      91    R_X86_64_TLSDESC_CALL = 35,    // Relaxable call through TLS descriptor
      92    R_X86_64_TLSDESC = 36,         // 2 by 64-bit TLS descriptor
      93    R_X86_64_IRELATIVE = 37,          // Adjust indirectly by program base
      94    R_X86_64_RELATIVE64 = 38,      // 64-bit adjust by program base
      95    R_X86_64_PC32_BND = 39,  // PC relative 32 bit signed with BND prefix
      96    R_X86_64_PLT32_BND = 40, // 32 bit PLT address with BND prefix
      97    R_X86_64_GOTPCRELX = 41, // 32 bit signed PC relative offset to GOT
      98  			   // without REX prefix, relaxable.
      99    R_X86_64_REX_GOTPCRELX = 42, // 32 bit signed PC relative offset to GOT
     100  			       // with REX prefix, relaxable.
     101    // GNU vtable garbage collection extensions.
     102    R_X86_64_GNU_VTINHERIT = 250,
     103    R_X86_64_GNU_VTENTRY = 251
     104  };
     105  
     106  // The bit values that can appear in the GNU_PROPERTY_X86_FEATURE_1_AND
     107  // program property.
     108  
     109  const uint64_t GNU_PROPERTY_X86_FEATURE_1_IBT = 1ULL << 0;
     110  const uint64_t GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1ULL << 1;
     111  
     112  } // End namespace elfcpp.
     113  
     114  #endif // !defined(ELFCPP_X86_64_H)