Subversion Repositories Kolibri OS

Rev

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

  1. /* SOM a.out definitions for BFD.
  2.    Copyright 2010  Free Software Foundation, Inc.
  3.    Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
  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 _SOM_AOUT_H
  22. #define _SOM_AOUT_H
  23.  
  24. #include "clock.h"
  25.  
  26. /* Note: SOM uses bit-field in its structure.  All you need to know is:
  27.    - CPUs supported by SOM (hppa) are big-endian,
  28.    - the MSB is numbered 0.  */
  29.  
  30. struct som_external_header
  31. {
  32.   unsigned char system_id[2];
  33.   unsigned char a_magic[2];
  34.   unsigned char version_id[4];
  35.   struct som_external_clock file_time;
  36.   unsigned char entry_space[4];
  37.   unsigned char entry_subspace[4];
  38.   unsigned char entry_offset[4];
  39.   unsigned char aux_header_location[4];
  40.   unsigned char aux_header_size[4];
  41.   unsigned char som_length[4];
  42.   unsigned char presumed_dp[4];
  43.   unsigned char space_location[4];
  44.   unsigned char space_total[4];
  45.   unsigned char subspace_location[4];
  46.   unsigned char subspace_total[4];
  47.   unsigned char loader_fixup_location[4];
  48.   unsigned char loader_fixup_total[4];
  49.   unsigned char space_strings_location[4];
  50.   unsigned char space_strings_size[4];
  51.   unsigned char init_array_location[4];
  52.   unsigned char init_array_total[4];
  53.   unsigned char compiler_location[4];
  54.   unsigned char compiler_total[4];
  55.   unsigned char symbol_location[4];
  56.   unsigned char symbol_total[4];
  57.   unsigned char fixup_request_location[4];
  58.   unsigned char fixup_request_total[4];
  59.   unsigned char symbol_strings_location[4];
  60.   unsigned char symbol_strings_size[4];
  61.   unsigned char unloadable_sp_location[4];
  62.   unsigned char unloadable_sp_size[4];
  63.   unsigned char checksum[4];
  64. };
  65.  
  66. #define OLD_VERSION_ID 85082112
  67. #define NEW_VERSION_ID 87102412
  68.  
  69. #define EXECLIBMAGIC    0x0104
  70. #define RELOC_MAGIC     0x0106
  71. #define EXEC_MAGIC      0x0107
  72. #define SHARE_MAGIC     0x0108
  73. #define SHMEM_MAGIC     0x0109
  74. #define DEMAND_MAGIC    0x010b
  75. #define DL_MAGIC        0x010d
  76. #define SHL_MAGIC       0x010e
  77.  
  78. struct som_external_aux_id
  79. {
  80.   unsigned char flags[4];
  81.   unsigned char length[4];
  82. };
  83.  
  84. /* Aux id types.  */
  85. #define VERSION_AUX_ID 6
  86. #define COPYRIGHT_AUX_ID 9
  87.  
  88. /* Aux id flags.  */
  89. #define SOM_AUX_ID_MANDATORY    (1 << 31)
  90. #define SOM_AUX_ID_COPY         (1 << 30)
  91. #define SOM_AUX_ID_APPEND       (1 << 29)
  92. #define SOM_AUX_ID_IGNORE       (1 << 28)
  93. #define SOM_AUX_ID_TYPE_SH      0
  94. #define SOM_AUX_ID_TYPE_MASK    0xffff
  95.  
  96. struct som_external_string_auxhdr
  97. {
  98.   struct som_external_aux_id header_id;
  99.  
  100.   /* Length of the string, without the NUL.  */
  101.   unsigned char string_length[4];
  102.  
  103.   /* The string.  */
  104. };
  105.  
  106. struct som_external_exec_auxhdr
  107. {
  108.   struct som_external_aux_id som_auxhdr;
  109.  
  110.   unsigned char exec_tsize[4];
  111.   unsigned char exec_tmem[4];
  112.   unsigned char exec_tfile[4];
  113.   unsigned char exec_dsize[4];
  114.   unsigned char exec_dmem[4];
  115.   unsigned char exec_dfile[4];
  116.   unsigned char exec_bsize[4];
  117.   unsigned char exec_entry[4];
  118.   unsigned char exec_flags[4];
  119.   unsigned char exec_bfill[4];
  120. };
  121.  
  122. #define AUX_HDR_SIZE sizeof (struct som_external_exec_auxhdr)
  123.  
  124. struct som_external_space_dictionary_record
  125. {
  126.   unsigned char name[4];
  127.   unsigned char flags[4];
  128.   unsigned char space_number[4];
  129.   unsigned char subspace_index[4];
  130.   unsigned char subspace_quantity[4];
  131.   unsigned char loader_fix_index[4];
  132.   unsigned char loader_fix_quantity[4];
  133.   unsigned char init_pointer_index[4];
  134.   unsigned char init_pointer_quantity[4];
  135. };
  136.  
  137. #define SOM_SPACE_IS_LOADABLE           (1 << 31)
  138. #define SOM_SPACE_IS_DEFINED            (1 << 30)
  139. #define SOM_SPACE_IS_PRIVATE            (1 << 29)
  140. #define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28)
  141. #define SOM_SPACE_IS_TSPECIFIC          (1 << 27)
  142. #define SOM_SPACE_SORT_KEY_SH           8
  143. #define SOM_SPACE_SORT_KEY_MASK         0xff
  144.  
  145. struct som_external_subspace_dictionary_record
  146. {
  147.   unsigned char space_index[4];
  148.   unsigned char flags[4];
  149.   unsigned char file_loc_init_value[4];
  150.   unsigned char initialization_length[4];
  151.   unsigned char subspace_start[4];
  152.   unsigned char subspace_length[4];
  153.   unsigned char alignment[4];
  154.   unsigned char name[4];
  155.   unsigned char fixup_request_index[4];
  156.   unsigned char fixup_request_quantity[4];
  157. };
  158.  
  159. #define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH     25
  160. #define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK   0x7f
  161. #define SOM_SUBSPACE_MEMORY_RESIDENT            (1 << 24)
  162. #define SOM_SUBSPACE_DUP_COMMON                 (1 << 23)
  163. #define SOM_SUBSPACE_IS_COMMON                  (1 << 22)
  164. #define SOM_SUBSPACE_IS_LOADABLE                (1 << 21)
  165. #define SOM_SUBSPACE_QUADRANT_SH                19
  166. #define SOM_SUBSPACE_QUADRANT_MASK              0x3
  167. #define SOM_SUBSPACE_INITIALLY_FROZEN           (1 << 18)
  168. #define SOM_SUBSPACE_IS_FIRST                   (1 << 17)
  169. #define SOM_SUBSPACE_CODE_ONLY                  (1 << 16)
  170. #define SOM_SUBSPACE_SORT_KEY_SH                8
  171. #define SOM_SUBSPACE_SORT_KEY_MASK              0xff
  172. #define SOM_SUBSPACE_REPLICATE_INIT             (1 << 7)
  173. #define SOM_SUBSPACE_CONTINUATION               (1 << 6)
  174. #define SOM_SUBSPACE_IS_TSPECIFIC               (1 << 5)
  175. #define SOM_SUBSPACE_IS_COMDAT                  (1 << 4)
  176.  
  177. struct som_external_compilation_unit
  178. {
  179.   unsigned char name[4];
  180.   unsigned char language_name[4];
  181.   unsigned char product_id[4];
  182.   unsigned char version_id[4];
  183.   unsigned char flags[4];
  184.   struct som_external_clock compile_time;
  185.   struct som_external_clock source_time;
  186. };
  187.  
  188. struct som_external_symbol_dictionary_record
  189. {
  190.   unsigned char flags[4];
  191.   unsigned char name[4];
  192.   unsigned char qualifier_name[4];
  193.   unsigned char info[4];
  194.   unsigned char symbol_value[4];
  195. };
  196.  
  197. /* Flags fields.  */
  198. #define SOM_SYMBOL_HIDDEN (1 << 31)
  199. #define SOM_SYMBOL_SECONDARY_DEF (1 << 30)
  200. #define SOM_SYMBOL_TYPE_SH 24
  201. #define SOM_SYMBOL_TYPE_MASK 0x3f
  202. #define SOM_SYMBOL_SCOPE_SH 20
  203. #define SOM_SYMBOL_SCOPE_MASK 0xf
  204. #define SOM_SYMBOL_CHECK_LEVEL_SH 17
  205. #define SOM_SYMBOL_CHECK_LEVEL_MASK 0x7
  206. #define SOM_SYMBOL_MUST_QUALIFY (1 << 16)
  207. #define SOM_SYMBOL_INITIALLY_FROZEN (1 << 15)
  208. #define SOM_SYMBOL_MEMORY_RESIDENT (1 << 14)
  209. #define SOM_SYMBOL_IS_COMMON (1 << 13)
  210. #define SOM_SYMBOL_DUP_COMMON (1 << 12)
  211. #define SOM_SYMBOL_XLEAST_SH 10
  212. #define SOM_SYMBOL_XLEAT_MASK 0x3
  213. #define SOM_SYMBOL_ARG_RELOC_SH 0
  214. #define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff
  215.  
  216. /* Info fields.  */
  217. #define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31)
  218. #define SOM_SYMBOL_NO_RELOCATION (1 << 30)
  219. #define SOM_SYMBOL_IS_COMDAT (1 << 29)
  220. #define SOM_SYMBOL_SYMBOL_INFO_SH 0
  221. #define SOM_SYMBOL_SYMBOL_INFO_MASK 0xffffff
  222.  
  223. /* Symbol type definition.  */
  224. #define ST_NULL         0
  225. #define ST_ABSOLUTE     1
  226. #define ST_DATA         2
  227. #define ST_CODE         3
  228. #define ST_PRI_PROG     4
  229. #define ST_SEC_PROG     5
  230. #define ST_ENTRY        6
  231. #define ST_STORAGE      7
  232. #define ST_STUB         8
  233. #define ST_MODULE       9
  234. #define ST_SYM_EXT      10
  235. #define ST_ARG_EXT      11
  236. #define ST_MILLICODE    12
  237. #define ST_PLABEL       13
  238. #define ST_OCT_DIS      14
  239. #define ST_MILLI_EXT    15
  240. #define ST_TSTORAGE     16
  241. #define ST_COMDAT       17
  242.  
  243. /* Symbol scope.  */
  244. #define SS_UNSAT        0
  245. #define SS_EXTERNAL     1
  246. #define SS_LOCAL        2
  247. #define SS_UNIVERSAL    3
  248.  
  249. #endif /* _SOM_AOUT_H */
  250.