/* Alpha VMS external format of Debug Symbol Table.

   Copyright (C) 2010-2016 Free Software Foundation, Inc.
   Written 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 _VMS_DST_H
#define _VMS_DST_H

/* Also available in vms freeware v5.0 debug/alpha_dstrecrds.sdl.  */

struct vms_dst_header
{
  /* Length.  */
  unsigned char length[2];

  /* Type.  */
  unsigned char type[2];
};

/* Beginning of module.  */
#define DST__K_MODBEG 188

/* Some well known languages.  */
#define DST__K_MACRO	0
#define DST__K_BLISS	2
#define DST__K_C	7
#define DST__K_ADA	9
#define DST__K_CXX	15

struct vms_dst_modbeg
{
  unsigned char flags;
  unsigned char unused;
  unsigned char language[4];
  unsigned char major[2];
  unsigned char minor[2];
  /* Module name ASCIC.  */
  /* Ident name ASCIC.  */
};

/* Routine begin.  */
#define DST__K_RTNBEG 190

struct vms_dst_rtnbeg
{
  unsigned char flags;

  /* Address of the code.  */
  unsigned char address[4];

  /* Procedure descriptor address.  */
  unsigned char pd_address[4];

  /* Name: ASCIC  */
};

/* Line number.  */
#define DST__K_LINE_NUM 185

struct vms_dst_pcline
{
  unsigned char pcline_command;
  unsigned char field[4];
};

#define DST__K_DELTA_PC_W	1
#define DST__K_INCR_LINUM	2
#define DST__K_INCR_LINUM_W	3
#define DST__K_SET_LINUM_INCR	4
#define DST__K_SET_LINUM_INCR_W	5
#define DST__K_RESET_LINUM_INCR	6
#define DST__K_BEG_STMT_MODE	7
#define DST__K_END_STMT_MODE	8
#define DST__K_SET_LINUM	9
#define DST__K_SET_PC		10
#define DST__K_SET_PC_W		11
#define DST__K_SET_PC_L		12
#define DST__K_SET_STMTNUM	13
#define DST__K_TERM		14
#define DST__K_TERM_W		15
#define DST__K_SET_ABS_PC	16
#define DST__K_DELTA_PC_L	17
#define DST__K_INCR_LINUM_L	18
#define DST__K_SET_LINUM_B	19
#define DST__K_SET_LINUM_L	20
#define DST__K_TERM_L		21

/* Routine end.  */
#define DST__K_RTNEND 191

struct vms_dst_rtnend
{
  unsigned char unused;
  unsigned char size[4];
};

/* Prologue.  */
#define DST__K_PROLOG 162

struct vms_dst_prolog
{
  unsigned char bkpt_addr[4];
};

/* Epilog.  */
#define DST__K_EPILOG 127

struct vms_dst_epilog
{
  unsigned char flags;
  unsigned char count[4];
};

/* Module end.  */
#define DST__K_MODEND 189

/* Block begin.  */
#define DST__K_BLKBEG 176

struct vms_dst_blkbeg
{
  unsigned char unused;
  unsigned char address[4];
  /* Name ASCIC.  */
};

/* Block end.  */
#define DST__K_BLKEND 177

struct vms_dst_blkend
{
  unsigned char unused;
  unsigned char size[4];
};

/* Source correlation.  */
#define DST__K_SOURCE 155

#define DST__K_SRC_DECLFILE    1
#define DST__K_SRC_SETFILE     2
#define DST__K_SRC_SETREC_L    3
#define DST__K_SRC_SETREC_W    4
#define DST__K_SRC_SETLNUM_L   5
#define DST__K_SRC_SETLNUM_W   6
#define DST__K_SRC_INCRLNUM_B  7
#define DST__K_SRC_DEFLINES_W 10
#define DST__K_SRC_DEFLINES_B 11
#define DST__K_SRC_FORMFEED   16

struct vms_dst_src_decl_src
{
  unsigned char length;
  unsigned char flags;
  unsigned char fileid[2];
  unsigned char rms_cdt[8];
  unsigned char rms_ebk[4];
  unsigned char rms_ffb[2];
  unsigned char rms_rfo;
  /* Filename ASCIC.  */
};

