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:
parent
33afb1b72b
commit
5f98259ade
6 changed files with 343 additions and 162 deletions
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
246
gcc/vmsdbg.h
246
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
|
||||
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 */
|
||||
|
|
208
gcc/vmsdbgout.c
208
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);
|
||||
|
||||
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue