/* Target definitions for 32/64-bit NLM (NetWare Loadable Module)
   Copyright (C) 1993-2014 Free Software Foundation, Inc.

   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.  */

#define nlm_core_file_p _bfd_dummy_target

#define nlm_get_symtab_upper_bound              nlmNAME (get_symtab_upper_bound)
#define nlm_canonicalize_symtab                 nlmNAME (canonicalize_symtab)
#define nlm_make_empty_symbol                   nlmNAME (make_empty_symbol)
#define nlm_print_symbol                        nlmNAME (print_symbol)
#define nlm_get_symbol_info                     nlmNAME (get_symbol_info)
#define nlm_bfd_is_local_label_name             bfd_generic_is_local_label_name
#define nlm_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define nlm_get_lineno                          _bfd_nosymbols_get_lineno
#define nlm_find_nearest_line                   _bfd_nosymbols_find_nearest_line
#define nlm_find_line                           _bfd_nosymbols_find_line
#define nlm_find_inliner_info                   _bfd_nosymbols_find_inliner_info
#define nlm_bfd_make_debug_symbol               _bfd_nosymbols_bfd_make_debug_symbol
#define nlm_read_minisymbols                    _bfd_generic_read_minisymbols
#define nlm_minisymbol_to_symbol                _bfd_generic_minisymbol_to_symbol

#define nlm_get_reloc_upper_bound               nlmNAME (get_reloc_upper_bound)
#define nlm_canonicalize_reloc                  nlmNAME (canonicalize_reloc)
#define nlm_bfd_reloc_type_lookup               bfd_default_reloc_type_lookup
#define nlm_bfd_reloc_name_lookup         _bfd_norelocs_bfd_reloc_name_lookup
#define nlm_set_section_contents                nlmNAME (set_section_contents)

#define nlm_sizeof_headers                      _bfd_nolink_sizeof_headers
#define nlm_bfd_get_relocated_section_contents  bfd_generic_get_relocated_section_contents
#define nlm_bfd_relax_section                   bfd_generic_relax_section
#define nlm_bfd_gc_sections                     bfd_generic_gc_sections
#define nlm_bfd_lookup_section_flags		bfd_generic_lookup_section_flags
#define nlm_bfd_merge_sections                  bfd_generic_merge_sections
#define nlm_bfd_is_group_section                bfd_generic_is_group_section
#define nlm_bfd_discard_group                   bfd_generic_discard_group
#define nlm_section_already_linked              _bfd_generic_section_already_linked
#define nlm_bfd_define_common_symbol            bfd_generic_define_common_symbol
#define nlm_bfd_link_hash_table_create          _bfd_generic_link_hash_table_create
#define nlm_bfd_link_add_symbols                _bfd_generic_link_add_symbols
#define nlm_bfd_link_just_syms                  _bfd_generic_link_just_syms
#define nlm_bfd_copy_link_hash_symbol_type \
  _bfd_generic_copy_link_hash_symbol_type
#define nlm_bfd_final_link                      _bfd_generic_final_link
#define nlm_bfd_link_split_section              _bfd_generic_link_split_section

/* This structure contains everything that BFD knows about a target.
   It includes things like its byte order, name, what routines to call
   to do various operations, etc.  Every BFD points to a target structure
   with its "xvec" member.

   There are two such structures here:  one for big-endian machines and
   one for little-endian machines.   */

/* Forward declaration for use when initialising alternative_target field.  */
#ifdef TARGET_LITTLE_SYM
extern const bfd_target TARGET_LITTLE_SYM;
#endif

