1 /* Definitions for the data structures and codes used in VMS debugging. 2 Copyright (C) 2001, 2007 Free Software Foundation, Inc. 3 4 This file is part of GCC. 5 6 GCC is free software; you can redistribute it and/or modify it under 7 the terms of the GNU General Public License as published by the Free 8 Software Foundation; either version 3, or (at your option) any later 9 version. 10 11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 12 WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GCC; see the file COPYING3. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20 #ifndef GCC_VMSDBG_H 21 #define GCC_VMSDBG_H 1 22 23 /* We define types and constants used in VMS Debug output. Note that the 24 structs only approximate the output that is written. We write the output 25 explicitly, field by field. This output would only agree with the 26 structs in this file if no padding were done. The sizes after each 27 struct are the size actually written, which is usually smaller than the 28 size of the struct. */ 29 30 /* Header type codes. */ 31 typedef enum _DST_TYPE {DST_K_SOURCE = 155, DST_K_PROLOG = 162, 32 DST_K_BLKBEG = 176, DST_K_BLKEND = 177, 33 DST_K_LINE_NUM = 185, DST_K_MODBEG = 188, 34 DST_K_MODEND = 189, DST_K_RTNBEG = 190, 35 DST_K_RTNEND = 191} DST_DTYPE; 36 37 /* Header. */ 38 39 typedef struct _DST_HEADER 40 { 41 union 42 { 43 unsigned short int dst_w_length; 44 unsigned short int dst_x_length; 45 } dst__header_length; 46 union 47 { 48 ENUM_BITFIELD (_DST_TYPE) dst_w_type : 16; 49 ENUM_BITFIELD (_DST_TYPE) dst_x_type : 16; 50 } dst__header_type; 51 } DST_HEADER; 52 #define DST_K_DST_HEADER_SIZE sizeof 4 53 54 /* Language type codes. */ 55 typedef enum _DST_LANGUAGE {DST_K_FORTRAN = 1, DST_K_C = 7, DST_K_ADA = 9, 56 DST_K_UNKNOWN = 10, DST_K_CXX = 15} DST_LANGUAGE; 57 58 /* Module header (a module is the result of a single compilation). */ 59 60 typedef struct _DST_MODULE_BEGIN 61 { 62 DST_HEADER dst_a_modbeg_header; 63 struct 64 { 65 unsigned dst_v_modbeg_hide : 1; 66 unsigned dst_v_modbeg_version : 1; 67 unsigned dst_v_modbeg_unused : 6; 68 } dst_b_modbeg_flags; 69 unsigned char dst_b_modbeg_unused; 70 DST_LANGUAGE dst_l_modbeg_language; 71 unsigned short int dst_w_version_major; 72 unsigned short int dst_w_version_minor; 73 unsigned char dst_b_modbeg_name; 74 } DST_MODULE_BEGIN; 75 #define DST_K_MODBEG_SIZE 15 76 77 /* Module trailer. */ 78 79 typedef struct _DST_MB_TRLR 80 { 81 unsigned char dst_b_compiler; 82 } DST_MB_TRLR; 83 84 #define DST_K_MB_TRLR_SIZE 1 85 86 #define DST_K_VERSION_MAJOR 1 87 #define DST_K_VERSION_MINOR 13 88 89 typedef struct _DST_MODULE_END 90 { 91 DST_HEADER dst_a_modend_header; 92 } DST_MODULE_END; 93 #define DST_K_MODEND_SIZE sizeof 4 94 95 /* Routine header. */ 96 97 typedef struct _DST_ROUTINE_BEGIN 98 { 99 DST_HEADER dst_a_rtnbeg_header; 100 struct 101 { 102 unsigned dst_v_rtnbeg_unused : 4; 103 unsigned dst_v_rtnbeg_unalloc : 1; 104 unsigned dst_v_rtnbeg_prototype : 1; 105 unsigned dst_v_rtnbeg_inlined : 1; 106 unsigned dst_v_rtnbeg_no_call : 1; 107 } dst_b_rtnbeg_flags; 108 int *dst_l_rtnbeg_address; 109 int *dst_l_rtnbeg_pd_address; 110 unsigned char dst_b_rtnbeg_name; 111 } DST_ROUTINE_BEGIN; 112 #define DST_K_RTNBEG_SIZE 14 113 114 /* Routine trailer */ 115 116 typedef struct _DST_ROUTINE_END 117 { 118 DST_HEADER dst_a_rtnend_header; 119 char dst_b_rtnend_unused; 120 unsigned int dst_l_rtnend_size; 121 } DST_ROUTINE_END; 122 #define DST_K_RTNEND_SIZE 9 123 124 /* Block header. */ 125 126 typedef struct _DST_BLOCK_BEGIN 127 { 128 DST_HEADER dst_a_blkbeg_header; 129 unsigned char dst_b_blkbeg_unused; 130 int *dst_l_blkbeg_address; 131 unsigned char dst_b_blkbeg_name; 132 } DST_BLOCK_BEGIN; 133 #define DST_K_BLKBEG_SIZE 10 134 135 /* Block trailer. */ 136 137 typedef struct _DST_BLOCK_END 138 { 139 DST_HEADER dst_a_blkend_header; 140 unsigned char dst_b_blkend_unused; 141 unsigned int dst_l_blkend_size; 142 } DST_BLOCK_END; 143 #define DST_K_BLKEND_SIZE 9 144 145 /* Line number header. */ 146 147 typedef struct _DST_LINE_NUM_HEADER 148 { 149 DST_HEADER dst_a_line_num_header; 150 } DST_LINE_NUM_HEADER; 151 #define DST_K_LINE_NUM_HEADER_SIZE 4 152 153 /* PC to Line number correlation. */ 154 155 typedef struct _DST_PCLINE_COMMANDS 156 { 157 char dst_b_pcline_command; 158 union 159 { 160 unsigned int dst_l_pcline_unslong; 161 unsigned short int dst_w_pcline_unsword; 162 unsigned char dst_b_pcline_unsbyte; 163 } dst_a_pcline_access_fields; 164 } DST_PCLINE_COMMANDS; 165 166 /* PC and Line number correlation codes. */ 167 168 #define DST_K_PCLINE_COMMANDS_SIZE 5 169 #define DST_K_PCLINE_COMMANDS_SIZE_MIN 2 170 #define DST_K_PCLINE_COMMANDS_SIZE_MAX 5 171 #define DST_K_DELTA_PC_LOW -128 172 #define DST_K_DELTA_PC_HIGH 0 173 #define DST_K_DELTA_PC_W 1 174 #define DST_K_INCR_LINUM 2 175 #define DST_K_INCR_LINUM_W 3 176 #define DST_K_SET_LINUM 9 177 #define DST_K_SET_ABS_PC 16 178 #define DST_K_DELTA_PC_L 17 179 #define DST_K_INCR_LINUM_L 18 180 #define DST_K_SET_LINUM_B 19 181 #define DST_K_SET_LINUM_L 20 182 183 /* Source file correlation header. */ 184 185 typedef struct _DST_SOURCE_CORR 186 { 187 DST_HEADER dst_a_source_corr_header; 188 } DST_SOURCE_CORR; 189 #define DST_K_SOURCE_CORR_HEADER_SIZE 4 190 191 /* Source file correlation codes. */ 192 193 #define DST_K_SRC_DECLFILE 1 194 #define DST_K_SRC_SETFILE 2 195 #define DST_K_SRC_SETREC_L 3 196 #define DST_K_SRC_SETREC_W 4 197 #define DST_K_SRC_SETLNUM_L 5 198 #define DST_K_SRC_SETLNUM_W 6 199 #define DST_K_SRC_INCRLNUM_B 7 200 #define DST_K_SRC_DEFLINES_W 10 201 #define DST_K_SRC_DEFLINES_B 11 202 #define DST_K_SRC_FORMFEED 16 203 #define DST_K_SRC_MIN_CMD 1 204 #define DST_K_SRC_MAX_CMD 16 205 206 /* Source file header. */ 207 208 typedef struct _DST_SRC_COMMAND 209 { 210 unsigned char dst_b_src_command; 211 union 212 { 213 struct 214 { 215 unsigned char dst_b_src_df_length; 216 unsigned char dst_b_src_df_flags; 217 unsigned short int dst_w_src_df_fileid; 218 #ifdef HAVE_LONG_LONG 219 long long dst_q_src_df_rms_cdt; 220 #else 221 #ifdef HAVE___INT64 222 __int64 dst_q_src_df_rms_cdt; 223 #endif 224 #endif 225 unsigned int dst_l_src_df_rms_ebk; 226 unsigned short int dst_w_src_df_rms_ffb; 227 unsigned char dst_b_src_df_rms_rfo; 228 unsigned char dst_b_src_df_filename; 229 } dst_a_src_decl_src; 230 unsigned int dst_l_src_unslong; 231 unsigned short int dst_w_src_unsword; 232 unsigned char dst_b_src_unsbyte; 233 } dst_a_src_cmd_fields; 234 } DST_SRC_COMMAND; 235 #define DST_K_SRC_COMMAND_SIZE 21 236 237 /* Source file trailer. */ 238 239 typedef struct _DST_SRC_CMDTRLR 240 { 241 unsigned char dst_b_src_df_libmodname; 242 } DST_SRC_CMDTRLR; 243 #define DST_K_SRC_CMDTRLR_SIZE 1 244 245 /* Prolog header. */ 246 247 typedef struct _DST_PROLOG 248 { 249 DST_HEADER dst_a_prolog_header; 250 unsigned int dst_l_prolog_bkpt_addr; 251 } DST_PROLOG; 252 #define DST_K_PROLOG_SIZE 8 253 254 #endif /* GCC_VMSDBG_H */ 255