1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
/* SOM internal definitions for BFD.
Copyright (C) 2010-2020 Free Software Foundation, Inc.
Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
#ifndef _SOM_INTERNAL_H
#define _SOM_INTERNAL_H
struct som_clock
{
unsigned int secs;
unsigned int nanosecs;
};
struct som_header
{
unsigned short system_id;
unsigned short a_magic;
unsigned int version_id;
struct som_clock file_time;
unsigned int entry_space;
unsigned int entry_subspace;
unsigned int entry_offset;
unsigned int aux_header_location;
unsigned int aux_header_size;
unsigned int som_length;
unsigned int presumed_dp;
unsigned int space_location;
unsigned int space_total;
unsigned int subspace_location;
unsigned int subspace_total;
unsigned int loader_fixup_location;
unsigned int loader_fixup_total;
unsigned int space_strings_location;
unsigned int space_strings_size;
unsigned int init_array_location;
unsigned int init_array_total;
unsigned int compiler_location;
unsigned int compiler_total;
unsigned int symbol_location;
unsigned int symbol_total;
unsigned int fixup_request_location;
unsigned int fixup_request_total;
unsigned int symbol_strings_location;
unsigned int symbol_strings_size;
unsigned int unloadable_sp_location;
unsigned int unloadable_sp_size;
unsigned int checksum;
};
struct som_aux_id
{
unsigned int mandatory : 1;
unsigned int copy : 1;
unsigned int append : 1;
unsigned int ignore : 1;
unsigned int reserved : 12;
/* Header type. */
unsigned int type : 16;
/* Length of the header in bytes, without the two word identifier. */
unsigned int length;
};
/* Generic auxiliary string header. */
struct som_string_auxhdr
{
struct som_aux_id header_id;
/* Length of the string, without the NUL. */
unsigned int string_length;
/* The string. */
char string[1];
};
struct som_name_pt
{
char *name;
unsigned int strx;
};
struct som_compilation_unit
{
/* Source file that produced the SOM. */
struct som_name_pt name;
/* Name of the language used when creating this SOM. */
struct som_name_pt language_name;
/* Identificaton of the compiler. */
struct som_name_pt product_id;
/* Version id of the compiler. */
struct som_name_pt version_id;
unsigned int flags;
struct som_clock compile_time;
struct som_clock source_time;
};
struct som_exec_auxhdr
{
struct som_aux_id som_auxhdr;
long exec_tsize;
long exec_tmem;
long exec_tfile;
long exec_dsize;
long exec_dmem;
long exec_dfile;
long exec_bsize;
long exec_entry;
long exec_flags;
long exec_bfill;
};
struct som_space_dictionary_record
{
unsigned int name;
unsigned int is_loadable : 1;
unsigned int is_defined : 1;
unsigned int is_private : 1;
unsigned int has_intermediate_code : 1;
unsigned int is_tspecific : 1;
unsigned int reserved : 11;
unsigned int sort_key : 8;
unsigned int reserved2 : 8;
int space_number;
int subspace_index;
unsigned int subspace_quantity;
int loader_fix_index;
unsigned int loader_fix_quantity;
int init_pointer_index;
unsigned int init_pointer_quantity;
};
struct som_subspace_dictionary_record
{
int space_index;
unsigned int access_control_bits : 7;
unsigned int memory_resident : 1;
unsigned int dup_common : 1;
unsigned int is_common : 1;
unsigned int is_loadable : 1;
unsigned int quadrant : 2;
unsigned int initially_frozen : 1;
unsigned int is_first : 1;
unsigned int code_only : 1;
unsigned int sort_key : 8;
unsigned int replicate_init : 1;
unsigned int continuation : 1;
unsigned int is_tspecific : 1;
unsigned int is_comdat : 1;
unsigned int reserved : 4;
int file_loc_init_value;
unsigned int initialization_length;
unsigned int subspace_start;
unsigned int subspace_length;
unsigned int reserved2 : 5;
unsigned int alignment : 27;
unsigned int name;
int fixup_request_index;
unsigned int fixup_request_quantity;
};
struct som_lst_header
{
unsigned short system_id;
unsigned short a_magic;
unsigned int version_id;
struct som_clock file_time;
unsigned int hash_loc;
unsigned int hash_size;
unsigned int module_count;
unsigned int module_limit;
unsigned int dir_loc;
unsigned int export_loc;
unsigned int export_count;
unsigned int import_loc;
unsigned int aux_loc;
unsigned int aux_size;
unsigned int string_loc;
unsigned int string_size;
unsigned int free_list;
unsigned int file_end;
unsigned int checksum;
};
#endif /* _SOM_INTERNAL_H */
|