#ifdef TARGET_BIG_SYM
const bfd_target TARGET_BIG_SYM =
{
  /* Name: identify kind of target.  */
  TARGET_BIG_NAME,

  /* Flavour: general indication about file.  */
  bfd_target_nlm_flavour,

  /* Byteorder: data is big endian.  */
  BFD_ENDIAN_BIG,

  /* Header_byteorder: header is also big endian.  */
  BFD_ENDIAN_BIG,

  /* Object_flags: mask of all file flags.  */
  (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
   | WP_TEXT),

  /* Section_flags: mask of all section flags.  */
  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
   | SEC_CODE | SEC_DATA),

   /* Leading_symbol_char: is the first char of a user symbol
      predictable, and if so what is it.  */
   0,

  /* AR_pad_char: pad character for filenames within an archive header
     FIXME:  this really has nothing to do with NLM, this is a characteristic
     of the archiver and/or os and should be independently tunable.  */
  '/',

  /* AR_max_namelen: maximum number of characters in an archive header
     FIXME:  this really has nothing to do with NLM, this is a characteristic
     of the archiver and should be independently tunable.  This value is
     a WAG (wild a** guess).  */
  15,
  0,				/* match priority.  */

  /* Routines to byte-swap various sized integers from the data sections.  */
  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  bfd_getb16, bfd_getb_signed_16, bfd_putb16,

  /* Routines to byte-swap various sized integers from the file headers.  */
  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
  bfd_getb32, bfd_getb_signed_32, bfd_putb32,
  bfd_getb16, bfd_getb_signed_16, bfd_putb16,

  /* bfd_check_format: check the format of a file being read.  */
  { _bfd_dummy_target,		/* Unknown format.  */
    nlmNAME (object_p),		/* Assembler/linker output (object file).  */
    bfd_generic_archive_p,	/* An archive.  */
    nlm_core_file_p		/* A core file.  */
  },

  /* bfd_set_format: set the format of a file being written.  */
  { bfd_false,
    nlm_mkobject,
    _bfd_generic_mkarchive,
    bfd_false
  },

  /* bfd_write_contents: write cached information into a file being written.  */
  { bfd_false,
    nlmNAME (write_object_contents),
    _bfd_write_archive_contents,
    bfd_false
  },

  /* Initialize a jump table with the standard macro.
     All names start with "nlm".  */
  BFD_JUMP_TABLE_GENERIC (_bfd_generic),
  BFD_JUMP_TABLE_COPY (_bfd_generic),
  BFD_JUMP_TABLE_CORE (_bfd_nocore),
  BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
  BFD_JUMP_TABLE_SYMBOLS (nlm),
  BFD_JUMP_TABLE_RELOCS (nlm),
  BFD_JUMP_TABLE_WRITE (nlm),
  BFD_JUMP_TABLE_LINK (nlm),
  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),

  /* Alternative endian target.  */
#ifdef TARGET_LITTLE_SYM
  & TARGET_LITTLE_SYM,
#else
  NULL,
#endif

  /* Backend_data.  */
  (void *) TARGET_BACKEND_DATA
};
#endif

#ifdef TARGET_LITTLE_SYM
const bfd_target TARGET_LITTLE_SYM =
{
  /* Name: identify kind of target.  */
  TARGET_LITTLE_NAME,

  /* Flavour: general indication about file.  */
  bfd_target_nlm_flavour,

  /* Byteorder: data is little endian.  */
  BFD_ENDIAN_LITTLE,

  /* Header_byteorder: header is also little endian.  */
  BFD_ENDIAN_LITTLE,

  /* Object_flags: mask of all file flags.  */
  (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
   | WP_TEXT),

  /* Section_flags: mask of all section flags.  */
  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
   | SEC_DATA),

   /* Leading_symbol_char: is the first char of a user symbol
      predictable, and if so what is it.  */
   0,

  /* AR_pad_char: pad character for filenames within an archive header
     FIXME:  this really has nothing to do with NLM, this is a characteristic
     of the archiver and/or os and should be independently tunable.  */
  '/',

  /* AR_max_namelen: maximum number of characters in an archive header
     FIXME:  this really has nothing to do with NLM, this is a characteristic
     of the archiver and should be independently tunable.  This value is
     a WAG (wild a** guess).  */
  15,
  0,				/* match priority.  */

  /* Routines to byte-swap various sized integers from the data sections.  */
  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  bfd_getl16, bfd_getl_signed_16, bfd_putl16,

  /* Routines to byte-swap various sized integers from the file headers.  */
  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
  bfd_getl32, bfd_getl_signed_32, bfd_putl32,
  bfd_getl16, bfd_getl_signed_16, bfd_putl16,

  /* bfd_check_format: check the format of a file being read.  */
  { _bfd_dummy_target,		/* Unknown format.  */
    nlmNAME(object_p),		/* Assembler/linker output (object file).  */
    bfd_generic_archive_p,	/* An archive.  */
    nlm_core_file_p		/* A core file.  */
  },

  /* bfd_set_format: set the format of a file being written.  */
  { bfd_false,
    nlm_mkobject,
    _bfd_generic_mkarchive,
    bfd_false
  },

  /* bfd_write_contents: write cached information into a file being written.  */
  { bfd_false,
    nlmNAME(write_object_contents),
    _bfd_write_archive_contents,
    bfd_false
  },

  /* Initialize a jump table with the standard macro.
     All names start with "nlm".  */
  BFD_JUMP_TABLE_GENERIC (_bfd_generic),
  BFD_JUMP_TABLE_COPY (_bfd_generic),
  BFD_JUMP_TABLE_CORE (_bfd_nocore),
  BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
  BFD_JUMP_TABLE_SYMBOLS (nlm),
  BFD_JUMP_TABLE_RELOCS (nlm),
  BFD_JUMP_TABLE_WRITE (nlm),
  BFD_JUMP_TABLE_LINK (nlm),
  BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),

  /* Alternative endian target.  */
#ifdef TARGET_BIG_SYM
  & TARGET_BIG_SYM,
#else
  NULL,
#endif

  /* Backend_data.  */
  (void *) TARGET_BACKEND_DATA
};
#endif
