Blame include/som/aout.h

Packit bbfece
/* SOM a.out definitions for BFD.
Packit bbfece
   Copyright (C) 2010-2018 Free Software Foundation, Inc.
Packit bbfece
   Contributed by Tristan Gingold <gingold@adacore.com>, AdaCore.
Packit bbfece
Packit bbfece
   This file is part of BFD, the Binary File Descriptor library.
Packit bbfece
Packit bbfece
   This program is free software; you can redistribute it and/or modify
Packit bbfece
   it under the terms of the GNU General Public License as published by
Packit bbfece
   the Free Software Foundation; either version 3 of the License, or
Packit bbfece
   (at your option) any later version.
Packit bbfece
Packit bbfece
   This program is distributed in the hope that it will be useful,
Packit bbfece
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bbfece
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bbfece
   GNU General Public License for more details.
Packit bbfece
Packit bbfece
   You should have received a copy of the GNU General Public License
Packit bbfece
   along with this program; if not, write to the Free Software Foundation,
Packit bbfece
   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
Packit bbfece
Packit bbfece
#ifndef _SOM_AOUT_H
Packit bbfece
#define _SOM_AOUT_H
Packit bbfece
Packit bbfece
#include "clock.h"
Packit bbfece
Packit bbfece
/* Note: SOM uses bit-field in its structure.  All you need to know is:
Packit bbfece
   - CPUs supported by SOM (hppa) are big-endian,
Packit bbfece
   - the MSB is numbered 0.  */