/* Record begin.  */
#define DST__K_RECBEG 171

struct vms_dst_recbeg
{
  unsigned char vflags;
  unsigned char value[4];
  /* Filename ASCIC.  */
};

/* Record end.  */
#define DST__K_RECEND 172

/* Enumeration begin.  */
#define DST__K_ENUMBEG 165

/* Enumeration element.  */
#define DST__K_ENUMELT 164

/* Enumeration end.  */
#define DST__K_ENUMEND 166

/* Separate type specification.  */
#define DST__K_SEPTYP 163

/* Type specification.  */
#define DST__K_TYPSPEC 175

#define DST__K_TS_ATOM          1	/* Atomic.  */
#define DST__K_TS_DSC           2	/* VMS Standard descriptor.  */
#define DST__K_TS_IND           3	/* Indirect.  */
#define DST__K_TS_TPTR          4	/* Typed pointer.  */
#define DST__K_TS_PTR           5	/* Pointer.  */
#define DST__K_TS_PIC           6	/* Pictured.  */
#define DST__K_TS_ARRAY         7
#define DST__K_TS_SET           8
#define DST__K_TS_SUBRANGE      9	/* Subrange.  */
#define DST__K_TS_ADA_DSC      10	/* Ada descriptor.  */
#define DST__K_TS_FILE         11
#define DST__K_TS_AREA         12	/* Area (PL/I).  */
#define DST__K_TS_OFFSET       13	/* Offset (PL/I).  */
#define DST__K_TS_NOV_LENG     14	/* Novel Length.  */
#define DST__K_TS_IND_TSPEC    15	/* Internal to debugger.  */
#define DST__K_TS_SELF_REL_LABEL 16	/* Self-relative label (PL/I).  */
#define DST__K_TS_RFA          17	/* (Basic).  */
#define DST__K_TS_TASK         18	/* (Ada).  */
#define DST__K_TS_ADA_ARRAY    19
#define DST__K_TS_XMOD_IND     20	/* Cross-module indirect type spec.  */
#define DST__K_TS_CONSTRAINED  21	/* (Ada).  */
#define DST__K_TS_MAYBE_CONSTR 22	/* Might-be-constrained (Ada).  */
#define DST__K_TS_DYN_LOV_LENG 23
#define DST__K_TS_TPTR_D       24	/* Typed pointer to descriptor.  */
#define DST__K_TS_SCAN_TREE    25
#define DST__K_TS_SCAN_TREEPTR 26
#define DST__K_TS_INCOMPLETE   27
#define DST__K_TS_BLISS_BLOCK  28
#define DST__K_TS_TPTR_64      29
#define DST__K_TS_PTR_64       30
#define DST__K_TS_REF          31	/* C++ referenced type.  */
#define DST__K_TS_REF_64       32

/* Value Specification.  */
#define DST__K_VFLAGS_NOVAL	128 /* No value.  */
#define DST__K_VFLAGS_NOTACTIVE	248 /* Not active at current PC.  */
#define DST__K_VFLAGS_UNALLOC	249 /* Not allocated.  */
#define DST__K_VFLAGS_DSC	250 /* Descriptor format.  */
#define DST__K_VFLAGS_TVS	251 /* Trailing value spec.  */
#define DST__K_VS_FOLLOWS	253 /* Value specification follow.  */
#define DST__K_VFLAGS_BITOFFS	255 /* Value is a bit offset.  */

/* Vflags fields.  */
#define DST__K_VALKIND_MASK 0x03
#define DST__K_INDIR        0x04
#define DST__K_DISP         0x08
#define DST__K_REGNUM_MASK  0xf0
#define DST__K_REGNUM_SHIFT  4

#define DST__K_VALKIND_LITERAL 0
#define DST__K_VALKIND_ADDR    1
#define DST__K_VALKIND_DESC    2
#define DST__K_VALKIND_REG     3

/* Label.  */
#define DST__K_LABEL 187

struct vms_dst_label
{
  unsigned char unused;

  unsigned char value[4];
  unsigned char name[1];
};

/* Discontiguous range.  */
#define DST__K_DIS_RANGE 118
#endif /* _VMS_DST_H */
