/* HP PA-RISC SOM object file format:  definitions internal to BFD.
   Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001,
   2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.

   Contributed by the Center for Software Science at the
   University of Utah (pa-gdb-bugs@cs.utah.edu).

   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_H
#define _SOM_H

#include "libhppa.h"

/* We want reloc.h to provide PA 2.0 defines.  */
#define PA_2_0

#include <a.out.h>
#include <lst.h>
#include <ar.h>

/* The SOM BFD backend doesn't currently use anything from these
   two include files, but it's likely to need them in the future.  */
#ifdef R_DLT_REL
#include <shl.h>
#include <dl.h>
#endif

#if defined(HOST_HPPABSD) || defined (HOST_HPPAOSF)
/* BSD uses a completely different scheme for object file identification.
   so for now, define _PA_RISC_ID to accept any random value for a model
   number.  */
#undef _PA_RISC_ID
#define _PA_RISC_ID(__m_num) 1
#endif /* HOST_HPPABSD */

#define FILE_HDR_SIZE sizeof (struct header)
#define AUX_HDR_SIZE sizeof (struct som_exec_auxhdr)

typedef struct som_symbol
{
  asymbol symbol;
  unsigned int som_type;

  /* Structured like the ELF tc_data union.  Allows more code sharing
     in GAS this way.  */
  union
  {
    struct
    {
      unsigned int hppa_arg_reloc;
      unsigned int hppa_priv_level;
    } ap;
    PTR any;
  }
  tc_data;

  /* Index of this symbol in the symbol table.  Only used when
     building relocation streams for incomplete objects.  */
  int index;

  /* How many times this symbol is used in a relocation.  By sorting
     the symbols from most used to least used we can significantly
     reduce the size of the relocation stream for incomplete objects.  */
  int reloc_count;

  /* During object file writing, the offset of the name of this symbol
     in the SOM string table.  */
  int stringtab_offset;
}
som_symbol_type;

/* A structure containing all the magic information stored in a BFD's
   private data which needs to be copied during an objcopy/strip run.  */
struct som_exec_data
{
  /* Sort-of a magic number.  BSD uses it to distinguish between
     native executables and hpux executables.  */
  short system_id;

  /* Magic exec flags.  These control things like whether or not
     null pointer dereferencing is allowed and the like.  */
  long exec_flags;

  /* We must preserve the version identifier too.  Some versions
     of the HP linker do not grok NEW_VERSION_ID for reasons unknown.  */
  unsigned int version_id;

  /* Add more stuff here as needed.  Good examples of information
     we might want to pass would be presumed_dp, entry_* and maybe
     others from the file header.  */
};

struct somdata
{
  /* All the magic information about an executable which lives
     in the private BFD structure and needs to be copied from
     the input bfd to the output bfd during an objcopy/strip.  */
  struct som_exec_data *exec_data;

  /* These three fields are only used when writing files and are
     generated from scratch.  They need not be copied for objcopy
     or strip to work.  */
  struct header *file_hdr;
  struct copyright_aux_hdr *copyright_aux_hdr;
  struct user_string_aux_hdr *version_aux_hdr;
  struct som_exec_auxhdr *exec_hdr;
  COMPUNIT *comp_unit;

  /* Pointers to a saved copy of the symbol and string tables.  These
     need not be copied for objcopy or strip to work.  */
  som_symbol_type *symtab;
  char *stringtab;
  asymbol **sorted_syms;

  /* We remember these offsets so that after check_file_format, we have
     no dependencies on the particular format of the exec_hdr.
     These offsets need not be copied for objcopy or strip to work.  */

  file_ptr sym_filepos;
  file_ptr str_filepos;
  file_ptr reloc_filepos;
  unsigned stringtab_size;
  void * line_info;
};

struct som_data_struct
{
  struct somdata a;
};

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;
  union name_pt name;
  int fixup_request_index;
  unsigned int fixup_request_quantity;
};

/* Substructure of som_section_data_struct used to hold information
   which can't be represented by the generic BFD section structure,
   but which must be copied during objcopy or strip.  */
struct som_copyable_section_data_struct
{
  /* Various fields in space and subspace headers that we need
     to pass around.  */
  unsigned int sort_key : 8;
  unsigned int access_control_bits : 7;
  unsigned int is_defined : 1;
  unsigned int is_private : 1;
  unsigned int quadrant : 2;
  unsigned int is_comdat : 1;
  unsigned int is_common : 1;
  unsigned int dup_common : 1;

