/* AIX cross support for collect2.
   Copyright (C) 2009-2021 Free Software Foundation, Inc.

This file is part of GCC.

GCC 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, or (at your option) any later
version.

GCC 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 GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

#ifndef GCC_COLLECT2_AIX_H
#define GCC_COLLECT2_AIX_H
/* collect2-aix.c requires mmap support.  It should otherwise be
   fairly portable.  */
#if defined(CROSS_DIRECTORY_STRUCTURE) \
    && defined(TARGET_AIX_VERSION) \
    && HAVE_MMAP

#define CROSS_AIX_SUPPORT 1

/* -------------------------------------------------------------------------
   Definitions adapted from bfd.  (Fairly heavily adapted in some cases.)
   ------------------------------------------------------------------------- */

/* Compatibility types for bfd.  */
typedef unsigned HOST_WIDE_INT bfd_vma;

/* The size of an archive's fl_magic field.  */
#define FL_MAGIC_SIZE 8

/* The expected contents of fl_magic for big archives.  */
#define FL_MAGIC_BIG_AR "<bigaf>\012"

/* The size of each offset string in the header of a big archive.  */
#define AR_BIG_OFFSET_SIZE 20

/* The format of the file header in a "big" XCOFF archive.  */
struct external_big_ar_filehdr
{
  /* Magic string.  */
  char fl_magic[FL_MAGIC_SIZE];

  /* Offset of the member table (decimal ASCII string).  */
  char fl_memoff[AR_BIG_OFFSET_SIZE];

  /* Offset of the global symbol table for 32-bit objects (decimal ASCII
     string).  */
  char fl_symoff[AR_BIG_OFFSET_SIZE];

  /* Offset of the global symbol table for 64-bit objects (decimal ASCII
     string).  */
  char fl_symoff64[AR_BIG_OFFSET_SIZE];

  /* Offset of the first member in the archive (decimal ASCII string).  */
  char fl_firstmemoff[AR_BIG_OFFSET_SIZE];

  /* Offset of the last member in the archive (decimal ASCII string).  */
  char fl_lastmemoff[AR_BIG_OFFSET_SIZE];

  /* Offset of the first member on the free list (decimal ASCII
     string).  */
  char fl_freeoff[AR_BIG_OFFSET_SIZE];
};

/* Each archive name is followed by this many bytes of magic string.  */
#define SXCOFFARFMAG 2

/* The format of a member header in a "big" XCOFF archive.  */
struct external_big_ar_member
{
  /* File size not including the header (decimal ASCII string).  */
  char ar_size[AR_BIG_OFFSET_SIZE];

  /* File offset of next archive member (decimal ASCII string).  */
  char ar_nextoff[AR_BIG_OFFSET_SIZE];

  /* File offset of previous archive member (decimal ASCII string).  */
  char ar_prevoff[AR_BIG_OFFSET_SIZE];

  /* File mtime (decimal ASCII string).  */
  char ar_date[12];

  /* File UID (decimal ASCII string).  */
  char ar_uid[12];

  /* File GID (decimal ASCII string).  */
  char ar_gid[12];

  /* File mode (octal ASCII string).  */
  char ar_mode[12];

  /* Length of file name (decimal ASCII string).  */
  char ar_namlen[4];

  /* This structure is followed by the file name.  The length of the
     name is given in the namlen field.  If the length of the name is
     odd, the name is followed by a null byte.  The name and optional
     null byte are followed by XCOFFARFMAG, which is not included in
     namlen.  The contents of the archive member follow; the number of
     bytes is given in the size field.  */
};

/* The known values of f_magic in an XCOFF file header.  */
#define U802WRMAGIC 0730	/* Writeable text segments.  */
#define U802ROMAGIC 0735	/* Readonly sharable text segments.  */
#define U802TOCMAGIC 0737	/* Readonly text segments and TOC.  */
#define U803XTOCMAGIC 0757	/* Aix 4.3 64-bit XCOFF.  */
#define U64_TOCMAGIC 0767	/* AIX 5+ 64-bit XCOFF.  */

/* The number of bytes in an XCOFF file's f_magic field.  */
#define F_MAGIC_SIZE 2

/* The format of a 32-bit XCOFF file header.  */
struct external_filehdr_32
{
  /* The magic number.  */
  char f_magic[F_MAGIC_SIZE];

  /* The number of sections.  */
  char f_nscns[2];

  /* Time & date stamp.  */
  char f_timdat[4];

  /* The offset of the symbol table from the start of the file.  */
  char f_symptr[4];

