From 5f98259ade3fbc7d315a168294e7f8751ac3bd04 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Wed, 5 Dec 2001 12:36:48 +0000 Subject: [PATCH] vmsdbg.h, [...]: Add documentation and minor cleanups. * vmsdbg.h, vmsdbgout.c: Add documentation and minor cleanups. * doc/invoke.texi: Add -gvms. * doc/passes.texi: Add mention of vmsdbgout.c. * doc/tm.texi: Document VMS debugging output. Co-Authored-By: Douglas B Rupp From-SVN: r47668 --- gcc/ChangeLog | 8 ++ gcc/doc/invoke.texi | 12 ++- gcc/doc/passes.texi | 5 +- gcc/doc/tm.texi | 26 ++++- gcc/vmsdbg.h | 248 +++++++++++++++++++++++++++++--------------- gcc/vmsdbgout.c | 208 ++++++++++++++++++++++++------------- 6 files changed, 344 insertions(+), 163 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 092413a3da3..dc6a8bedd9b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Wed Dec 5 07:27:42 2001 Richard Kenner + Douglas B. Rupp + + * vmsdbg.h, vmsdbgout.c: Add documentation and minor cleanups. + * doc/invoke.texi: Add -gvms. + * doc/passes.texi: Add mention of vmsdbgout.c. + * doc/tm.texi: Document VMS debugging output. + Wed Dec 5 06:26:27 2001 Richard Kenner * function.h (tree, rtx): Remove no-longer-needed definitions. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f1e3ce4d8ed..0bb76df305c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -248,7 +248,7 @@ in the following sections. -fmem-report -fpretend-float @gol -fprofile-arcs -ftest-coverage -ftime-report @gol -g -g@var{level} -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 @gol --ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ @gol +-ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ @gol -p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol -print-multi-directory -print-multi-lib @gol -print-prog-name=@var{program} -print-search-dirs -Q @gol @@ -2608,8 +2608,8 @@ makes debugging work better in GDB but will probably make other debuggers crash or refuse to read the program. If you want to control for certain whether to generate the extra information, use @option{-gstabs+}, @option{-gstabs}, -@option{-gxcoff+}, @option{-gxcoff}, @option{-gdwarf-1+}, or @option{-gdwarf-1} -(see below). +@option{-gxcoff+}, @option{-gxcoff}, @option{-gdwarf-1+}, @option{-gdwarf-1}, +or @option{-gvms} (see below). Unlike most other C compilers, GCC allows you to use @option{-g} with @option{-O}. The shortcuts taken by optimized code may occasionally @@ -2684,6 +2684,11 @@ crash or refuse to read the program. Produce debugging information in DWARF version 2 format (if that is supported). This is the format used by DBX on IRIX 6. +@item -gvms +@opindex gvms +Produce debugging information in VMS debug format (if that is +supported). This is the format used by DEBUG on VMS systems. + @item -g@var{level} @itemx -ggdb@var{level} @itemx -gstabs@var{level} @@ -2691,6 +2696,7 @@ supported). This is the format used by DBX on IRIX 6. @itemx -gxcoff@var{level} @itemx -gdwarf@var{level} @itemx -gdwarf-2@var{level} +@itemx -gvms@var{level} Request debugging information and also use @var{level} to specify how much information. The default level is 2. diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi index 4b5c7d77b87..771734139ac 100644 --- a/gcc/doc/passes.texi +++ b/gcc/doc/passes.texi @@ -600,8 +600,9 @@ Debugging information output. This is run after final because it must output the stack slot offsets for pseudo registers that did not get hard registers. Source files are @file{dbxout.c} for DBX symbol table format, @file{sdbout.c} for SDB symbol table format, @file{dwarfout.c} -for DWARF symbol table format, and the files @file{dwarf2out.c} and -@file{dwarf2asm.c} for DWARF2 symbol table format. +for DWARF symbol table format, files @file{dwarf2out.c} and +@file{dwarf2asm.c} for DWARF2 symbol table format, and @file{vmsdbgout.c} +for VMS debug symbol table format. @end itemize Some additional files are used by all or many passes: diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index ad26c8ad08c..4c3da22b1b6 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -7367,6 +7367,7 @@ This describes how to specify debugging information. * DBX Hooks:: Hook macros for varying DBX format. * File Names and DBX:: Macros controlling output of file names in DBX format. * SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. +* VMS Debug:: Macros for VMS debug format. @end menu @node All Debuggers @@ -7417,8 +7418,8 @@ A C expression that returns the type of debugging output GCC should produce when the user specifies just @option{-g}. Define this if you have arranged for GCC to support more than one format of debugging output. Currently, the allowable values are @code{DBX_DEBUG}, -@code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, and -@code{XCOFF_DEBUG}. +@code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, +@code{XCOFF_DEBUG}, @code{VMS_DEBUG}, and @code{VMS_AND_DWARF2_DEBUG}. When the user specifies @option{-ggdb}, GCC normally also uses the value of this macro to select the debugging output format, but with two @@ -7429,7 +7430,8 @@ defined, GCC uses @code{DBX_DEBUG}. The value of this macro only affects the default debugging output; the user can always get a specific type of output by using @option{-gstabs}, -@option{-gcoff}, @option{-gdwarf-1}, @option{-gdwarf-2}, or @option{-gxcoff}. +@option{-gcoff}, @option{-gdwarf-1}, @option{-gdwarf-2}, @option{-gxcoff}, +or @option{-gvms}. @end table @node DBX Options @@ -7819,6 +7821,24 @@ enumeration tags that have not yet been seen to be handled. Some assemblers choke if forward tags are used, while some require it. @end table +@need 2000 +@node VMS Debug +@subsection Macros for VMS Debug Format + +@c prevent bad page break with this line +Here are macros for VMS debug format. + +@table @code +@findex VMS_DEBUGGING_INFO +@item VMS_DEBUGGING_INFO +Define this macro if GCC should produce debugging output for VMS +in response to the @option{-g} option. The default behavior for VMS +is to generate minimal debug info for a traceback in the absence of +@option{-g} unless explicitly overridden with @option{-g0}. This +behavior is controlled by @code{OPTIMIZATION_OPTIONS} and +@code{OVERRIDE_OPTIONS}. +@end table + @node Cross-compilation @section Cross Compilation and Floating Point @cindex cross compilation and floating point diff --git a/gcc/vmsdbg.h b/gcc/vmsdbg.h index 65147a6cf5d..4d48d7989ca 100644 --- a/gcc/vmsdbg.h +++ b/gcc/vmsdbg.h @@ -1,45 +1,72 @@ -/* This file contains definitions for the data structures and codes used in - VMS debugging information. */ +/* Definitions for the data structures and codes used in VMS debugging. */ + Copyright (C) 2001 Free Software Foundation, Inc. -#ifndef VMSDBG_H -#define VMSDBG_H 1 - -typedef unsigned short int DST_DTYPE; -#define DST_K_SOURCE 155 -#define DST_K_PROLOG 162 -#define DST_K_BLKBEG 176 -#define DST_K_BLKEND 177 -#define DST_K_LINE_NUM 185 -#define DST_K_MODBEG 188 -#define DST_K_MODEND 189 -#define DST_K_RTNBEG 190 -#define DST_K_RTNEND 191 - -typedef struct _DST_HEADER { - union { - unsigned short int dst_w_length; - unsigned short int dst_x_length; - } dst__header_length; - union { - DST_DTYPE dst_w_type; - DST_DTYPE dst_x_type; - } dst__header_type; +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 2, 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 COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ + +#ifndef GCC_VMSDBG_H +#define GCC_VMSDBG_H 1 + +/* We define types and constants used in VMS Debug output. Note that the + structs only approximate the output that is written. We write the output + explicitly, field by field. This output would only agree with the + structs in this file if no padding were done. The sizes after each + struct are the size actually written, which is usually smaller than the + size of the struct. */ + +/* Header type codes. */ +typedef enum _DST_TYPE {DST_K_SOURCE = 155, DST_K_PROLOG = 162, + DST_K_BLKBEG = 176, DST_K_BLKEND = 177, + DST_K_LINE_NUM = 185, DST_K_MODBEG = 188, + DST_K_MODEND = 189, DST_K_RTNBEG = 190, + DST_K_RTNEND = 191} DST_DTYPE; + +/* Header. */ + +typedef struct _DST_HEADER +{ + union + { + unsigned short int dst_w_length; + unsigned short int dst_x_length; + } dst__header_length; + union + { + ENUM_BITFIELD (_DST_DTYPE) dst_w_type : 16; + ENUM_BITFIELD (_DST_DTYPE) dst_x_type : 16; + } dst__header_type; } DST_HEADER; -#define DST_K_DST_HEADER_SIZE 4 - -typedef unsigned int DST_LANGUAGE; -#define DST_K_FORTRAN 1 -#define DST_K_C 7 -#define DST_K_ADA 9 -#define DST_K_UNKNOWN 10 -#define DST_K_CXX 15 -typedef struct _DST_MODULE_BEGIN { +#define DST_K_DST_HEADER_SIZE sizeof 4 + +/* Language type codes. */ +typedef enum _DST_LANGUAGE {DST_K_FORTRAN = 1, DST_K_C = 7, DST_K_ADA = 9, + DST_K_UNKNOWN = 10, DST_K_CXX = 15} DST_LANGUAGE; + +/* Module header (a module is the result of a single compilation). */ + +typedef struct _DST_MODULE_BEGIN +{ DST_HEADER dst_a_modbeg_header; - struct { - unsigned dst_v_modbeg_hide : 1; - unsigned dst_v_modbeg_version : 1; - unsigned dst_v_modbeg_unused : 6; - } dst_b_modbeg_flags; + struct + { + unsigned dst_v_modbeg_hide : 1; + unsigned dst_v_modbeg_version : 1; + unsigned dst_v_modbeg_unused : 6; + } dst_b_modbeg_flags; unsigned char dst_b_modbeg_unused; DST_LANGUAGE dst_l_modbeg_language; unsigned short int dst_w_version_major; @@ -47,63 +74,98 @@ typedef struct _DST_MODULE_BEGIN { unsigned char dst_b_modbeg_name; } DST_MODULE_BEGIN; #define DST_K_MODBEG_SIZE 15 - -typedef struct _DST_MB_TRLR { + +/* Module trailer. */ + +typedef struct _DST_MB_TRLR +{ unsigned char dst_b_compiler; } DST_MB_TRLR; + #define DST_K_MB_TRLR_SIZE 1 + #define DST_K_VERSION_MAJOR 1 #define DST_K_VERSION_MINOR 13 -typedef struct _DST_MODULE_END { + +typedef struct _DST_MODULE_END +{ DST_HEADER dst_a_modend_header; } DST_MODULE_END; -#define DST_K_MODEND_SIZE 4 -typedef struct _DST_ROUTINE_BEGIN { +#define DST_K_MODEND_SIZE sizeof 4 + +/* Routine header. */ + +typedef struct _DST_ROUTINE_BEGIN +{ DST_HEADER dst_a_rtnbeg_header; - struct { - unsigned dst_v_rtnbeg_unused : 4; - unsigned dst_v_rtnbeg_unalloc : 1; - unsigned dst_v_rtnbeg_prototype : 1; - unsigned dst_v_rtnbeg_inlined : 1; - unsigned dst_v_rtnbeg_no_call : 1; - } dst_b_rtnbeg_flags; + struct + { + unsigned dst_v_rtnbeg_unused : 4; + unsigned dst_v_rtnbeg_unalloc : 1; + unsigned dst_v_rtnbeg_prototype : 1; + unsigned dst_v_rtnbeg_inlined : 1; + unsigned dst_v_rtnbeg_no_call : 1; + } dst_b_rtnbeg_flags; int *dst_l_rtnbeg_address; int *dst_l_rtnbeg_pd_address; unsigned char dst_b_rtnbeg_name; } DST_ROUTINE_BEGIN; #define DST_K_RTNBEG_SIZE 14 -typedef struct _DST_ROUTINE_END { + +/* Routine trailer */ + +typedef struct _DST_ROUTINE_END +{ DST_HEADER dst_a_rtnend_header; char dst_b_rtnend_unused; unsigned int dst_l_rtnend_size; } DST_ROUTINE_END; #define DST_K_RTNEND_SIZE 9 -typedef struct _DST_BLOCK_BEGIN { + +/* Block header. */ + +typedef struct _DST_BLOCK_BEGIN +{ DST_HEADER dst_a_blkbeg_header; unsigned char dst_b_blkbeg_unused; int *dst_l_blkbeg_address; unsigned char dst_b_blkbeg_name; } DST_BLOCK_BEGIN; #define DST_K_BLKBEG_SIZE 10 -typedef struct _DST_BLOCK_END { + +/* Block trailer. */ + +typedef struct _DST_BLOCK_END +{ DST_HEADER dst_a_blkend_header; unsigned char dst_b_blkend_unused; unsigned int dst_l_blkend_size; } DST_BLOCK_END; #define DST_K_BLKEND_SIZE 9 -typedef struct _DST_LINE_NUM_HEADER { + +/* Line number header. */ + +typedef struct _DST_LINE_NUM_HEADER +{ DST_HEADER dst_a_line_num_header; } DST_LINE_NUM_HEADER; #define DST_K_LINE_NUM_HEADER_SIZE 4 -typedef struct _DST_PCLINE_COMMANDS { +/* PC to Line number correlation. */ + +typedef struct _DST_PCLINE_COMMANDS +{ char dst_b_pcline_command; - union { - unsigned int dst_l_pcline_unslong; - unsigned short int dst_w_pcline_unsword; - unsigned char dst_b_pcline_unsbyte; - } dst_a_pcline_access_fields; + union + { + unsigned int dst_l_pcline_unslong; + unsigned short int dst_w_pcline_unsword; + unsigned char dst_b_pcline_unsbyte; + } dst_a_pcline_access_fields; } DST_PCLINE_COMMANDS; + +/* PC and Line number correlation codes. */ + #define DST_K_PCLINE_COMMANDS_SIZE 5 #define DST_K_PCLINE_COMMANDS_SIZE_MIN 2 #define DST_K_PCLINE_COMMANDS_SIZE_MAX 5 @@ -118,10 +180,16 @@ typedef struct _DST_PCLINE_COMMANDS { #define DST_K_INCR_LINUM_L 18 #define DST_K_SET_LINUM_B 19 #define DST_K_SET_LINUM_L 20 -typedef struct _DST_SOURCE_CORR { + +/* Source file correlation header. */ + +typedef struct _DST_SOURCE_CORR +{ DST_HEADER dst_a_source_corr_header; } DST_SOURCE_CORR; #define DST_K_SOURCE_CORR_HEADER_SIZE 4 + +/* Source file correlation codes. */ #define DST_K_SRC_DECLFILE 1 #define DST_K_SRC_SETFILE 2 @@ -135,39 +203,51 @@ typedef struct _DST_SOURCE_CORR { #define DST_K_SRC_FORMFEED 16 #define DST_K_SRC_MIN_CMD 1 #define DST_K_SRC_MAX_CMD 16 -typedef struct _DST_SRC_COMMAND { + +/* Source file header. */ + +typedef struct _DST_SRC_COMMAND +{ unsigned char dst_b_src_command; - union { - struct { - unsigned char dst_b_src_df_length; - unsigned char dst_b_src_df_flags; - unsigned short int dst_w_src_df_fileid; + union + { + struct + { + unsigned char dst_b_src_df_length; + unsigned char dst_b_src_df_flags; + unsigned short int dst_w_src_df_fileid; #ifdef __GNUC__ - long long dst_q_src_df_rms_cdt; + long long dst_q_src_df_rms_cdt; #else - __int64 dst_q_src_df_rms_cdt; + __int64 dst_q_src_df_rms_cdt; #endif - unsigned int dst_l_src_df_rms_ebk; - unsigned short int dst_w_src_df_rms_ffb; - unsigned char dst_b_src_df_rms_rfo; - unsigned char dst_b_src_df_filename; - } dst_a_src_decl_src; - unsigned int dst_l_src_unslong; - unsigned short int dst_w_src_unsword; - unsigned char dst_b_src_unsbyte; - } dst_a_src_cmd_fields; + unsigned int dst_l_src_df_rms_ebk; + unsigned short int dst_w_src_df_rms_ffb; + unsigned char dst_b_src_df_rms_rfo; + unsigned char dst_b_src_df_filename; + } dst_a_src_decl_src; + unsigned int dst_l_src_unslong; + unsigned short int dst_w_src_unsword; + unsigned char dst_b_src_unsbyte; + } dst_a_src_cmd_fields; } DST_SRC_COMMAND; #define DST_K_SRC_COMMAND_SIZE 21 - -typedef struct _DST_SRC_CMDTRLR { + +/* Source file trailer. */ + +typedef struct _DST_SRC_CMDTRLR +{ unsigned char dst_b_src_df_libmodname; } DST_SRC_CMDTRLR; #define DST_K_SRC_CMDTRLR_SIZE 1 - -typedef struct _DST_PROLOG { + +/* Prolog header. */ + +typedef struct _DST_PROLOG +{ DST_HEADER dst_a_prolog_header; unsigned int dst_l_prolog_bkpt_addr; } DST_PROLOG; #define DST_K_PROLOG_SIZE 8 -#endif /* VMSDBG_H */ +#endif /* GCC_VMSDBG_H */ diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c index 9884f0ca670..257d5066f04 100644 --- a/gcc/vmsdbgout.c +++ b/gcc/vmsdbgout.c @@ -171,7 +171,6 @@ static void vmsdbgout_decl PARAMS ((tree)); static void vmsdbgout_global_decl PARAMS ((tree)); static void vmsdbgout_abstract_function PARAMS ((tree)); - /* The debug hooks structure. */ struct gcc_debug_hooks vmsdbg_debug_hooks @@ -523,117 +522,145 @@ restart: } } +/* Output the debug header HEADER. Also output COMMENT if flag_verbose_asm is + set. Return the header size. Just return the size if DOSIZEONLY is + non-zero. */ + static int write_debug_header (header, comment, dosizeonly) DST_HEADER *header; const char *comment; int dosizeonly; { - if (dosizeonly) - return 4; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, + header->dst__header_length.dst_w_length); + + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s record length", ASM_COMMENT_START); + fputc ('\n', asm_out_file); - ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, - header->dst__header_length.dst_w_length); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s record length", ASM_COMMENT_START); - fputc ('\n', asm_out_file); + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, + header->dst__header_type.dst_w_type); - ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, - header->dst__header_type.dst_w_type); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s record type (%s)", ASM_COMMENT_START, - comment); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s record type (%s)", ASM_COMMENT_START, + comment); - fputc ('\n', asm_out_file); + fputc ('\n', asm_out_file); + } return 4; } +/* Output the address of SYMBOL. Also output COMMENT if flag_verbose_asm is + set. Return the address size. Just return the size if DOSIZEONLY is + non-zero. */ + static int write_debug_addr (symbol, comment, dosizeonly) char *symbol; const char *comment; int dosizeonly; { - if (dosizeonly) - return PTR_SIZE; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_ADDR (asm_out_file, symbol); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } - ASM_OUTPUT_DEBUG_ADDR (asm_out_file, symbol); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); - return PTR_SIZE; } +/* Output the single byte DATA1. Also output COMMENT if flag_verbose_asm is + set. Return the data size. Just return the size if DOSIZEONLY is + non-zero. */ + static int write_debug_data1 (data1, comment, dosizeonly) unsigned int data1; const char *comment; int dosizeonly; { - if (dosizeonly) - return 1; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA1 (asm_out_file, data1); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } - ASM_OUTPUT_DEBUG_DATA1 (asm_out_file, data1); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); - return 1; } +/* Output the single word DATA2. Also output COMMENT if flag_verbose_asm is + set. Return the data size. Just return the size if DOSIZEONLY is + non-zero. */ + static int write_debug_data2 (data2, comment, dosizeonly) unsigned int data2; const char *comment; int dosizeonly; { - if (dosizeonly) - return 2; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, data2); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } - ASM_OUTPUT_DEBUG_DATA2 (asm_out_file, data2); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); - return 2; } +/* Output double word DATA4. Also output COMMENT if flag_verbose_asm is set. + Return the data size. Just return the size if DOSIZEONLY is non-zero. */ + static int write_debug_data4 (data4, comment, dosizeonly) unsigned long data4; const char *comment; int dosizeonly; { - if (dosizeonly) - return 4; - - ASM_OUTPUT_DEBUG_DATA4 (asm_out_file, data4); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA4 (asm_out_file, data4); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } return 4; } +/* Output quad word DATA8. Also output COMMENT if flag_verbose_asm is set. + Return the data size. Just return the size if DOSIZEONLY is non-zero. */ + static int write_debug_data8 (data8, comment, dosizeonly) unsigned long long data8; const char *comment; int dosizeonly; { - if (dosizeonly) - return 8; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DATA8 (asm_out_file, data8); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } - ASM_OUTPUT_DEBUG_DATA8 (asm_out_file, data8); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); - return 8; } +/* Output the difference between LABEL1 and LABEL2. Also output COMMENT if + flag_verbose_asm is set. Return the data size. Just return the size if + DOSIZEONLY is non-zero. */ + static int write_debug_delta4 (label1, label2, comment, dosizeonly) char *label1; @@ -641,39 +668,44 @@ write_debug_delta4 (label1, label2, comment, dosizeonly) const char *comment; int dosizeonly; { - if (dosizeonly) - return 4; + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_DELTA4 (asm_out_file, label1, label2); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } - ASM_OUTPUT_DEBUG_DELTA4(asm_out_file, label1, label2); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); - return 4; } +/* Output a character string STRING. Also write COMMENT if flag_verbose_asm is + set. Return the string length. Just return the length if DOSIZEONLY is + non-zero. */ + static int write_debug_string (string, comment, dosizeonly) char *string; const char *comment; int dosizeonly; { - if (dosizeonly) - return strlen (string); - - ASM_OUTPUT_DEBUG_STRING (asm_out_file, string); - if (flag_verbose_asm) - fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); - fputc ('\n', asm_out_file); + if (!dosizeonly) + { + ASM_OUTPUT_DEBUG_STRING (asm_out_file, string); + if (flag_verbose_asm) + fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START, comment); + fputc ('\n', asm_out_file); + } return strlen (string); } -static int +/* Output a module begin header and return the header size. Just return the + size if DOSIZEONLY is non-zero. */ + write_modbeg (dosizeonly) int dosizeonly; { - DST_MODULE_BEGIN modbeg; DST_MB_TRLR mb_trlr; int i; @@ -731,6 +763,9 @@ write_modbeg (dosizeonly) return totsize; } +/* Output a module end trailer and return the trailer size. Just return + the size if DOSIZEONLY is non-zero. */ + static int write_modend (dosizeonly) int dosizeonly; @@ -748,6 +783,9 @@ write_modend (dosizeonly) return totsize; } +/* Output a routine begin header routine RTNNUM and return the header size. + Just return the size if DOSIZEONLY is non-zero. */ + static int write_rtnbeg (rtnnum, dosizeonly) int rtnnum; @@ -843,6 +881,9 @@ write_rtnbeg (rtnnum, dosizeonly) return totsize; } +/* Output a routine end trailer for routine RTNNUM and return the header size. + Just return the size if DOSIZEONLY is non-zero. */ + static int write_rtnend (rtnnum, dosizeonly) int rtnnum; @@ -884,6 +925,9 @@ write_rtnend (rtnnum, dosizeonly) ((I) < 256 ? DST_K_INCR_LINUM \ : (I) < 65536 ? DST_K_INCR_LINUM_W : DST_K_INCR_LINUM_L) +/* Output the PC to line number correlations and return the size. Just return + the size if DOSIZEONLY is non-zero */ + static int write_pclines (dosizeonly) int dosizeonly; @@ -1011,6 +1055,10 @@ write_pclines (dosizeonly) return totsize; } +/* Output a source correlation for file FILEID using information saved in + FILE_INFO_ENTRY and return the size. Just return the size if DOSIZEONLY is + non-zero. */ + static int write_srccorr (fileid, file_info_entry, dosizeonly) int fileid; @@ -1199,6 +1247,9 @@ write_srccorr (fileid, file_info_entry, dosizeonly) return totsize; } +/* Output all the source correlation entries and return the size. Just return + the size if DOSIZEONLY is non-zero. */ + static int write_srccorrs (dosizeonly) int dosizeonly; @@ -1211,7 +1262,6 @@ write_srccorrs (dosizeonly) return totsize; } - /* Output a marker (i.e. a label) for the beginning of a function, before the prologue. */ @@ -1303,6 +1353,8 @@ vmsdbgout_end_block (line, blocknum) ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum); } +/* Not implemented in VMS Debug. */ + static bool vmsdbgout_ignore_block (block) tree block; @@ -1315,6 +1367,8 @@ vmsdbgout_ignore_block (block) return retval; } +/* Add an entry for function DECL into the func_table. */ + static void vmsdbgout_begin_function (decl) tree decl; @@ -1337,6 +1391,9 @@ vmsdbgout_begin_function (decl) static char fullname_buff [4096]; +/* Return the full file specification for FILENAME. The specification must be + in VMS syntax in order to be processed by VMS Debug. */ + static char * full_name (filename) const char *filename; @@ -1362,9 +1419,8 @@ full_name (filename) /* Lookup a filename (in the list of filenames that we know about here in vmsdbgout.c) and return its "index". The index of each (known) filename is just a unique number which is associated with only that one filename. We - need such numbers for the sake of generating labels (in the .debug_sfnames - section) and references to those files numbers (in the .debug_srcinfo - and.debug_macinfo sections). If the filename given as an argument is not + need such numbers for the sake of generating labels and references + to those files numbers. If the filename given as an argument is not found in our current list, add it to the list and assign it the next available unique index number. In order to speed up searches, we remember the index of the filename was looked up last. This handles the majority of @@ -1575,6 +1631,8 @@ vmsdbgout_init (main_input_filename) } +/* Not implemented in VMS Debug. */ + static void vmsdbgout_define (lineno, buffer) unsigned int lineno; @@ -1584,6 +1642,8 @@ vmsdbgout_define (lineno, buffer) (*dwarf2_debug_hooks.define) (lineno, buffer); } +/* Not implemented in VMS Debug. */ + static void vmsdbgout_undef (lineno, buffer) unsigned int lineno; @@ -1593,6 +1653,8 @@ vmsdbgout_undef (lineno, buffer) (*dwarf2_debug_hooks.undef) (lineno, buffer); } +/* Not implemented in VMS Debug. */ + static void vmsdbgout_decl (decl) tree decl; @@ -1601,6 +1663,8 @@ vmsdbgout_decl (decl) (*dwarf2_debug_hooks.function_decl) (decl); } +/* Not implemented in VMS Debug. */ + static void vmsdbgout_global_decl (decl) tree decl; @@ -1609,6 +1673,8 @@ vmsdbgout_global_decl (decl) (*dwarf2_debug_hooks.global_decl) (decl); } +/* Not implemented in VMS Debug. */ + static void vmsdbgout_abstract_function (decl) tree decl; @@ -1617,8 +1683,8 @@ vmsdbgout_abstract_function (decl) (*dwarf2_debug_hooks.outlining_inline_function) (decl); } -/* Output stuff that Debug requires at the end of every file, - and generate the VMS Debug debugging info. */ +/* Output stuff that Debug requires at the end of every file and generate the + VMS Debug debugging info. */ static void vmsdbgout_finish (input_filename) -- 2.30.2