s390.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // s390.h -- ELF definitions specific to EM_S390 -*- C++ -*-
  2. // Copyright (C) 2015-2022 Free Software Foundation, Inc.
  3. // Written by Marcin Kościelnicki <koriakin@0x04.net>.
  4. // This file is part of elfcpp.
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU Library General Public License
  7. // as published by the Free Software Foundation; either version 2, or
  8. // (at your option) any later version.
  9. // In addition to the permissions in the GNU Library General Public
  10. // License, the Free Software Foundation gives you unlimited
  11. // permission to link the compiled version of this file into
  12. // combinations with other programs, and to distribute those
  13. // combinations without any restriction coming from the use of this
  14. // file. (The Library Public License restrictions do apply in other
  15. // respects; for example, they cover modification of the file, and
  16. /// distribution when not linked into a combined executable.)
  17. // This program is distributed in the hope that it will be useful, but
  18. // WITHOUT ANY WARRANTY; without even the implied warranty of
  19. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  20. // Library General Public License for more details.
  21. // You should have received a copy of the GNU Library General Public
  22. // License along with this program; if not, write to the Free Software
  23. // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
  24. // 02110-1301, USA.
  25. #ifndef ELFCPP_S390_H
  26. #define ELFCPP_S390_H
  27. namespace elfcpp
  28. {
  29. enum
  30. {
  31. // Original 31-bit ABI.
  32. R_390_NONE = 0, // No reloc.
  33. R_390_8 = 1, // Direct 8 bit.
  34. R_390_12 = 2, // Direct 12 bit.
  35. R_390_16 = 3, // Direct 16 bit.
  36. R_390_32 = 4, // Direct 32 bit.
  37. R_390_PC32 = 5, // PC relative 32 bit.
  38. R_390_GOT12 = 6, // 12 bit GOT offset.
  39. R_390_GOT32 = 7, // 32 bit GOT offset.
  40. R_390_PLT32 = 8, // 32 bit PC relative PLT address.
  41. R_390_COPY = 9, // Copy symbol at runtime.
  42. R_390_GLOB_DAT = 10, // Create GOT entry.
  43. R_390_JMP_SLOT = 11, // Create PLT entry.
  44. R_390_RELATIVE = 12, // Adjust by program base.
  45. R_390_GOTOFF32 = 13, // 32 bit offset to GOT.
  46. R_390_GOTPC = 14, // 32 bit PC relative offset to GOT.
  47. R_390_GOT16 = 15, // 16 bit GOT offset.
  48. R_390_PC16 = 16, // PC relative 16 bit.
  49. R_390_PC16DBL = 17, // PC relative 16 bit shifted by 1.
  50. R_390_PLT16DBL = 18, // 16 bit PC rel. PLT shifted by 1.
  51. // New 64-bit ABI.
  52. R_390_PC32DBL = 19, // PC relative 32 bit shifted by 1.
  53. R_390_PLT32DBL = 20, // 32 bit PC rel. PLT shifted by 1.
  54. R_390_GOTPCDBL = 21, // 32 bit PC rel. GOT shifted by 1.
  55. R_390_64 = 22, // Direct 64 bit.
  56. R_390_PC64 = 23, // PC relative 64 bit.
  57. R_390_GOT64 = 24, // 64 bit GOT offset.
  58. R_390_PLT64 = 25, // 64 bit PC relative PLT address.
  59. R_390_GOTENT = 26, // 32 bit PC rel. to GOT entry >> 1.
  60. // Extensions.
  61. R_390_GOTOFF16 = 27, // 16 bit offset to GOT.
  62. R_390_GOTOFF64 = 28, // 64 bit offset to GOT.
  63. R_390_GOTPLT12 = 29, // 12 bit offset to jump slot.
  64. R_390_GOTPLT16 = 30, // 16 bit offset to jump slot.
  65. R_390_GOTPLT32 = 31, // 32 bit offset to jump slot.
  66. R_390_GOTPLT64 = 32, // 64 bit offset to jump slot.
  67. R_390_GOTPLTENT = 33, // 32 bit rel. offset to jump slot.
  68. R_390_PLTOFF16 = 34, // 16 bit offset from GOT to PLT.
  69. R_390_PLTOFF32 = 35, // 32 bit offset from GOT to PLT.
  70. R_390_PLTOFF64 = 36, // 16 bit offset from GOT to PLT.
  71. // TLS extensions.
  72. R_390_TLS_LOAD = 37, // Tag for load insn in TLS code.
  73. R_390_TLS_GDCALL = 38, // Tag for function call in general dynamic TLS code.
  74. R_390_TLS_LDCALL = 39, // Tag for function call in local dynamic TLS code.
  75. R_390_TLS_GD32 = 40, // Direct 32 bit for general dynamic thread local data.
  76. R_390_TLS_GD64 = 41, // Direct 64 bit for general dynamic thread local data.
  77. R_390_TLS_GOTIE12 = 42, // 12 bit GOT offset for static TLS block offset.
  78. R_390_TLS_GOTIE32 = 43, // 32 bit GOT offset for static TLS block offset.
  79. R_390_TLS_GOTIE64 = 44, // 64 bit GOT offset for static TLS block offset.
  80. R_390_TLS_LDM32 = 45, // Direct 32 bit for local dynamic thread local data in LD code.
  81. R_390_TLS_LDM64 = 46, // Direct 64 bit for local dynamic thread local data in LD code.
  82. R_390_TLS_IE32 = 47, // 32 bit address of GOT entry for negated static TLS block offset.
  83. R_390_TLS_IE64 = 48, // 64 bit address of GOT entry for negated static TLS block offset.
  84. R_390_TLS_IEENT = 49, // 32 bit rel. offset to GOT entry for negated static TLS block offset.
  85. R_390_TLS_LE32 = 50, // 32 bit negated offset relative to static TLS block.
  86. R_390_TLS_LE64 = 51, // 64 bit negated offset relative to static TLS block.
  87. R_390_TLS_LDO32 = 52, // 32 bit offset relative to TLS block.
  88. R_390_TLS_LDO64 = 53, // 64 bit offset relative to TLS block.
  89. R_390_TLS_DTPMOD = 54, // ID of module containing symbol.
  90. R_390_TLS_DTPOFF = 55, // Offset in TLS block.
  91. R_390_TLS_TPOFF = 56, // Negate offset in static TLS block.
  92. // Yet more misc extensions.
  93. R_390_20 = 57, // Direct 20 bit.
  94. R_390_GOT20 = 58, // 20 bit GOT offset.
  95. R_390_GOTPLT20 = 59, // 20 bit offset to jump slot.
  96. R_390_TLS_GOTIE20 = 60, // 20 bit GOT offset for static TLS block offset.
  97. R_390_IRELATIVE = 61, // IFUNC relocation.
  98. R_390_PC12DBL = 62, // PC relative 12 bit shifted by 1.
  99. R_390_PLT12DBL = 63, // 12 bit PC rel. PLT shifted by 1.
  100. R_390_PC24DBL = 64, // PC relative 24 bit shifted by 1.
  101. R_390_PLT24DBL = 65, // 24 bit PC rel. PLT shifted by 1.
  102. // GNU vtable garbage collection extensions.
  103. R_390_GNU_VTINHERIT = 250,
  104. R_390_GNU_VTENTRY = 251,
  105. };
  106. } // End namespace elfcpp.
  107. #endif // !defined(ELFCPP_S390_H)