  /* The number of entries in the symbol table.  */
  char f_nsyms[4];

  /* The size of the auxiliary header.  */
  char f_opthdr[2];

  /* Flags.  */
  char f_flags[2];
};

/* The format of a 64-bit XCOFF file header.  */
struct external_filehdr_64
{
  /* The magic number.  */
  char f_magic[F_MAGIC_SIZE];

  /* The number of sections.  */
  char f_nscns[2];

  /* Time & date stamp.  */
  char f_timdat[4];

  /* The offset of the symbol table from the start of the file.  */
  char f_symptr[8];

  /* The size of the auxiliary header.  */
  char f_opthdr[2];

  /* Flags.  */
  char f_flags[2];

  /* The number of entries in the symbol table.  */
  char f_nsyms[4];
};

/* An internal representation of the XCOFF file header.  */
struct internal_filehdr
{
  unsigned short f_magic;
  unsigned short f_nscns;
  long f_timdat;
  bfd_vma f_symptr;
  long f_nsyms;
  unsigned short f_opthdr;
  unsigned short f_flags;
};

/* Symbol classes have their names in the debug section if this flag
   is set.  */
#define DBXMASK 0x80

/* The format of an XCOFF symbol-table entry.  */
struct external_syment
{
  union {
    struct {
      union {
	/* The name of the symbol.  There is an implicit null character
	   after the end of the array.  */
	char n_name[8];
	struct {
	  /* If n_zeroes is zero, n_offset is the offset the name from
	     the start of the string table.  */
	  char n_zeroes[4];
	  char n_offset[4];
	} u;
      } u;

      /* The symbol's value.  */
      char n_value[4];
    } xcoff32;
    struct {
      /* The symbol's value.  */
      char n_value[8];

      /* The offset of the symbol from the start of the string table.  */
      char n_offset[4];
    } xcoff64;
  } u;

  /* The number of the section to which this symbol belongs.  */
  char n_scnum[2];

  /* The type of symbol.  (It can be interpreted as an n_lang
     and an n_cpu byte, but we don't care about that here.)  */
  char n_type[2];

  /* The class of symbol (a C_* value).  */
  char n_sclass[1];

  /* The number of auxiliary symbols attached to this entry.  */
  char n_numaux[1];
};

/* Definitions required by collect2.  */
#define C_EXT 2

#define F_SHROBJ    0x2000
#define F_LOADONLY  0x4000

#define N_UNDEF ((short) 0)
#define N_TMASK 060
#define N_BTSHFT 4

#define DT_NON 0
#define DT_FCN 2

/* -------------------------------------------------------------------------
   Local code.
   ------------------------------------------------------------------------- */

/* An internal representation of an XCOFF symbol-table entry,
   which is associated with the API-defined SYMENT type.  */
struct internal_syment
{
  char n_name[9];
  unsigned int n_zeroes;
  bfd_vma n_offset;
  bfd_vma n_value;
  short n_scnum;
  unsigned short n_flags;
  unsigned short n_type;
  unsigned char n_sclass;
  unsigned char n_numaux;
};
typedef struct internal_syment SYMENT;

/* The internal representation of the API-defined LDFILE type.  */
struct internal_ldfile
{
  /* The file handle for the associated file, or -1 if it hasn't been
     opened yet.  */
  int fd;

  /* The start of the current XCOFF object, if one has been mapped
     into memory.  Null otherwise.  */
  char *object;

  /* The offset of OBJECT from the start of the containing page.  */
  size_t page_offset;

  /* The size of the file pointed to by OBJECT.  Valid iff OFFSET
     is nonnull.  */
  size_t object_size;

  /* The offset of the next member in an archive after OBJECT,
     or -1 if this isn't an archive.  Valid iff OFFSET is nonnull.  */
  off_t next_member;

  /* The parsed version of the XCOFF file header.  */
  struct internal_filehdr filehdr;
};
typedef struct internal_ldfile LDFILE;

/* The API allows the file header to be directly accessed via this macro.  */
#define HEADER(FILE) ((FILE)->filehdr)

/* API-defined return codes.  SUCCESS must be > 0 and FAILURE must be <= 0.  */
#define SUCCESS 1
#define FAILURE 0

/* API-defined functions.  */
extern LDFILE *ldopen (char *, LDFILE *);
extern char *ldgetname (LDFILE *, SYMENT *);
extern int ldtbread (LDFILE *, long, SYMENT *);
extern int ldclose (LDFILE *);

#endif

#endif /* GCC_COLLECT2_AIX_H */
