sparc.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // sparc.h -- ELF definitions specific to EM_SPARC -*- C++ -*-
  2. // Copyright (C) 2008-2022 Free Software Foundation, Inc.
  3. // Written by David S. Miller <davem@davemloft.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_SPARC_H
  26. #define ELFCPP_SPARC_H
  27. // Documentation for the TLS relocs is taken from
  28. // http://people.redhat.com/drepper/tls.pdf
  29. //
  30. // More full documentation on sparc specific ELF file
  31. // format details can be found at
  32. //
  33. // http://docs.sun.com/app/docs/doc/819/0690/
  34. // "Linker and Libraries Guide"
  35. //
  36. // specifically Chapter 7 "Object File Format" and
  37. // Chapter 8 "Thread-Local Storage"
  38. namespace elfcpp
  39. {
  40. enum
  41. {
  42. R_SPARC_NONE = 0, // No reloc
  43. R_SPARC_8 = 1, // Direct 8 bit
  44. R_SPARC_16 = 2, // Direct 16 bit
  45. R_SPARC_32 = 3, // Direct 32 bit
  46. R_SPARC_DISP8 = 4, // PC relative 8 bit
  47. R_SPARC_DISP16 = 5, // PC relative 16 bit
  48. R_SPARC_DISP32 = 6, // PC relative 32 bit
  49. R_SPARC_WDISP30 = 7, // PC relative 30 bit shifted
  50. R_SPARC_WDISP22 = 8, // PC relative 22 bit shifted
  51. R_SPARC_HI22 = 9, // High 22 bit
  52. R_SPARC_22 = 10, // Direct 22 bit
  53. R_SPARC_13 = 11, // Direct 13 bit
  54. R_SPARC_LO10 = 12, // Truncated 10 bit
  55. R_SPARC_GOT10 = 13, // Truncated 10 bit GOT entry
  56. R_SPARC_GOT13 = 14, // 13 bit GOT entry
  57. R_SPARC_GOT22 = 15, // 22 bit GOT entry shifted
  58. R_SPARC_PC10 = 16, // PC relative 10 bit truncated
  59. R_SPARC_PC22 = 17, // PC relative 22 bit shifted
  60. R_SPARC_WPLT30 = 18, // 30 bit PC relative PLT address
  61. R_SPARC_COPY = 19, // Copy symbol at runtime
  62. R_SPARC_GLOB_DAT = 20, // Create GOT entry
  63. R_SPARC_JMP_SLOT = 21, // Create PLT entry
  64. R_SPARC_RELATIVE = 22, // Adjust by program base
  65. R_SPARC_UA32 = 23, // Direct 32 bit unaligned
  66. R_SPARC_PLT32 = 24, // Direct 32 bit ref to PLT entry
  67. R_SPARC_HIPLT22 = 25, // High 22 bit PLT entry
  68. R_SPARC_LOPLT10 = 26, // Truncated 10 bit PLT entry
  69. R_SPARC_PCPLT32 = 27, // PC rel 32 bit ref to PLT entry
  70. R_SPARC_PCPLT22 = 28, // PC rel high 22 bit PLT entry
  71. R_SPARC_PCPLT10 = 29, // PC rel trunc 10 bit PLT entry
  72. R_SPARC_10 = 30, // Direct 10 bit
  73. R_SPARC_11 = 31, // Direct 11 bit
  74. R_SPARC_64 = 32, // Direct 64 bit
  75. R_SPARC_OLO10 = 33, // 10bit with secondary 13bit addend
  76. R_SPARC_HH22 = 34, // Top 22 bits of direct 64 bit
  77. R_SPARC_HM10 = 35, // High middle 10 bits of ...
  78. R_SPARC_LM22 = 36, // Low middle 22 bits of ...
  79. R_SPARC_PC_HH22 = 37, // Top 22 bits of pc rel 64 bit
  80. R_SPARC_PC_HM10 = 38, // High middle 10 bit of ...
  81. R_SPARC_PC_LM22 = 39, // Low miggle 22 bits of ...
  82. R_SPARC_WDISP16 = 40, // PC relative 16 bit shifted
  83. R_SPARC_WDISP19 = 41, // PC relative 19 bit shifted
  84. R_SPARC_GLOB_JMP = 42, // was part of v9 ABI but was removed
  85. R_SPARC_7 = 43, // Direct 7 bit
  86. R_SPARC_5 = 44, // Direct 5 bit
  87. R_SPARC_6 = 45, // Direct 6 bit
  88. R_SPARC_DISP64 = 46, // PC relative 64 bit
  89. R_SPARC_PLT64 = 47, // Direct 64 bit ref to PLT entry
  90. R_SPARC_HIX22 = 48, // High 22 bit complemented
  91. R_SPARC_LOX10 = 49, // Truncated 11 bit complemented
  92. R_SPARC_H44 = 50, // Direct high 12 of 44 bit
  93. R_SPARC_M44 = 51, // Direct mid 22 of 44 bit
  94. R_SPARC_L44 = 52, // Direct low 10 of 44 bit
  95. R_SPARC_REGISTER = 53, // Global register usage
  96. R_SPARC_UA64 = 54, // Direct 64 bit unaligned
  97. R_SPARC_UA16 = 55, // Direct 16 bit unaligned
  98. R_SPARC_TLS_GD_HI22 = 56, // Initial General Dynamic reloc, high 22-bit
  99. R_SPARC_TLS_GD_LO10 = 57, // Initial General Dynamic reloc, low 10-bit
  100. R_SPARC_TLS_GD_ADD = 58, // Initial General Dynamic reloc, add
  101. R_SPARC_TLS_GD_CALL = 59, // Initial General Dynamic reloc, call
  102. R_SPARC_TLS_LDM_HI22 = 60, // Initial Local Dynamic reloc, high 22-bit
  103. R_SPARC_TLS_LDM_LO10 = 61, // Initial Local Dynamic reloc, low 10-bit
  104. R_SPARC_TLS_LDM_ADD = 62, // Initial Local Dynamic reloc, add
  105. R_SPARC_TLS_LDM_CALL = 63, // Initial Local Dynamic reloc, call
  106. R_SPARC_TLS_LDO_HIX22 = 64, // Initial Local Dynamic, high extended 22-bit
  107. R_SPARC_TLS_LDO_LOX10 = 65, // Initial Local Dynamic, low extended 10-bit
  108. R_SPARC_TLS_LDO_ADD = 66, // Initial Local Dynamic, add extended
  109. R_SPARC_TLS_IE_HI22 = 67, // Initial Initial Exec reloc, high 22-bit
  110. R_SPARC_TLS_IE_LO10 = 68, // Initial Initial Exec reloc, low 10-bit
  111. R_SPARC_TLS_IE_LD = 69, // Initial Initial Exec reloc, load 32-bit
  112. R_SPARC_TLS_IE_LDX = 70, // Initial Initial Exec reloc, load 64-bit
  113. R_SPARC_TLS_IE_ADD = 71, // Initial Initial Exec reloc, add
  114. R_SPARC_TLS_LE_HIX22 = 72, // Initial Local Exec reloc, high extended 22-bit
  115. R_SPARC_TLS_LE_LOX10 = 73, // Initial Local Exec reloc, low extended 10-bit
  116. R_SPARC_TLS_DTPMOD32 = 74, // Outstanding General/Local Dynamic reloc, 32-bit
  117. R_SPARC_TLS_DTPMOD64 = 75, // Outstanding General/Local Dynamic reloc, 64-bit
  118. R_SPARC_TLS_DTPOFF32 = 76, // Outstanding General Dynamic reloc, 32-bit
  119. R_SPARC_TLS_DTPOFF64 = 77, // Outstanding General Dynamic reloc, 64-bit
  120. R_SPARC_TLS_TPOFF32 = 78, // Outstanding Initial Exec reloc, 32-bit
  121. R_SPARC_TLS_TPOFF64 = 79, // Outstanding Initial Exec reloc, 64-bit
  122. // GOT data code transformations
  123. R_SPARC_GOTDATA_HIX22 = 80,
  124. R_SPARC_GOTDATA_LOX10 = 81,
  125. R_SPARC_GOTDATA_OP_HIX22 = 82,
  126. R_SPARC_GOTDATA_OP_LOX10 = 83,
  127. R_SPARC_GOTDATA_OP = 84,
  128. R_SPARC_H34 = 85, // Direct high 12 of 34 bit
  129. R_SPARC_SIZE32 = 86, // size of symbol, 32-bit
  130. R_SPARC_SIZE64 = 87, // size of symbol, 64-bit
  131. R_SPARC_WDISP10 = 88, // PC relative 10 bit shifted
  132. R_SPARC_JMP_IREL = 248, // Create PLT slot to IFUNC function
  133. R_SPARC_IRELATIVE = 249, // Adjust indirectly by program base
  134. // GNU vtable garbage collection extensions.
  135. R_SPARC_GNU_VTINHERIT = 250,
  136. R_SPARC_GNU_VTENTRY = 251,
  137. R_SPARC_REV32 = 252,
  138. };
  139. // e_flags values defined for sparc
  140. enum
  141. {
  142. EF_SPARC_EXT_MASK = 0xffff00, // reserved for vendor extensions
  143. EF_SPARC_32PLUS_MASK = 0xffff00, // bits indicating V8+ type
  144. EF_SPARC_32PLUS = 0x000100, // generic V8+ features
  145. EF_SPARC_SUN_US1 = 0x000200, // Sun UltraSPARC-I extensions
  146. EF_SPARC_HAL_R1 = 0x000400, // HAL R1 extensions
  147. EF_SPARC_SUN_US3 = 0x000800, // Sun UltraSPARC-III extensions
  148. EF_SPARC_LEDATA = 0x800000, // little endian data
  149. EF_SPARCV9_MM = 0x3, // memory model mask
  150. EF_SPARCV9_TSO = 0x0, // total store ordering
  151. EF_SPARCV9_PSO = 0x1, // partial store ordering
  152. EF_SPARCV9_RMO = 0x2, // relaxed store ordering
  153. };
  154. } // End namespace elfcpp.
  155. #endif // !defined(ELFCPP_SPARC_H)