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 <rupp@gnat.com>

From-SVN: r47668
This commit is contained in:
Richard Kenner 2001-12-05 12:36:48 +00:00 committed by Richard Kenner
parent 33afb1b72b
commit 5f98259ade
6 changed files with 343 additions and 162 deletions

View File

@ -1,3 +1,11 @@
Wed Dec 5 07:27:42 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
Douglas B. Rupp <rupp@gnat.com>
* 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 <kenner@vlsi1.ultra.nyu.edu>
* function.h (tree, rtx): Remove no-longer-needed definitions.

View File

@ -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.

View File

@ -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:

View File

@ -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

View File

@ -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
This file is part of GCC.
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;
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 */

View File

@ -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);
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);
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);
if (flag_verbose_asm)
fprintf (asm_out_file, "\t%s record type (%s)", ASM_COMMENT_START,
comment);
ASM_OUTPUT_DEBUG_DATA2 (asm_out_file,
header->dst__header_type.dst_w_type);
fputc ('\n', asm_out_file);
if (flag_verbose_asm)
fprintf (asm_out_file, "\t%s record type (%s)", ASM_COMMENT_START,
comment);
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)