blob: f8fb96b0401a66fd13ba573bc6850c788ee49a86 [file] [log] [blame]
/* SOM internal definitions for BFD.
Copyright (C) 2010-2021 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 */