Subversion Repositories Kolibri OS

Rev

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

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