Subversion Repositories Kolibri OS

Rev

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

  1. /* TI C6X ELF support for BFD.
  2.    Copyright 2010, 2011
  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
  19.    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  20.    MA 02110-1301, USA.  */
  21.  
  22. #ifndef _ELF_TIC6X_H
  23. #define _ELF_TIC6X_H
  24.  
  25. #include "elf/reloc-macros.h"
  26.  
  27. /* Relocation types.  */
  28. START_RELOC_NUMBERS (elf_tic6x_reloc_type)
  29.   RELOC_NUMBER (R_C6000_NONE, 0)
  30.   RELOC_NUMBER (R_C6000_ABS32, 1)
  31.   RELOC_NUMBER (R_C6000_ABS16, 2)
  32.   RELOC_NUMBER (R_C6000_ABS8, 3)
  33.   RELOC_NUMBER (R_C6000_PCR_S21, 4)
  34.   RELOC_NUMBER (R_C6000_PCR_S12, 5)
  35.   RELOC_NUMBER (R_C6000_PCR_S10, 6)
  36.   RELOC_NUMBER (R_C6000_PCR_S7, 7)
  37.   RELOC_NUMBER (R_C6000_ABS_S16, 8)
  38.   RELOC_NUMBER (R_C6000_ABS_L16, 9)
  39.   RELOC_NUMBER (R_C6000_ABS_H16, 10)
  40.   RELOC_NUMBER (R_C6000_SBR_U15_B, 11)
  41.   RELOC_NUMBER (R_C6000_SBR_U15_H, 12)
  42.   RELOC_NUMBER (R_C6000_SBR_U15_W, 13)
  43.   RELOC_NUMBER (R_C6000_SBR_S16, 14)
  44.   RELOC_NUMBER (R_C6000_SBR_L16_B, 15)
  45.   RELOC_NUMBER (R_C6000_SBR_L16_H, 16)
  46.   RELOC_NUMBER (R_C6000_SBR_L16_W, 17)
  47.   RELOC_NUMBER (R_C6000_SBR_H16_B, 18)
  48.   RELOC_NUMBER (R_C6000_SBR_H16_H, 19)
  49.   RELOC_NUMBER (R_C6000_SBR_H16_W, 20)
  50.   RELOC_NUMBER (R_C6000_SBR_GOT_U15_W, 21)
  51.   RELOC_NUMBER (R_C6000_SBR_GOT_L16_W, 22)
  52.   RELOC_NUMBER (R_C6000_SBR_GOT_H16_W, 23)
  53.   RELOC_NUMBER (R_C6000_DSBT_INDEX, 24)
  54.   RELOC_NUMBER (R_C6000_PREL31, 25)
  55.   RELOC_NUMBER (R_C6000_COPY, 26)
  56.   RELOC_NUMBER (R_C6000_JUMP_SLOT, 27)
  57.   RELOC_NUMBER (R_C6000_EHTYPE, 28)
  58.   RELOC_NUMBER (R_C6000_PCR_H16, 29)
  59.   RELOC_NUMBER (R_C6000_PCR_L16, 30)
  60.   RELOC_NUMBER (R_C6000_ALIGN, 253)
  61.   RELOC_NUMBER (R_C6000_FPHEAD, 254)
  62.   RELOC_NUMBER (R_C6000_NOCMP, 255)
  63. END_RELOC_NUMBERS (R_TIC6X_max)
  64.  
  65. /* Processor-specific flags.  */
  66.  
  67. /* File contains static relocation information.  */
  68. #define EF_C6000_REL            0x1
  69.  
  70. /* Processor-specific section types.  */
  71.  
  72. /* Unwind function table for stack unwinding.  */
  73. #define SHT_C6000_UNWIND        0x70000001
  74.  
  75. /* DLL dynamic linking pre-emption map.  */
  76. #define SHT_C6000_PREEMPTMAP    0x70000002
  77.  
  78. /* Object file compatibility attributes.  */
  79. #define SHT_C6000_ATTRIBUTES    0x70000003
  80.  
  81. /* Intermediate code for link-time optimization.  */
  82. #define SHT_TI_ICODE            0x7F000000
  83.  
  84. /* Symbolic cross reference information.  */
  85. #define SHT_TI_XREF             0x7F000001
  86.  
  87. /* Reserved.  */
  88. #define SHT_TI_HANDLER          0x7F000002
  89.  
  90. /* Compressed data for initializing C variables.  */
  91. #define SHT_TI_INITINFO         0x7F000003
  92.  
  93. /* Extended program header attributes.  */
  94. #define SHT_TI_PHATTRS          0x7F000004
  95.  
  96. /* Processor specific section indices.  These sections do not actually
  97.    exist.  Symbols with a st_shndx field corresponding to one of these
  98.    values have a special meaning.  */
  99.  
  100. /* Small data area common symbol.  */
  101. #define SHN_TIC6X_SCOMMON       SHN_LORESERVE
  102.  
  103. /* Processor-specific segment types.  */
  104.  
  105. /* Extended Segment Attributes.  */
  106. #define PT_C6000_PHATTR         0x70000000
  107.  
  108. /* Processor-specific dynamic tags.  */
  109.  
  110. /* Undocumented.  */
  111. #define DT_C6000_GSYM_OFFSET    0x6000000D
  112.  
  113. /* Undocumented.  */
  114. #define DT_C6000_GSTR_OFFSET    0x6000000F
  115.  
  116. /* Statically linked base address of data segment.  */
  117. #define DT_C6000_DSBT_BASE      0x70000000
  118.  
  119. /* Number of entries in this module's DSBT.  */
  120. #define DT_C6000_DSBT_SIZE      0x70000001
  121.  
  122. /* Undocumented.  */
  123. #define DT_C6000_PREEMPTMAP     0x70000002
  124.  
  125. /* The hard-coded DSBT index for this module, if any.  */
  126. #define DT_C6000_DSBT_INDEX     0x70000003
  127.  
  128. /* Extended program header attributes.  */
  129.  
  130. /* Terminate a segment.  */
  131. #define PHA_NULL                0x0
  132.  
  133. /* Segment's address bound to the final address.  */
  134. #define PHA_BOUND               0x1
  135.  
  136. /* Segment cannot be further relocated.  */
  137. #define PHA_READONLY            0x2
  138.  
  139. /* Build attributes.  */
  140. enum
  141.   {
  142. #define TAG(tag, value) tag = value,
  143. #include "elf/tic6x-attrs.h"
  144. #undef TAG
  145.     Tag_C6XABI_last
  146.   };
  147.  
  148. /* Values for Tag_ISA.  GNU-specific names; the ABI does not specify
  149.    names for these values.  */
  150. enum
  151.   {
  152.     C6XABI_Tag_ISA_none = 0,
  153.     C6XABI_Tag_ISA_C62X = 1,
  154.     C6XABI_Tag_ISA_C67X = 3,
  155.     C6XABI_Tag_ISA_C67XP = 4,
  156.     C6XABI_Tag_ISA_C64X = 6,
  157.     C6XABI_Tag_ISA_C64XP = 7,
  158.     C6XABI_Tag_ISA_C674X = 8
  159.   };
  160.  
  161. /* Special section names.  */
  162. #define ELF_STRING_C6000_unwind           ".c6xabi.exidx"
  163. #define ELF_STRING_C6000_unwind_info      ".c6xabi.extab"
  164. #define ELF_STRING_C6000_unwind_once      ".gnu.linkonce.c6xabi.exidx."
  165. #define ELF_STRING_C6000_unwind_info_once ".gnu.linkonce.c6xabi.extab."
  166.  
  167. #endif /* _ELF_TIC6X_H */
  168.