Subversion Repositories Kolibri OS

Rev

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

  1. /* SOM internal 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_INTERNAL_H
  22. #define _SOM_INTERNAL_H
  23.  
  24. struct som_clock
  25. {
  26.   unsigned int secs;
  27.   unsigned int nanosecs;
  28. };
  29.  
  30. struct som_header
  31. {
  32.   unsigned short system_id;
  33.   unsigned short a_magic;
  34.   unsigned int version_id;
  35.   struct som_clock file_time;
  36.   unsigned int entry_space;
  37.   unsigned int entry_subspace;
  38.   unsigned int entry_offset;
  39.   unsigned int aux_header_location;
  40.   unsigned int aux_header_size;
  41.   unsigned int som_length;
  42.   unsigned int presumed_dp;
  43.   unsigned int space_location;
  44.   unsigned int space_total;
  45.   unsigned int subspace_location;
  46.   unsigned int subspace_total;
  47.   unsigned int loader_fixup_location;
  48.   unsigned int loader_fixup_total;
  49.   unsigned int space_strings_location;
  50.   unsigned int space_strings_size;
  51.   unsigned int init_array_location;
  52.   unsigned int init_array_total;
  53.   unsigned int compiler_location;
  54.   unsigned int compiler_total;
  55.   unsigned int symbol_location;
  56.   unsigned int symbol_total;
  57.   unsigned int fixup_request_location;
  58.   unsigned int fixup_request_total;
  59.   unsigned int symbol_strings_location;
  60.   unsigned int symbol_strings_size;
  61.   unsigned int unloadable_sp_location;
  62.   unsigned int unloadable_sp_size;
  63.   unsigned int checksum;
  64. };
  65.  
  66. struct som_aux_id
  67. {
  68.   unsigned int mandatory : 1;
  69.   unsigned int copy : 1;
  70.   unsigned int append : 1;
  71.   unsigned int ignore : 1;
  72.   unsigned int reserved : 12;
  73.  
  74.   /* Header type.  */
  75.   unsigned int type : 16;
  76.  
  77.   /* Length of the header in bytes, without the two word identifier.  */
  78.   unsigned int length;
  79. };
  80.  
  81. /* Generic auxiliary string header.  */
  82. struct som_string_auxhdr
  83. {
  84.   struct som_aux_id header_id;
  85.  
  86.   /* Length of the string, without the NUL.  */
  87.   unsigned int string_length;
  88.  
  89.   /* The string.  */
  90.   char string[1];
  91. };
  92.  
  93. struct som_name_pt
  94. {
  95.   char *name;
  96.   unsigned int strx;
  97. };
  98.  
  99. struct som_compilation_unit
  100. {
  101.   /* Source file that produced the SOM.  */
  102.   struct som_name_pt name;
  103.  
  104.   /* Name of the language used when creating this SOM.  */
  105.   struct som_name_pt language_name;
  106.  
  107.   /* Identificaton of the compiler.  */
  108.   struct som_name_pt product_id;
  109.  
  110.   /* Version id of the compiler.  */
  111.   struct som_name_pt version_id;
  112.  
  113.   unsigned int flags;
  114.   struct som_clock compile_time;
  115.   struct som_clock source_time;
  116. };
  117.  
  118. struct som_exec_auxhdr
  119. {
  120.   struct som_aux_id som_auxhdr;
  121.  
  122.   long exec_tsize;
  123.   long exec_tmem;
  124.   long exec_tfile;
  125.   long exec_dsize;
  126.   long exec_dmem;
  127.   long exec_dfile;
  128.   long exec_bsize;
  129.   long exec_entry;
  130.   long exec_flags;
  131.   long exec_bfill;
  132. };
  133.  
  134. struct som_space_dictionary_record
  135. {
  136.   unsigned int name;
  137.   unsigned int is_loadable : 1;
  138.   unsigned int is_defined : 1;
  139.   unsigned int is_private : 1;
  140.   unsigned int has_intermediate_code : 1;
  141.   unsigned int is_tspecific : 1;
  142.   unsigned int reserved : 11;
  143.   unsigned int sort_key : 8;
  144.   unsigned int reserved2 : 8;
  145.   int space_number;
  146.   int subspace_index;
  147.   unsigned int subspace_quantity;
  148.   int loader_fix_index;
  149.   unsigned int loader_fix_quantity;
  150.   int init_pointer_index;
  151.   unsigned int init_pointer_quantity;
  152. };
  153.  
  154. struct som_subspace_dictionary_record
  155. {
  156.   int space_index;
  157.   unsigned int access_control_bits : 7;
  158.   unsigned int memory_resident : 1;
  159.   unsigned int dup_common : 1;
  160.   unsigned int is_common : 1;
  161.   unsigned int is_loadable : 1;
  162.   unsigned int quadrant : 2;
  163.   unsigned int initially_frozen : 1;
  164.   unsigned int is_first : 1;
  165.   unsigned int code_only : 1;
  166.   unsigned int sort_key : 8;
  167.   unsigned int replicate_init : 1;
  168.   unsigned int continuation : 1;
  169.   unsigned int is_tspecific : 1;
  170.   unsigned int is_comdat : 1;
  171.   unsigned int reserved : 4;
  172.   int file_loc_init_value;
  173.   unsigned int initialization_length;
  174.   unsigned int subspace_start;
  175.   unsigned int subspace_length;
  176.   unsigned int reserved2 : 5;
  177.   unsigned int alignment : 27;
  178.   unsigned int name;
  179.   int fixup_request_index;
  180.   unsigned int fixup_request_quantity;
  181. };
  182.  
  183. struct som_lst_header
  184. {
  185.   unsigned short system_id;
  186.   unsigned short a_magic;
  187.   unsigned int version_id;
  188.   struct som_clock file_time;
  189.   unsigned int hash_loc;
  190.   unsigned int hash_size;
  191.   unsigned int module_count;
  192.   unsigned int module_limit;
  193.   unsigned int dir_loc;
  194.   unsigned int export_loc;
  195.   unsigned int export_count;
  196.   unsigned int import_loc;
  197.   unsigned int aux_loc;
  198.   unsigned int aux_size;
  199.   unsigned int string_loc;
  200.   unsigned int string_size;
  201.   unsigned int free_list;
  202.   unsigned int file_end;
  203.   unsigned int checksum;
  204. };
  205.  
  206. #endif /* _SOM_INTERNAL_H */
  207.