Subversion Repositories Kolibri OS

Rev

Rev 5191 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /* SH ELF support for BFD.
  2.    Copyright (C) 1998-2015 Free Software Foundation, Inc.
  3.  
  4.    This file is part of BFD, the Binary File Descriptor library.
  5.  
  6.    This program is free software; you can redistribute it and/or modify
  7.    it under the terms of the GNU General Public License as published by
  8.    the Free Software Foundation; either version 3 of the License, or
  9.    (at your option) any later version.
  10.  
  11.    This program is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.    GNU General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU General Public License
  17.    along with this program; if not, write to the Free Software Foundation,
  18.    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
  19.  
  20. #ifndef _ELF_SH_H
  21. #define _ELF_SH_H
  22.  
  23. /* Processor specific flags for the ELF header e_flags field.  */
  24.  
  25. #define EF_SH_MACH_MASK 0x1f
  26. #define EF_SH_UNKNOWN      0 /* For backwards compatibility.  */
  27. #define EF_SH1             1
  28. #define EF_SH2             2
  29. #define EF_SH3             3
  30. #define EF_SH_DSP          4
  31. #define EF_SH3_DSP         5
  32. #define EF_SH4AL_DSP       6
  33. #define EF_SH3E            8
  34. #define EF_SH4             9
  35. #define EF_SH2E            11
  36. #define EF_SH4A            12
  37. #define EF_SH2A            13
  38.  
  39. #define EF_SH4_NOFPU       16
  40. #define EF_SH4A_NOFPU      17
  41. #define EF_SH4_NOMMU_NOFPU 18
  42. #define EF_SH2A_NOFPU      19
  43. #define EF_SH3_NOMMU       20
  44.  
  45. #define EF_SH2A_SH4_NOFPU  21
  46. #define EF_SH2A_SH3_NOFPU  22
  47. #define EF_SH2A_SH4        23
  48. #define EF_SH2A_SH3E       24
  49.  
  50. /* This one can only mix in objects from other EF_SH5 objects.  */
  51. #define EF_SH5            10
  52.  
  53. /* Define the mapping from ELF to bfd mach numbers.
  54.    bfd_mach_* are defined in bfd_in2.h (generated from
  55.    archures.c).  */
  56. #define EF_SH_BFD_TABLE \
  57. /* EF_SH_UNKNOWN        */ bfd_mach_sh          , \
  58. /* EF_SH1               */ bfd_mach_sh          , \
  59. /* EF_SH2               */ bfd_mach_sh2         , \
  60. /* EF_SH3               */ bfd_mach_sh3         , \
  61. /* EF_SH_DSP            */ bfd_mach_sh_dsp      , \
  62. /* EF_SH3_DSP           */ bfd_mach_sh3_dsp     , \
  63. /* EF_SHAL_DSP          */ bfd_mach_sh4al_dsp   , \
  64. /* 7                    */ 0, \
  65. /* EF_SH3E              */ bfd_mach_sh3e        , \
  66. /* EF_SH4               */ bfd_mach_sh4         , \
  67. /* EF_SH5               */ 0, \
  68. /* EF_SH2E              */ bfd_mach_sh2e        , \
  69. /* EF_SH4A              */ bfd_mach_sh4a        , \
  70. /* EF_SH2A              */ bfd_mach_sh2a        , \
  71. /* 14, 15               */ 0, 0, \
  72. /* EF_SH4_NOFPU         */ bfd_mach_sh4_nofpu   , \
  73. /* EF_SH4A_NOFPU        */ bfd_mach_sh4a_nofpu  , \
  74. /* EF_SH4_NOMMU_NOFPU   */ bfd_mach_sh4_nommu_nofpu, \
  75. /* EF_SH2A_NOFPU        */ bfd_mach_sh2a_nofpu  , \
  76. /* EF_SH3_NOMMU         */ bfd_mach_sh3_nommu   , \
  77. /* EF_SH2A_SH4_NOFPU    */ bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, \
  78. /* EF_SH2A_SH3_NOFPU    */ bfd_mach_sh2a_nofpu_or_sh3_nommu, \
  79. /* EF_SH2A_SH4          */ bfd_mach_sh2a_or_sh4 , \
  80. /* EF_SH2A_SH3E         */ bfd_mach_sh2a_or_sh3e
  81.  
  82. /* Convert arch_sh* into EF_SH*.  */
  83. int sh_find_elf_flags (unsigned int arch_set);
  84.  
  85. /* Convert bfd_mach_* into EF_SH*.  */
  86. int sh_elf_get_flags_from_mach (unsigned long mach);
  87.  
  88. /* Other e_flags bits.  */
  89.  
  90. #define EF_SH_PIC               0x100   /* Segments of an FDPIC binary may
  91.                                            be relocated independently.  */
  92. #define EF_SH_FDPIC             0x8000  /* Uses the FDPIC ABI.  */
  93.  
  94. /* Flags for the st_other symbol field.
  95.    Keep away from the STV_ visibility flags (bit 0..1).  */
  96.  
  97. /* A reference to this symbol should by default add 1.  */
  98. #define STO_SH5_ISA32 (1 << 2)
  99.  
  100. /* Section contains only SHmedia code (no SHcompact code).  */
  101. #define SHF_SH5_ISA32           0x40000000
  102.  
  103. /* Section contains both SHmedia and SHcompact code, and possibly also
  104.    constants.  */
  105. #define SHF_SH5_ISA32_MIXED     0x20000000
  106.  
  107. /* If applied to a .cranges section, marks that the section is sorted by
  108.    increasing cr_addr values.  */
  109. #define SHT_SH5_CR_SORTED 0x80000001
  110.  
  111. /* Symbol should be handled as DataLabel (attached to global SHN_UNDEF
  112.    symbols).  */
  113. #define STT_DATALABEL STT_LOPROC
  114.  
  115. #include "elf/reloc-macros.h"
  116.  
  117. /* Relocations.  */
  118. /* Relocations 10-32 and 128-255 are GNU extensions.
  119.    25..32 and 10 are used for relaxation.  */
  120. START_RELOC_NUMBERS (elf_sh_reloc_type)
  121.   RELOC_NUMBER (R_SH_NONE, 0)
  122.   RELOC_NUMBER (R_SH_DIR32, 1)
  123.   RELOC_NUMBER (R_SH_REL32, 2)
  124.   RELOC_NUMBER (R_SH_DIR8WPN, 3)
  125.   RELOC_NUMBER (R_SH_IND12W, 4)
  126.   RELOC_NUMBER (R_SH_DIR8WPL, 5)
  127.   RELOC_NUMBER (R_SH_DIR8WPZ, 6)
  128.   RELOC_NUMBER (R_SH_DIR8BP, 7)
  129.   RELOC_NUMBER (R_SH_DIR8W, 8)
  130.   RELOC_NUMBER (R_SH_DIR8L, 9)
  131.  
  132.   RELOC_NUMBER (R_SH_LOOP_START, 10)
  133.   RELOC_NUMBER (R_SH_LOOP_END, 11)
  134.  
  135.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12)
  136.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21)
  137.  
  138.   RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22)
  139.   RELOC_NUMBER (R_SH_GNU_VTENTRY, 23)
  140.   RELOC_NUMBER (R_SH_SWITCH8, 24)
  141.   RELOC_NUMBER (R_SH_SWITCH16, 25)
  142.   RELOC_NUMBER (R_SH_SWITCH32, 26)
  143.   RELOC_NUMBER (R_SH_USES, 27)
  144.   RELOC_NUMBER (R_SH_COUNT, 28)
  145.   RELOC_NUMBER (R_SH_ALIGN, 29)
  146.   RELOC_NUMBER (R_SH_CODE, 30)
  147.   RELOC_NUMBER (R_SH_DATA, 31)
  148.   RELOC_NUMBER (R_SH_LABEL, 32)
  149.  
  150.   RELOC_NUMBER (R_SH_DIR16, 33)
  151.   RELOC_NUMBER (R_SH_DIR8, 34)
  152.   RELOC_NUMBER (R_SH_DIR8UL, 35)
  153.   RELOC_NUMBER (R_SH_DIR8UW, 36)
  154.   RELOC_NUMBER (R_SH_DIR8U, 37)
  155.   RELOC_NUMBER (R_SH_DIR8SW, 38)
  156.   RELOC_NUMBER (R_SH_DIR8S, 39)
  157.   RELOC_NUMBER (R_SH_DIR4UL, 40)
  158.   RELOC_NUMBER (R_SH_DIR4UW, 41)
  159.   RELOC_NUMBER (R_SH_DIR4U, 42)
  160.   RELOC_NUMBER (R_SH_PSHA, 43)
  161.   RELOC_NUMBER (R_SH_PSHL, 44)
  162.   RELOC_NUMBER (R_SH_DIR5U, 45)
  163.   RELOC_NUMBER (R_SH_DIR6U, 46)
  164.   RELOC_NUMBER (R_SH_DIR6S, 47)
  165.   RELOC_NUMBER (R_SH_DIR10S, 48)
  166.   RELOC_NUMBER (R_SH_DIR10SW, 49)
  167.   RELOC_NUMBER (R_SH_DIR10SL, 50)
  168.   RELOC_NUMBER (R_SH_DIR10SQ, 51)
  169.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52)
  170.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52)
  171.   RELOC_NUMBER (R_SH_DIR16S, 53)
  172.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54)
  173.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143)
  174.   RELOC_NUMBER (R_SH_TLS_GD_32, 144)
  175.   RELOC_NUMBER (R_SH_TLS_LD_32, 145)
  176.   RELOC_NUMBER (R_SH_TLS_LDO_32, 146)
  177.   RELOC_NUMBER (R_SH_TLS_IE_32, 147)
  178.   RELOC_NUMBER (R_SH_TLS_LE_32, 148)
  179.   RELOC_NUMBER (R_SH_TLS_DTPMOD32, 149)
  180.   RELOC_NUMBER (R_SH_TLS_DTPOFF32, 150)
  181.   RELOC_NUMBER (R_SH_TLS_TPOFF32, 151)
  182.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_4, 152)
  183.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC_4, 159)
  184.   RELOC_NUMBER (R_SH_GOT32, 160)
  185.   RELOC_NUMBER (R_SH_PLT32, 161)
  186.   RELOC_NUMBER (R_SH_COPY, 162)
  187.   RELOC_NUMBER (R_SH_GLOB_DAT, 163)
  188.   RELOC_NUMBER (R_SH_JMP_SLOT, 164)
  189.   RELOC_NUMBER (R_SH_RELATIVE, 165)
  190.   RELOC_NUMBER (R_SH_GOTOFF, 166)
  191.   RELOC_NUMBER (R_SH_GOTPC, 167)
  192.   RELOC_NUMBER (R_SH_GOTPLT32, 168)
  193.   RELOC_NUMBER (R_SH_GOT_LOW16, 169)
  194.   RELOC_NUMBER (R_SH_GOT_MEDLOW16, 170)
  195.   RELOC_NUMBER (R_SH_GOT_MEDHI16, 171)
  196.   RELOC_NUMBER (R_SH_GOT_HI16, 172)
  197.   RELOC_NUMBER (R_SH_GOTPLT_LOW16, 173)
  198.   RELOC_NUMBER (R_SH_GOTPLT_MEDLOW16, 174)
  199.   RELOC_NUMBER (R_SH_GOTPLT_MEDHI16, 175)
  200.   RELOC_NUMBER (R_SH_GOTPLT_HI16, 176)
  201.   RELOC_NUMBER (R_SH_PLT_LOW16, 177)
  202.   RELOC_NUMBER (R_SH_PLT_MEDLOW16, 178)
  203.   RELOC_NUMBER (R_SH_PLT_MEDHI16, 179)
  204.   RELOC_NUMBER (R_SH_PLT_HI16, 180)
  205.   RELOC_NUMBER (R_SH_GOTOFF_LOW16, 181)
  206.   RELOC_NUMBER (R_SH_GOTOFF_MEDLOW16, 182)
  207.   RELOC_NUMBER (R_SH_GOTOFF_MEDHI16, 183)
  208.   RELOC_NUMBER (R_SH_GOTOFF_HI16, 184)
  209.   RELOC_NUMBER (R_SH_GOTPC_LOW16, 185)
  210.   RELOC_NUMBER (R_SH_GOTPC_MEDLOW16, 186)
  211.   RELOC_NUMBER (R_SH_GOTPC_MEDHI16, 187)
  212.   RELOC_NUMBER (R_SH_GOTPC_HI16, 188)
  213.   RELOC_NUMBER (R_SH_GOT10BY4, 189)
  214.   RELOC_NUMBER (R_SH_GOTPLT10BY4, 190)
  215.   RELOC_NUMBER (R_SH_GOT10BY8, 191)
  216.   RELOC_NUMBER (R_SH_GOTPLT10BY8, 192)
  217.   RELOC_NUMBER (R_SH_COPY64, 193)
  218.   RELOC_NUMBER (R_SH_GLOB_DAT64, 194)
  219.   RELOC_NUMBER (R_SH_JMP_SLOT64, 195)
  220.   RELOC_NUMBER (R_SH_RELATIVE64, 196)
  221.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_5, 197)
  222.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC_5, 200)
  223.   RELOC_NUMBER (R_SH_GOT20, 201)
  224.   RELOC_NUMBER (R_SH_GOTOFF20, 202)
  225.   RELOC_NUMBER (R_SH_GOTFUNCDESC, 203)
  226.   RELOC_NUMBER (R_SH_GOTFUNCDESC20, 204)
  227.   RELOC_NUMBER (R_SH_GOTOFFFUNCDESC, 205)
  228.   RELOC_NUMBER (R_SH_GOTOFFFUNCDESC20, 206)
  229.   RELOC_NUMBER (R_SH_FUNCDESC, 207)
  230.   RELOC_NUMBER (R_SH_FUNCDESC_VALUE, 208)
  231.   FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_6, 209)
  232.   FAKE_RELOC (R_SH_LAST_INVALID_RELOC_6, 241)
  233.   RELOC_NUMBER (R_SH_SHMEDIA_CODE, 242)
  234.   RELOC_NUMBER (R_SH_PT_16, 243)
  235.   RELOC_NUMBER (R_SH_IMMS16, 244)
  236.   RELOC_NUMBER (R_SH_IMMU16, 245)
  237.   RELOC_NUMBER (R_SH_IMM_LOW16, 246)
  238.   RELOC_NUMBER (R_SH_IMM_LOW16_PCREL, 247)
  239.   RELOC_NUMBER (R_SH_IMM_MEDLOW16, 248)
  240.   RELOC_NUMBER (R_SH_IMM_MEDLOW16_PCREL, 249)
  241.   RELOC_NUMBER (R_SH_IMM_MEDHI16, 250)
  242.   RELOC_NUMBER (R_SH_IMM_MEDHI16_PCREL, 251)
  243.   RELOC_NUMBER (R_SH_IMM_HI16, 252)
  244.   RELOC_NUMBER (R_SH_IMM_HI16_PCREL, 253)
  245.   RELOC_NUMBER (R_SH_64, 254)
  246.   RELOC_NUMBER (R_SH_64_PCREL, 255)
  247. END_RELOC_NUMBERS (R_SH_max)
  248.  
  249. #endif
  250.