  /* For subspaces, this points to the section which represents the
     space in which the subspace is contained.  For spaces it points
     back to the section for this space.  */
  asection *container;

  /* The user-specified space number.  It is wrong to use this as
     an index since duplicates and holes are allowed.  */
  int space_number;

  /* Add more stuff here as needed.  Good examples of information
     we might want to pass would be initialization pointers,
     and the many subspace flags we do not represent yet.  */
};

/* Used to keep extra SOM specific information for a given section.

   reloc_size holds the size of the relocation stream, note this
   is very different from the number of relocations as SOM relocations
   are variable length.

   reloc_stream is the actual stream of relocation entries.  */

struct som_section_data_struct
{
  struct som_copyable_section_data_struct *copy_data;
  unsigned int reloc_size;
  unsigned char *reloc_stream;
  struct space_dictionary_record *space_dict;
  struct som_subspace_dictionary_record *subspace_dict;
};

#define somdata(bfd)			((bfd)->tdata.som_data->a)
#define obj_som_exec_data(bfd)		(somdata (bfd).exec_data)
#define obj_som_file_hdr(bfd)		(somdata (bfd).file_hdr)
#define obj_som_exec_hdr(bfd)		(somdata (bfd).exec_hdr)
#define obj_som_copyright_hdr(bfd)	(somdata (bfd).copyright_aux_hdr)
#define obj_som_version_hdr(bfd)	(somdata (bfd).version_aux_hdr)
#define obj_som_compilation_unit(bfd)	(somdata (bfd).comp_unit)
#define obj_som_symtab(bfd)		(somdata (bfd).symtab)
#define obj_som_stringtab(bfd)		(somdata (bfd).stringtab)
#define obj_som_sym_filepos(bfd)	(somdata (bfd).sym_filepos)
#define obj_som_str_filepos(bfd)	(somdata (bfd).str_filepos)
#define obj_som_stringtab_size(bfd)	(somdata (bfd).stringtab_size)
#define obj_som_reloc_filepos(bfd)	(somdata (bfd).reloc_filepos)
#define obj_som_sorted_syms(bfd)	(somdata (bfd).sorted_syms)
#define som_section_data(sec)      ((struct som_section_data_struct *) sec->used_by_bfd)
#define som_symbol_data(symbol)		((som_symbol_type *) symbol)

/* Defines groups of basic relocations.  FIXME:  These should
   be the only basic relocations created by GAS.  The rest
   should be internal to the BFD backend.

   The idea is both SOM and ELF define these basic relocation
   types so they map into a SOM or ELF specific relocation as
   appropriate.  This allows GAS to share much more code
   between the two object formats.  */

#define R_HPPA_NONE			R_NO_RELOCATION
#define	R_HPPA				R_CODE_ONE_SYMBOL
#define	R_HPPA_PCREL_CALL		R_PCREL_CALL
#define R_HPPA_ABS_CALL			R_ABS_CALL
#define	R_HPPA_GOTOFF			R_DP_RELATIVE
#define R_HPPA_ENTRY			R_ENTRY
#define R_HPPA_EXIT			R_EXIT
#define R_HPPA_COMPLEX			R_COMP1
#define R_HPPA_BEGIN_BRTAB		R_BEGIN_BRTAB
#define R_HPPA_END_BRTAB		R_END_BRTAB
#define R_HPPA_BEGIN_TRY		R_BEGIN_TRY
#define R_HPPA_END_TRY			R_END_TRY

/* Exported functions, mostly for use by GAS.  */
bfd_boolean  bfd_som_set_section_attributes    (asection *, int, int, unsigned int, int);
bfd_boolean  bfd_som_set_subsection_attributes (asection *, asection *, int, unsigned int, int, int, int, int);
void         bfd_som_set_symbol_type           (asymbol *, unsigned int);
bfd_boolean  bfd_som_attach_aux_hdr            (bfd *, int, char *);
int **       hppa_som_gen_reloc_type           (bfd *, int, int, enum hppa_reloc_field_selector_type_alt, int, asymbol *);
bfd_boolean  bfd_som_attach_compilation_unit   (bfd *, const char *, const char *, const char *, const char *);

#endif /* _SOM_H */
