190075Sobrien/* Definitions for the data structures and codes used in VMS debugging.
290075Sobrien   Copyright (C) 2001 Free Software Foundation, Inc.
390075Sobrien
490075SobrienThis file is part of GCC.
590075Sobrien
690075SobrienGCC is free software; you can redistribute it and/or modify it under
790075Sobrienthe terms of the GNU General Public License as published by the Free
890075SobrienSoftware Foundation; either version 2, or (at your option) any later
990075Sobrienversion.
1090075Sobrien
1190075SobrienGCC is distributed in the hope that it will be useful, but WITHOUT ANY
1290075SobrienWARRANTY; without even the implied warranty of MERCHANTABILITY or
1390075SobrienFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1490075Sobrienfor more details.
1590075Sobrien
1690075SobrienYou should have received a copy of the GNU General Public License
1790075Sobrienalong with GCC; see the file COPYING.  If not, write to the Free
18169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
19169689Skan02110-1301, USA.  */
2090075Sobrien
2190075Sobrien#ifndef GCC_VMSDBG_H
2290075Sobrien#define GCC_VMSDBG_H 1
2390075Sobrien
2490075Sobrien/*  We define types and constants used in VMS Debug output.  Note that the
2590075Sobrien    structs only approximate the output that is written.  We write the output
2690075Sobrien    explicitly, field by field.  This output would only agree with the
2790075Sobrien    structs in this file if no padding were done.  The sizes after each
2890075Sobrien    struct are the size actually written, which is usually smaller than the
2990075Sobrien    size of the struct.  */
3090075Sobrien
3190075Sobrien/* Header type codes.  */
3290075Sobrientypedef enum _DST_TYPE {DST_K_SOURCE = 155, DST_K_PROLOG = 162,
3390075Sobrien			DST_K_BLKBEG = 176, DST_K_BLKEND = 177,
3490075Sobrien			DST_K_LINE_NUM = 185, DST_K_MODBEG = 188,
3590075Sobrien			DST_K_MODEND = 189, DST_K_RTNBEG = 190,
3690075Sobrien			DST_K_RTNEND = 191} DST_DTYPE;
3790075Sobrien
3890075Sobrien/* Header.  */
3990075Sobrien
4090075Sobrientypedef struct _DST_HEADER
4190075Sobrien{
4290075Sobrien  union
4390075Sobrien    {
4490075Sobrien      unsigned short int dst_w_length;
4590075Sobrien      unsigned short int dst_x_length;
4690075Sobrien    } dst__header_length;
4790075Sobrien  union
4890075Sobrien    {
4990075Sobrien      ENUM_BITFIELD (_DST_TYPE) dst_w_type : 16;
5090075Sobrien      ENUM_BITFIELD (_DST_TYPE) dst_x_type : 16;
5190075Sobrien    } dst__header_type;
5290075Sobrien} DST_HEADER;
5390075Sobrien#define DST_K_DST_HEADER_SIZE sizeof 4
5490075Sobrien
5590075Sobrien/* Language type codes.  */
5690075Sobrientypedef enum _DST_LANGUAGE {DST_K_FORTRAN = 1, DST_K_C = 7, DST_K_ADA = 9,
5790075Sobrien			    DST_K_UNKNOWN = 10, DST_K_CXX = 15} DST_LANGUAGE;
5890075Sobrien
5990075Sobrien/* Module header (a module is the result of a single compilation).  */
6090075Sobrien
6190075Sobrientypedef struct _DST_MODULE_BEGIN
6290075Sobrien{
6390075Sobrien  DST_HEADER dst_a_modbeg_header;
6490075Sobrien  struct
6590075Sobrien    {
6690075Sobrien      unsigned dst_v_modbeg_hide : 1;
6790075Sobrien      unsigned dst_v_modbeg_version : 1;
6890075Sobrien      unsigned dst_v_modbeg_unused : 6;
6990075Sobrien    } dst_b_modbeg_flags;
7090075Sobrien  unsigned char dst_b_modbeg_unused;
7190075Sobrien  DST_LANGUAGE dst_l_modbeg_language;
7290075Sobrien  unsigned short int dst_w_version_major;
7390075Sobrien  unsigned short int dst_w_version_minor;
7490075Sobrien  unsigned char dst_b_modbeg_name;
7590075Sobrien} DST_MODULE_BEGIN;
7690075Sobrien#define DST_K_MODBEG_SIZE 15
7790075Sobrien
7890075Sobrien/* Module trailer.  */
7990075Sobrien
8090075Sobrientypedef struct _DST_MB_TRLR
8190075Sobrien{
8290075Sobrien  unsigned char dst_b_compiler;
8390075Sobrien} DST_MB_TRLR;
8490075Sobrien
8590075Sobrien#define DST_K_MB_TRLR_SIZE 1
8690075Sobrien
8790075Sobrien#define DST_K_VERSION_MAJOR 1
8890075Sobrien#define DST_K_VERSION_MINOR 13
8990075Sobrien
9090075Sobrientypedef struct _DST_MODULE_END
9190075Sobrien{
9290075Sobrien  DST_HEADER dst_a_modend_header;
9390075Sobrien} DST_MODULE_END;
9490075Sobrien#define DST_K_MODEND_SIZE sizeof 4
9590075Sobrien
9690075Sobrien/* Routine header.  */
9790075Sobrien
9890075Sobrientypedef struct _DST_ROUTINE_BEGIN
9990075Sobrien{
10090075Sobrien  DST_HEADER dst_a_rtnbeg_header;
10190075Sobrien  struct
10290075Sobrien    {
10390075Sobrien      unsigned dst_v_rtnbeg_unused : 4;
10490075Sobrien      unsigned dst_v_rtnbeg_unalloc : 1;
10590075Sobrien      unsigned dst_v_rtnbeg_prototype : 1;
10690075Sobrien      unsigned dst_v_rtnbeg_inlined : 1;
10790075Sobrien      unsigned dst_v_rtnbeg_no_call : 1;
10890075Sobrien    } dst_b_rtnbeg_flags;
10990075Sobrien  int *dst_l_rtnbeg_address;
11090075Sobrien  int *dst_l_rtnbeg_pd_address;
11190075Sobrien  unsigned char dst_b_rtnbeg_name;
11290075Sobrien} DST_ROUTINE_BEGIN;
11390075Sobrien#define DST_K_RTNBEG_SIZE 14
11490075Sobrien
11590075Sobrien/* Routine trailer */
11690075Sobrien
11790075Sobrientypedef struct _DST_ROUTINE_END
11890075Sobrien{
11990075Sobrien  DST_HEADER dst_a_rtnend_header;
12090075Sobrien  char dst_b_rtnend_unused;
12190075Sobrien  unsigned int dst_l_rtnend_size;
12290075Sobrien} DST_ROUTINE_END;
12390075Sobrien#define DST_K_RTNEND_SIZE 9
12490075Sobrien
12590075Sobrien/* Block header.  */
12690075Sobrien
12790075Sobrientypedef struct _DST_BLOCK_BEGIN
12890075Sobrien{
12990075Sobrien  DST_HEADER dst_a_blkbeg_header;
13090075Sobrien  unsigned char dst_b_blkbeg_unused;
13190075Sobrien  int *dst_l_blkbeg_address;
13290075Sobrien  unsigned char dst_b_blkbeg_name;
13390075Sobrien} DST_BLOCK_BEGIN;
13490075Sobrien#define DST_K_BLKBEG_SIZE 10
13590075Sobrien
13690075Sobrien/* Block trailer.  */
13790075Sobrien
13890075Sobrientypedef struct _DST_BLOCK_END
13990075Sobrien{
14090075Sobrien  DST_HEADER dst_a_blkend_header;
14190075Sobrien  unsigned char dst_b_blkend_unused;
14290075Sobrien  unsigned int dst_l_blkend_size;
14390075Sobrien} DST_BLOCK_END;
14490075Sobrien#define DST_K_BLKEND_SIZE 9
14590075Sobrien
14690075Sobrien/* Line number header.  */
14790075Sobrien
14890075Sobrientypedef struct _DST_LINE_NUM_HEADER
14990075Sobrien{
15090075Sobrien  DST_HEADER dst_a_line_num_header;
15190075Sobrien} DST_LINE_NUM_HEADER;
15290075Sobrien#define DST_K_LINE_NUM_HEADER_SIZE 4
15390075Sobrien
15490075Sobrien/* PC to Line number correlation.  */
15590075Sobrien
15690075Sobrientypedef struct _DST_PCLINE_COMMANDS
15790075Sobrien{
15890075Sobrien  char dst_b_pcline_command;
15990075Sobrien  union
16090075Sobrien    {
16190075Sobrien      unsigned int dst_l_pcline_unslong;
16290075Sobrien      unsigned short int dst_w_pcline_unsword;
16390075Sobrien      unsigned char dst_b_pcline_unsbyte;
16490075Sobrien    } dst_a_pcline_access_fields;
16590075Sobrien} DST_PCLINE_COMMANDS;
16690075Sobrien
16790075Sobrien/* PC and Line number correlation codes.  */
16890075Sobrien
16990075Sobrien#define DST_K_PCLINE_COMMANDS_SIZE 5
17090075Sobrien#define DST_K_PCLINE_COMMANDS_SIZE_MIN 2
17190075Sobrien#define DST_K_PCLINE_COMMANDS_SIZE_MAX 5
17290075Sobrien#define DST_K_DELTA_PC_LOW -128
17390075Sobrien#define DST_K_DELTA_PC_HIGH 0
17490075Sobrien#define DST_K_DELTA_PC_W 1
17590075Sobrien#define DST_K_INCR_LINUM 2
17690075Sobrien#define DST_K_INCR_LINUM_W 3
17790075Sobrien#define DST_K_SET_LINUM 9
17890075Sobrien#define DST_K_SET_ABS_PC 16
17990075Sobrien#define DST_K_DELTA_PC_L 17
18090075Sobrien#define DST_K_INCR_LINUM_L 18
18190075Sobrien#define DST_K_SET_LINUM_B 19
18290075Sobrien#define DST_K_SET_LINUM_L 20
18390075Sobrien
18490075Sobrien/* Source file correlation header.  */
18590075Sobrien
18690075Sobrientypedef struct _DST_SOURCE_CORR
18790075Sobrien{
18890075Sobrien  DST_HEADER dst_a_source_corr_header;
18990075Sobrien} DST_SOURCE_CORR;
19090075Sobrien#define DST_K_SOURCE_CORR_HEADER_SIZE 4
19190075Sobrien
19290075Sobrien/* Source file correlation codes.  */
193117395Skan
19490075Sobrien#define DST_K_SRC_DECLFILE 1
19590075Sobrien#define DST_K_SRC_SETFILE 2
19690075Sobrien#define DST_K_SRC_SETREC_L 3
19790075Sobrien#define DST_K_SRC_SETREC_W 4
19890075Sobrien#define DST_K_SRC_SETLNUM_L 5
19990075Sobrien#define DST_K_SRC_SETLNUM_W 6
20090075Sobrien#define DST_K_SRC_INCRLNUM_B 7
20190075Sobrien#define DST_K_SRC_DEFLINES_W 10
20290075Sobrien#define DST_K_SRC_DEFLINES_B 11
20390075Sobrien#define DST_K_SRC_FORMFEED 16
20490075Sobrien#define DST_K_SRC_MIN_CMD 1
20590075Sobrien#define DST_K_SRC_MAX_CMD 16
20690075Sobrien
20790075Sobrien/* Source file header.  */
20890075Sobrien
20990075Sobrientypedef struct _DST_SRC_COMMAND
21090075Sobrien{
21190075Sobrien  unsigned char dst_b_src_command;
21290075Sobrien  union
21390075Sobrien    {
21490075Sobrien      struct
21590075Sobrien	{
21690075Sobrien	  unsigned char dst_b_src_df_length;
21790075Sobrien	  unsigned char dst_b_src_df_flags;
21890075Sobrien	  unsigned short int dst_w_src_df_fileid;
21990075Sobrien#ifdef HAVE_LONG_LONG
22090075Sobrien	  long long dst_q_src_df_rms_cdt;
22190075Sobrien#else
22290075Sobrien#ifdef HAVE___INT64
22390075Sobrien	  __int64 dst_q_src_df_rms_cdt;
22490075Sobrien#endif
22590075Sobrien#endif
22690075Sobrien	  unsigned int dst_l_src_df_rms_ebk;
22790075Sobrien	  unsigned short int dst_w_src_df_rms_ffb;
22890075Sobrien	  unsigned char dst_b_src_df_rms_rfo;
22990075Sobrien	  unsigned char dst_b_src_df_filename;
23090075Sobrien	} dst_a_src_decl_src;
23190075Sobrien      unsigned int dst_l_src_unslong;
23290075Sobrien      unsigned short int dst_w_src_unsword;
23390075Sobrien      unsigned char dst_b_src_unsbyte;
23490075Sobrien    } dst_a_src_cmd_fields;
23590075Sobrien} DST_SRC_COMMAND;
23690075Sobrien#define DST_K_SRC_COMMAND_SIZE 21
23790075Sobrien
23890075Sobrien/* Source file trailer.  */
23990075Sobrien
24090075Sobrientypedef struct _DST_SRC_CMDTRLR
24190075Sobrien{
24290075Sobrien  unsigned char dst_b_src_df_libmodname;
24390075Sobrien} DST_SRC_CMDTRLR;
24490075Sobrien#define DST_K_SRC_CMDTRLR_SIZE 1
24590075Sobrien
24690075Sobrien/* Prolog header.  */
24790075Sobrien
24890075Sobrientypedef struct _DST_PROLOG
24990075Sobrien{
25090075Sobrien  DST_HEADER dst_a_prolog_header;
25190075Sobrien  unsigned int dst_l_prolog_bkpt_addr;
25290075Sobrien} DST_PROLOG;
25390075Sobrien#define DST_K_PROLOG_SIZE 8
254117395Skan
25590075Sobrien#endif /* GCC_VMSDBG_H */
256