1 /* SOM internal definitions for BFD. 2 Copyright (C) 2010-2016 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