207 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
	
/* SOM internal definitions for BFD.
 | 
						|
   Copyright 2010  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 */
 |