Packit bbfece
Packit bbfece
struct som_external_header
Packit bbfece
{
Packit bbfece
  unsigned char system_id[2];
Packit bbfece
  unsigned char a_magic[2];
Packit bbfece
  unsigned char version_id[4];
Packit bbfece
  struct som_external_clock file_time;
Packit bbfece
  unsigned char entry_space[4];
Packit bbfece
  unsigned char entry_subspace[4];
Packit bbfece
  unsigned char entry_offset[4];
Packit bbfece
  unsigned char aux_header_location[4];
Packit bbfece
  unsigned char aux_header_size[4];
Packit bbfece
  unsigned char som_length[4];
Packit bbfece
  unsigned char presumed_dp[4];
Packit bbfece
  unsigned char space_location[4];
Packit bbfece
  unsigned char space_total[4];
Packit bbfece
  unsigned char subspace_location[4];
Packit bbfece
  unsigned char subspace_total[4];
Packit bbfece
  unsigned char loader_fixup_location[4];
Packit bbfece
  unsigned char loader_fixup_total[4];
Packit bbfece
  unsigned char space_strings_location[4];
Packit bbfece
  unsigned char space_strings_size[4];
Packit bbfece
  unsigned char init_array_location[4];
Packit bbfece
  unsigned char init_array_total[4];
Packit bbfece
  unsigned char compiler_location[4];
Packit bbfece
  unsigned char compiler_total[4];
Packit bbfece
  unsigned char symbol_location[4];
Packit bbfece
  unsigned char symbol_total[4];
Packit bbfece
  unsigned char fixup_request_location[4];
Packit bbfece
  unsigned char fixup_request_total[4];
Packit bbfece
  unsigned char symbol_strings_location[4];
Packit bbfece
  unsigned char symbol_strings_size[4];
Packit bbfece
  unsigned char unloadable_sp_location[4];
Packit bbfece
  unsigned char unloadable_sp_size[4];
Packit bbfece
  unsigned char checksum[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define OLD_VERSION_ID 85082112
Packit bbfece
#define NEW_VERSION_ID 87102412
Packit bbfece
Packit bbfece
#define EXECLIBMAGIC	0x0104
Packit bbfece
#define RELOC_MAGIC	0x0106
Packit bbfece
#define EXEC_MAGIC	0x0107
Packit bbfece
#define SHARE_MAGIC	0x0108
Packit bbfece
#define SHMEM_MAGIC	0x0109
Packit bbfece
#define DEMAND_MAGIC	0x010b
Packit bbfece
#define DL_MAGIC	0x010d
Packit bbfece
#define SHL_MAGIC	0x010e
Packit bbfece
Packit bbfece
struct som_external_aux_id
Packit bbfece
{
Packit bbfece
  unsigned char flags[4];
Packit bbfece
  unsigned char length[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
/* Aux id types.  */
Packit bbfece
#define VERSION_AUX_ID 6
Packit bbfece
#define COPYRIGHT_AUX_ID 9
Packit bbfece
Packit bbfece
/* Aux id flags.  */
Packit bbfece
#define SOM_AUX_ID_MANDATORY	(1 << 31)
Packit bbfece
#define SOM_AUX_ID_COPY		(1 << 30)
Packit bbfece
#define SOM_AUX_ID_APPEND	(1 << 29)
Packit bbfece
#define SOM_AUX_ID_IGNORE	(1 << 28)
Packit bbfece
#define SOM_AUX_ID_TYPE_SH	0
Packit bbfece
#define SOM_AUX_ID_TYPE_MASK	0xffff
Packit bbfece
Packit bbfece
struct som_external_string_auxhdr
Packit bbfece
{
Packit bbfece
  struct som_external_aux_id header_id;
Packit bbfece
Packit bbfece
  /* Length of the string, without the NUL.  */
Packit bbfece
  unsigned char string_length[4];
Packit bbfece
Packit bbfece
  /* The string.  */
Packit bbfece
};
Packit bbfece
Packit bbfece
struct som_external_exec_auxhdr
Packit bbfece
{
Packit bbfece
  struct som_external_aux_id som_auxhdr;
Packit bbfece
Packit bbfece
  unsigned char exec_tsize[4];
Packit bbfece
  unsigned char exec_tmem[4];
Packit bbfece
  unsigned char exec_tfile[4];
Packit bbfece
  unsigned char exec_dsize[4];
Packit bbfece
  unsigned char exec_dmem[4];
Packit bbfece
  unsigned char exec_dfile[4];
Packit bbfece
  unsigned char exec_bsize[4];
Packit bbfece
  unsigned char exec_entry[4];
Packit bbfece
  unsigned char exec_flags[4];
Packit bbfece
  unsigned char exec_bfill[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define AUX_HDR_SIZE sizeof (struct som_external_exec_auxhdr)
Packit bbfece
Packit bbfece
struct som_external_space_dictionary_record
Packit bbfece
{
Packit bbfece
  unsigned char name[4];
Packit bbfece
  unsigned char flags[4];
Packit bbfece
  unsigned char space_number[4];
Packit bbfece
  unsigned char subspace_index[4];
Packit bbfece
  unsigned char subspace_quantity[4];
Packit bbfece
  unsigned char loader_fix_index[4];
Packit bbfece
  unsigned char loader_fix_quantity[4];
Packit bbfece
  unsigned char init_pointer_index[4];
Packit bbfece
  unsigned char init_pointer_quantity[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define SOM_SPACE_IS_LOADABLE		(1 << 31)
Packit bbfece
#define SOM_SPACE_IS_DEFINED		(1 << 30)
Packit bbfece
#define SOM_SPACE_IS_PRIVATE		(1 << 29)
Packit bbfece
#define SOM_SPACE_HAS_INTERMEDIATE_CODE (1 << 28)
Packit bbfece
#define SOM_SPACE_IS_TSPECIFIC		(1 << 27)
Packit bbfece
#define SOM_SPACE_SORT_KEY_SH		8
Packit bbfece
#define SOM_SPACE_SORT_KEY_MASK		0xff
Packit bbfece
Packit bbfece
struct som_external_subspace_dictionary_record
Packit bbfece
{
Packit bbfece
  unsigned char space_index[4];
Packit bbfece
  unsigned char flags[4];
Packit bbfece
  unsigned char file_loc_init_value[4];
Packit bbfece
  unsigned char initialization_length[4];
Packit bbfece
  unsigned char subspace_start[4];
Packit bbfece
  unsigned char subspace_length[4];
Packit bbfece
  unsigned char alignment[4];
Packit bbfece
  unsigned char name[4];
Packit bbfece
  unsigned char fixup_request_index[4];
Packit bbfece
  unsigned char fixup_request_quantity[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_SH	25
Packit bbfece
#define SOM_SUBSPACE_ACCESS_CONTROL_BITS_MASK	0x7f
Packit bbfece
#define SOM_SUBSPACE_MEMORY_RESIDENT		(1 << 24)
Packit bbfece
#define SOM_SUBSPACE_DUP_COMMON			(1 << 23)
Packit bbfece
#define SOM_SUBSPACE_IS_COMMON			(1 << 22)
Packit bbfece
#define SOM_SUBSPACE_IS_LOADABLE		(1 << 21)
Packit bbfece
#define SOM_SUBSPACE_QUADRANT_SH		19
Packit bbfece
#define SOM_SUBSPACE_QUADRANT_MASK		0x3
Packit bbfece
#define SOM_SUBSPACE_INITIALLY_FROZEN		(1 << 18)
Packit bbfece
#define SOM_SUBSPACE_IS_FIRST			(1 << 17)
Packit bbfece
#define SOM_SUBSPACE_CODE_ONLY			(1 << 16)
Packit bbfece
#define SOM_SUBSPACE_SORT_KEY_SH		8
Packit bbfece
#define SOM_SUBSPACE_SORT_KEY_MASK		0xff
Packit bbfece
#define SOM_SUBSPACE_REPLICATE_INIT		(1 << 7)
Packit bbfece
#define SOM_SUBSPACE_CONTINUATION		(1 << 6)
Packit bbfece
#define SOM_SUBSPACE_IS_TSPECIFIC		(1 << 5)
Packit bbfece
#define SOM_SUBSPACE_IS_COMDAT			(1 << 4)
Packit bbfece
Packit bbfece
struct som_external_compilation_unit
Packit bbfece
{
Packit bbfece
  unsigned char name[4];
Packit bbfece
  unsigned char language_name[4];
Packit bbfece
  unsigned char product_id[4];
Packit bbfece
  unsigned char version_id[4];
Packit bbfece
  unsigned char flags[4];
Packit bbfece
  struct som_external_clock compile_time;
Packit bbfece
  struct som_external_clock source_time;
Packit bbfece
};
Packit bbfece
Packit bbfece
struct som_external_symbol_dictionary_record
Packit bbfece
{
Packit bbfece
  unsigned char flags[4];
Packit bbfece
  unsigned char name[4];
Packit bbfece
  unsigned char qualifier_name[4];
Packit bbfece
  unsigned char info[4];
Packit bbfece
  unsigned char symbol_value[4];
Packit bbfece
};
Packit bbfece
Packit bbfece
/* Flags fields.  */
Packit bbfece
#define SOM_SYMBOL_HIDDEN (1 << 31)
Packit bbfece
#define SOM_SYMBOL_SECONDARY_DEF (1 << 30)
Packit bbfece
#define SOM_SYMBOL_TYPE_SH 24
Packit bbfece
#define SOM_SYMBOL_TYPE_MASK 0x3f
Packit bbfece
#define SOM_SYMBOL_SCOPE_SH 20
Packit bbfece
#define SOM_SYMBOL_SCOPE_MASK 0xf
Packit bbfece
#define SOM_SYMBOL_CHECK_LEVEL_SH 17
Packit bbfece
#define SOM_SYMBOL_CHECK_LEVEL_MASK 0x7
Packit bbfece
#define SOM_SYMBOL_MUST_QUALIFY (1 << 16)
Packit bbfece
#define SOM_SYMBOL_INITIALLY_FROZEN (1 << 15)
Packit bbfece
#define SOM_SYMBOL_MEMORY_RESIDENT (1 << 14)
Packit bbfece
#define SOM_SYMBOL_IS_COMMON (1 << 13)
Packit bbfece
#define SOM_SYMBOL_DUP_COMMON (1 << 12)
Packit bbfece
#define SOM_SYMBOL_XLEAST_SH 10
Packit bbfece
#define SOM_SYMBOL_XLEAT_MASK 0x3
Packit bbfece
#define SOM_SYMBOL_ARG_RELOC_SH 0
Packit bbfece
#define SOM_SYMBOL_ARG_RELOC_MASK 0x3ff
Packit bbfece
Packit bbfece
/* Info fields.  */
Packit bbfece
#define SOM_SYMBOL_HAS_LONG_RETURN (1 << 31)
Packit bbfece
#define SOM_SYMBOL_NO_RELOCATION (1 << 30)
Packit bbfece
#define SOM_SYMBOL_IS_COMDAT (1 << 29)
Packit bbfece
#define SOM_SYMBOL_SYMBOL_INFO_SH 0
Packit bbfece
#define SOM_SYMBOL_SYMBOL_INFO_MASK 0xffffff
Packit bbfece
Packit bbfece
/* Symbol type definition.  */
Packit bbfece
#define ST_NULL		0
Packit bbfece
#define ST_ABSOLUTE	1
Packit bbfece
#define ST_DATA		2
Packit bbfece
#define ST_CODE		3
Packit bbfece
#define ST_PRI_PROG	4
Packit bbfece
#define ST_SEC_PROG	5
Packit bbfece
#define ST_ENTRY	6
Packit bbfece
#define ST_STORAGE	7
Packit bbfece
#define ST_STUB		8
Packit bbfece
#define ST_MODULE	9
Packit bbfece
#define ST_SYM_EXT	10
Packit bbfece
#define ST_ARG_EXT	11
Packit bbfece
#define ST_MILLICODE	12
Packit bbfece
#define ST_PLABEL	13
Packit bbfece
#define ST_OCT_DIS	14
Packit bbfece
#define ST_MILLI_EXT	15
Packit bbfece
#define ST_TSTORAGE	16
Packit bbfece
#define ST_COMDAT	17
Packit bbfece
Packit bbfece
/* Symbol scope.  */
Packit bbfece
#define SS_UNSAT	0
Packit bbfece
#define SS_EXTERNAL	1
Packit bbfece
#define SS_LOCAL	2
Packit bbfece
#define SS_UNIVERSAL	3
Packit bbfece
Packit bbfece
#endif /* _SOM_AOUT_H */