mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-21 10:30:34 +08:00
x
From-SVN: r13160
This commit is contained in:
parent
f3ff3f4abe
commit
9a666dda81
37
gcc/c-lex.c
37
gcc/c-lex.c
@ -434,12 +434,8 @@ check_newline ()
|
||||
&& getc (finput) == 'e'
|
||||
&& ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
|
||||
{
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (c != '\n'
|
||||
&& (debug_info_level == DINFO_LEVEL_VERBOSE)
|
||||
&& (write_symbols == DWARF_DEBUG))
|
||||
dwarfout_define (lineno, get_directive_line (finput));
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
if (c != '\n')
|
||||
debug_define (lineno, get_directive_line (finput));
|
||||
goto skipline;
|
||||
}
|
||||
}
|
||||
@ -451,12 +447,8 @@ check_newline ()
|
||||
&& getc (finput) == 'f'
|
||||
&& ((c = getc (finput)) == ' ' || c == '\t' || c == '\n'))
|
||||
{
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (c != '\n'
|
||||
&& (debug_info_level == DINFO_LEVEL_VERBOSE)
|
||||
&& (write_symbols == DWARF_DEBUG))
|
||||
dwarfout_undef (lineno, get_directive_line (finput));
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
if (c != '\n')
|
||||
debug_undef (lineno, get_directive_line (finput));
|
||||
goto skipline;
|
||||
}
|
||||
}
|
||||
@ -608,16 +600,7 @@ linenum:
|
||||
p->name = input_filename;
|
||||
input_file_stack = p;
|
||||
input_file_stack_tick++;
|
||||
#ifdef DBX_DEBUGGING_INFO
|
||||
if (write_symbols == DBX_DEBUG)
|
||||
dbxout_start_new_source_file (input_filename);
|
||||
#endif
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_start_new_source_file (input_filename);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
|
||||
debug_start_source_file (input_filename);
|
||||
used_up = 1;
|
||||
}
|
||||
else if (TREE_INT_CST_LOW (yylval.ttype) == 2)
|
||||
@ -629,15 +612,7 @@ linenum:
|
||||
input_file_stack = p->next;
|
||||
free (p);
|
||||
input_file_stack_tick++;
|
||||
#ifdef DBX_DEBUGGING_INFO
|
||||
if (write_symbols == DBX_DEBUG)
|
||||
dbxout_resume_previous_source_file ();
|
||||
#endif
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_resume_previous_source_file (input_file_stack->line);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
debug_end_source_file (input_file_stack->line);
|
||||
}
|
||||
else
|
||||
error ("#-lines for entering and leaving files don't match");
|
||||
|
@ -88,12 +88,11 @@ Boston, MA 02111-1307, USA. */
|
||||
%{mabi=64: -D__mips64} \
|
||||
%{!mabi*: -D__mips64}"
|
||||
|
||||
/* Irix 6 uses DWARF. */
|
||||
#define DWARF_DEBUGGING_INFO
|
||||
#define DWARF_VERSION 2
|
||||
/* Irix 6 uses DWARF-2. */
|
||||
#define DWARF2_DEBUGGING_INFO
|
||||
#define MIPS_DEBUGGING_INFO
|
||||
#undef PREFERRED_DEBUGGING_TYPE
|
||||
#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
|
||||
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
|
||||
|
||||
/* The size in bytes of a DWARF field indicating an offset or length
|
||||
relative to a debug info section, specified to be 4 bytes in the DWARF-2
|
||||
@ -479,7 +478,7 @@ do { \
|
||||
#define LINK_SPEC "\
|
||||
%{G*} %{EB} %{EL} %{mips1} %{mips2} %{mips3} %{mips4} \
|
||||
%{bestGnum} %{shared} %{non_shared} \
|
||||
%{call_shared} %{no_archive} %{exact_version} \
|
||||
%{call_shared} %{no_archive} %{exact_version} %{w} \
|
||||
%{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}} \
|
||||
%{rpath} -init __do_global_ctors -fini __do_global_dtors \
|
||||
%{shared:-hidden_symbol __do_global_ctors,__do_global_dtors} \
|
||||
|
@ -880,7 +880,7 @@ while (0)
|
||||
#define MIPS_DEBUGGING_INFO /* MIPS specific debugging info */
|
||||
|
||||
#ifndef PREFERRED_DEBUGGING_TYPE /* assume SDB_DEBUGGING_INFO */
|
||||
#define PREFERRED_DEBUGGING_TYPE ((len > 1 && !strncmp (str, "ggdb", len)) ? DBX_DEBUG : SDB_DEBUG)
|
||||
#define PREFERRED_DEBUGGING_TYPE ((!strncmp (str, "ggdb", 4)) ? DBX_DEBUG : SDB_DEBUG)
|
||||
#endif
|
||||
|
||||
/* By default, turn on GDB extensions. */
|
||||
|
@ -245,6 +245,10 @@ do { \
|
||||
|
||||
#define DWARF_DEBUGGING_INFO
|
||||
|
||||
/* All ELF targets can support DWARF-2. */
|
||||
|
||||
#define DWARF2_DEBUGGING_INFO
|
||||
|
||||
/* The numbers used to denote specific machine registers in the System V
|
||||
Release 4 DWARF debugging information are quite likely to be totally
|
||||
different from the numbers used in BSD stabs debugging information
|
||||
|
@ -21,10 +21,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef DWARF_VERSION
|
||||
#define DWARF_VERSION 1
|
||||
#endif
|
||||
#if defined (DWARF_DEBUGGING_INFO) && (DWARF_VERSION == 2)
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
#include <stdio.h>
|
||||
#include "dwarf2.h"
|
||||
#include "tree.h"
|
||||
@ -321,6 +318,8 @@ extern char *language_string;
|
||||
#define DWARF_OFFSET_SIZE 4
|
||||
#endif
|
||||
|
||||
#define DWARF_VERSION 2
|
||||
|
||||
/* Fixed size portion of the DWARF compilation unit header. */
|
||||
#define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3)
|
||||
|
||||
@ -405,7 +404,7 @@ static unsigned file_table_in_use;
|
||||
#define FILE_TABLE_INCREMENT 64
|
||||
|
||||
/* Local pointer to the name of the main input file. Initialized in
|
||||
dwarfout_init. */
|
||||
dwarf2out_init. */
|
||||
static char *primary_filename;
|
||||
|
||||
/* For Dwarf output, we must assign lexical-blocks id numbers in the order in
|
||||
@ -5617,7 +5616,7 @@ add_location_or_const_value_attribute (die, decl)
|
||||
(at debug-time) will show the function as having been called with the
|
||||
*new* value rather than the value which was originally passed in. This
|
||||
happens rarely enough that it is not a major problem, but it *is* a
|
||||
problem, and I'd like to fix it. A future version of dwarfout.c may
|
||||
problem, and I'd like to fix it. A future version of dwarf2out.c may
|
||||
generate two additional attributes for any given DW_TAG_formal_parameter
|
||||
DIE which will describe the "passed type" and the "passed location" for
|
||||
the given formal parameter in addition to the attributes we now generate
|
||||
@ -6197,7 +6196,7 @@ decl_start_label (decl)
|
||||
|
||||
/* These routines generate the internnal representation of the DIE's for
|
||||
the compilation unit. Debugging information is collected by walking
|
||||
the declaration trees passed in from dwarfout_file_scope_decl(). */
|
||||
the declaration trees passed in from dwarf2out_file_scope_decl(). */
|
||||
|
||||
static void
|
||||
gen_array_type_die (type, context_die)
|
||||
@ -7626,7 +7625,7 @@ gen_decl_die (decl, context_die)
|
||||
|
||||
/***************** Debug Information Generation Hooks ***********************/
|
||||
void
|
||||
dwarfout_file_scope_decl (decl, set_finalizing)
|
||||
dwarf2out_file_scope_decl (decl, set_finalizing)
|
||||
register tree decl;
|
||||
register int set_finalizing;
|
||||
{
|
||||
@ -7755,7 +7754,7 @@ dwarfout_file_scope_decl (decl, set_finalizing)
|
||||
/* Output a marker (i.e. a label) for the beginning of the generated code for
|
||||
a lexical block. */
|
||||
void
|
||||
dwarfout_begin_block (blocknum)
|
||||
dwarf2out_begin_block (blocknum)
|
||||
register unsigned blocknum;
|
||||
{
|
||||
function_section (current_function_decl);
|
||||
@ -7765,7 +7764,7 @@ dwarfout_begin_block (blocknum)
|
||||
/* Output a marker (i.e. a label) for the end of the generated code for a
|
||||
lexical block. */
|
||||
void
|
||||
dwarfout_end_block (blocknum)
|
||||
dwarf2out_end_block (blocknum)
|
||||
register unsigned blocknum;
|
||||
{
|
||||
function_section (current_function_decl);
|
||||
@ -7775,7 +7774,7 @@ dwarfout_end_block (blocknum)
|
||||
/* Output a marker (i.e. a label) at a point in the assembly code which
|
||||
corresponds to a given source level label. */
|
||||
void
|
||||
dwarfout_label (insn)
|
||||
dwarf2out_label (insn)
|
||||
register rtx insn;
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
@ -7791,7 +7790,7 @@ dwarfout_label (insn)
|
||||
/* Output a marker (i.e. a label) for the beginning of a function, before
|
||||
the prologue. */
|
||||
void
|
||||
dwarfout_begin_prologue ()
|
||||
dwarf2out_begin_prologue ()
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
register dw_fde_ref fde;
|
||||
@ -7825,7 +7824,7 @@ dwarfout_begin_prologue ()
|
||||
the real body of the function begins (after parameters have been moved to
|
||||
their home locations). */
|
||||
void
|
||||
dwarfout_begin_function ()
|
||||
dwarf2out_begin_function ()
|
||||
{
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
register long int offset;
|
||||
@ -7919,7 +7918,7 @@ dwarfout_begin_function ()
|
||||
/* Output a marker (i.e. a label) for the point in the generated code where
|
||||
the real body of the function ends (just before the epilogue code). */
|
||||
void
|
||||
dwarfout_end_function ()
|
||||
dwarf2out_end_function ()
|
||||
{
|
||||
dw_fde_ref fde;
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
@ -7935,7 +7934,7 @@ dwarfout_end_function ()
|
||||
for a function definition. This gets called *after* the epilogue code has
|
||||
been generated. */
|
||||
void
|
||||
dwarfout_end_epilogue ()
|
||||
dwarf2out_end_epilogue ()
|
||||
{
|
||||
dw_fde_ref fde;
|
||||
char label[MAX_ARTIFICIAL_LABEL_BYTES];
|
||||
@ -7948,7 +7947,7 @@ dwarfout_end_epilogue ()
|
||||
}
|
||||
|
||||
/* Lookup a filename (in the list of filenames that we know about here in
|
||||
dwarfout.c) and return its "index". The index of each (known) filename is
|
||||
dwarf2out.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
|
||||
@ -8007,7 +8006,7 @@ lookup_filename (file_name)
|
||||
and record information relating to this source line, in
|
||||
'line_info_table' for later output of the .debug_line section. */
|
||||
void
|
||||
dwarfout_line (filename, line)
|
||||
dwarf2out_line (filename, line)
|
||||
register char *filename;
|
||||
register unsigned line;
|
||||
{
|
||||
@ -8067,16 +8066,15 @@ dwarfout_line (filename, line)
|
||||
/* Record the beginning of a new source file, for later output
|
||||
of the .debug_macinfo section. At present, unimplemented. */
|
||||
void
|
||||
dwarfout_start_new_source_file (filename)
|
||||
dwarf2out_start_source_file (filename)
|
||||
register char *filename;
|
||||
{
|
||||
}
|
||||
|
||||
/* Record the resumption of a source file, for later output
|
||||
/* Record the end of a source file, for later output
|
||||
of the .debug_macinfo section. At present, unimplemented. */
|
||||
void
|
||||
dwarfout_resume_previous_source_file (lineno)
|
||||
register unsigned lineno;
|
||||
dwarf2out_end_source_file ()
|
||||
{
|
||||
}
|
||||
|
||||
@ -8084,14 +8082,14 @@ dwarfout_resume_previous_source_file (lineno)
|
||||
the tail part of the directive line, i.e. the part which is past the
|
||||
initial whitespace, #, whitespace, directive-name, whitespace part. */
|
||||
void
|
||||
dwarfout_define (lineno, buffer)
|
||||
dwarf2out_define (lineno, buffer)
|
||||
register unsigned lineno;
|
||||
register char *buffer;
|
||||
{
|
||||
static int initialized = 0;
|
||||
if (!initialized)
|
||||
{
|
||||
dwarfout_start_new_source_file (primary_filename);
|
||||
dwarf2out_start_source_file (primary_filename);
|
||||
initialized = 1;
|
||||
}
|
||||
}
|
||||
@ -8100,7 +8098,7 @@ dwarfout_define (lineno, buffer)
|
||||
the tail part of the directive line, i.e. the part which is past the
|
||||
initial whitespace, #, whitespace, directive-name, whitespace part. */
|
||||
void
|
||||
dwarfout_undef (lineno, buffer)
|
||||
dwarf2out_undef (lineno, buffer)
|
||||
register unsigned lineno;
|
||||
register char *buffer;
|
||||
{
|
||||
@ -8108,7 +8106,7 @@ dwarfout_undef (lineno, buffer)
|
||||
|
||||
/* Set up for Dwarf output at the start of compilation. */
|
||||
void
|
||||
dwarfout_init (asm_out_file, main_input_filename)
|
||||
dwarf2out_init (asm_out_file, main_input_filename)
|
||||
register FILE *asm_out_file;
|
||||
register char *main_input_filename;
|
||||
{
|
||||
@ -8185,7 +8183,7 @@ dwarfout_init (asm_out_file, main_input_filename)
|
||||
/* Output stuff that dwarf requires at the end of every file,
|
||||
and generate the DWARF-2 debugging info. */
|
||||
void
|
||||
dwarfout_finish ()
|
||||
dwarf2out_finish ()
|
||||
{
|
||||
/* Traverse the DIE tree and add sibling attributes to those DIE's
|
||||
that have children. */
|
||||
@ -8266,4 +8264,4 @@ dwarfout_finish ()
|
||||
output_aranges ();
|
||||
}
|
||||
}
|
||||
#endif /* DWARF_DEBUGGING_INFO && DWARF_VERSION == 2 */
|
||||
#endif /* DWARF2_DEBUGGING_INFO */
|
||||
|
@ -21,10 +21,7 @@ Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef DWARF_VERSION
|
||||
#define DWARF_VERSION 1
|
||||
#endif
|
||||
#if defined (DWARF_DEBUGGING_INFO) && (DWARF_VERSION != 2)
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
#include <stdio.h>
|
||||
#include "dwarf.h"
|
||||
#include "tree.h"
|
||||
@ -5734,4 +5731,4 @@ dwarfout_finish ()
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* DWARF_DEBUGGING_INFO && DWARF_VERSION != 2 */
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
|
53
gcc/final.c
53
gcc/final.c
@ -895,10 +895,10 @@ final_start_function (first, file, optimize)
|
||||
last_linenum = high_block_linenum = high_function_linenum
|
||||
= NOTE_LINE_NUMBER (first);
|
||||
|
||||
#if defined (DWARF_DEBUGGING_INFO) && DWARF_VERSION == 2
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* Output DWARF definition of the function. */
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
dwarfout_begin_prologue ();
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_begin_prologue ();
|
||||
#endif
|
||||
|
||||
/* For SDB and XCOFF, the function beginning must be marked between
|
||||
@ -1066,6 +1066,11 @@ final_end_function (first, file, optimize)
|
||||
dwarfout_end_function ();
|
||||
#endif
|
||||
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_end_function ();
|
||||
#endif
|
||||
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
if (write_symbols == XCOFF_DEBUG)
|
||||
xcoffout_end_function (file, high_function_linenum);
|
||||
@ -1087,6 +1092,11 @@ final_end_function (first, file, optimize)
|
||||
dwarfout_end_epilogue ();
|
||||
#endif
|
||||
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_end_epilogue ();
|
||||
#endif
|
||||
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
if (write_symbols == XCOFF_DEBUG)
|
||||
xcoffout_end_epilogue (file);
|
||||
@ -1364,6 +1374,12 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
must be after the prologue. */
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
dwarfout_begin_function ();
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* This outputs a marker where the function body starts, so it
|
||||
must be after the prologue. */
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_begin_function ();
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
@ -1377,11 +1393,8 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_BEG
|
||||
&& (debug_info_level == DINFO_LEVEL_NORMAL
|
||||
|| debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
|| write_symbols == DWARF_DEBUG
|
||||
#endif
|
||||
)
|
||||
)
|
||||
|| write_symbols == DWARF2_DEBUG))
|
||||
{
|
||||
/* Beginning of a symbol-block. Assign it a sequence number
|
||||
and push the number onto the stack PENDING_BLOCKS. */
|
||||
@ -1416,17 +1429,18 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
dwarfout_begin_block (next_block_index);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_begin_block (next_block_index);
|
||||
#endif
|
||||
|
||||
next_block_index++;
|
||||
}
|
||||
else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END
|
||||
&& (debug_info_level == DINFO_LEVEL_NORMAL
|
||||
|| debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
|| write_symbols == DWARF_DEBUG
|
||||
#endif
|
||||
)
|
||||
)
|
||||
|| write_symbols == DWARF2_DEBUG))
|
||||
{
|
||||
/* End of a symbol-block. Pop its sequence number off
|
||||
PENDING_BLOCKS and output debugging info based on that. */
|
||||
@ -1451,6 +1465,10 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF_DEBUG && block_depth >= 0)
|
||||
dwarfout_end_block (pending_blocks[block_depth]);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG && block_depth >= 0)
|
||||
dwarf2out_end_block (pending_blocks[block_depth]);
|
||||
#endif
|
||||
}
|
||||
else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL
|
||||
@ -1460,6 +1478,10 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
dwarfout_label (insn);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_label (insn);
|
||||
#endif
|
||||
}
|
||||
else if (NOTE_LINE_NUMBER (insn) > 0)
|
||||
@ -1536,6 +1558,10 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF_DEBUG && LABEL_NAME (insn))
|
||||
dwarfout_label (insn);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG && LABEL_NAME (insn))
|
||||
dwarf2out_label (insn);
|
||||
#endif
|
||||
if (app_on)
|
||||
{
|
||||
@ -2156,6 +2182,11 @@ output_source_line (file, insn)
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
dwarfout_line (filename, NOTE_LINE_NUMBER (insn));
|
||||
#endif
|
||||
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_line (filename, NOTE_LINE_NUMBER (insn));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@ enum debug_info_type
|
||||
DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */
|
||||
SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */
|
||||
DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */
|
||||
DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */
|
||||
XCOFF_DEBUG /* Write IBM/Xcoff debug info (using dbxout.c). */
|
||||
};
|
||||
|
||||
|
208
gcc/toplev.c
208
gcc/toplev.c
@ -97,7 +97,7 @@ vms_fopen (fname, type)
|
||||
PREFERRED_DEBUGGING_TYPE to choose a format in a system-dependent way.
|
||||
|
||||
This is one long line cause VAXC can't handle a \-newline. */
|
||||
#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO))
|
||||
#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO))
|
||||
#ifndef PREFERRED_DEBUGGING_TYPE
|
||||
You Lose! You must define PREFERRED_DEBUGGING_TYPE!
|
||||
#endif /* no PREFERRED_DEBUGGING_TYPE */
|
||||
@ -112,6 +112,9 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE!
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
|
||||
#endif
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG
|
||||
#endif
|
||||
@ -2315,6 +2318,10 @@ compile_file (name)
|
||||
if (write_symbols == DWARF_DEBUG)
|
||||
TIMEVAR (symout_time, dwarfout_init (asm_out_file, main_input_filename));
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
TIMEVAR (symout_time, dwarf2out_init (asm_out_file, main_input_filename));
|
||||
#endif
|
||||
|
||||
/* Initialize yet another pass. */
|
||||
|
||||
@ -2522,6 +2529,16 @@ compile_file (name)
|
||||
if (write_symbols == DWARF_DEBUG
|
||||
&& (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
|
||||
TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 1));
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* Output DWARF2 information for file-scope tentative data object
|
||||
declarations, file-scope (extern) function declarations (which
|
||||
had no corresponding body) and file-scope tagged type declarations
|
||||
and definitions which have not yet been forced out. */
|
||||
|
||||
if (write_symbols == DWARF2_DEBUG
|
||||
&& (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)))
|
||||
TIMEVAR (symout_time, dwarf2out_file_scope_decl (decl, 1));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -2547,6 +2564,14 @@ compile_file (name)
|
||||
});
|
||||
#endif
|
||||
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
TIMEVAR (symout_time,
|
||||
{
|
||||
dwarf2out_finish ();
|
||||
});
|
||||
#endif
|
||||
|
||||
/* Output some stuff at end of file if nec. */
|
||||
|
||||
if (!output_bytecode)
|
||||
@ -2756,6 +2781,11 @@ rest_of_type_compilation (type, toplev)
|
||||
if (write_symbols == DWARF_DEBUG && toplev)
|
||||
TIMEVAR (symout_time, dwarfout_file_scope_decl (TYPE_STUB_DECL (type), 0));
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* Don't write out function-scope types here. */
|
||||
if (write_symbols == DWARF2_DEBUG && toplev)
|
||||
TIMEVAR (symout_time, dwarf2out_file_scope_decl (TYPE_STUB_DECL (type), 0));
|
||||
#endif
|
||||
}
|
||||
|
||||
/* This is called from finish_function (within yyparse)
|
||||
@ -2862,6 +2892,17 @@ rest_of_compilation (decl)
|
||||
TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
|
||||
set_decl_abstract_flags (decl, 0);
|
||||
}
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* Generate the DWARF2 info for the "abstract" instance
|
||||
of a function which we may later generate inlined and/or
|
||||
out-of-line instances of. */
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
{
|
||||
set_decl_abstract_flags (decl, 1);
|
||||
TIMEVAR (symout_time, dwarf2out_file_scope_decl (decl, 0));
|
||||
set_decl_abstract_flags (decl, 0);
|
||||
}
|
||||
#endif
|
||||
TIMEVAR (integration_time, save_for_inline_nocopy (decl));
|
||||
RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlineable;
|
||||
@ -2884,6 +2925,18 @@ rest_of_compilation (decl)
|
||||
TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
|
||||
set_decl_abstract_flags (decl, 0);
|
||||
}
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
/* Generate the DWARF2 info for the "abstract" instance of
|
||||
a function which we will generate an out-of-line instance
|
||||
of almost immediately (and which we may also later generate
|
||||
various inlined instances of). */
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
{
|
||||
set_decl_abstract_flags (decl, 1);
|
||||
TIMEVAR (symout_time, dwarf2out_file_scope_decl (decl, 0));
|
||||
set_decl_abstract_flags (decl, 0);
|
||||
}
|
||||
#endif
|
||||
saved_block_tree = DECL_INITIAL (decl);
|
||||
saved_arguments = DECL_ARGUMENTS (decl);
|
||||
@ -3376,6 +3429,11 @@ rest_of_compilation (decl)
|
||||
TIMEVAR (symout_time, dwarfout_file_scope_decl (decl, 0));
|
||||
#endif
|
||||
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG)
|
||||
TIMEVAR (symout_time, dwarf2out_file_scope_decl (decl, 0));
|
||||
#endif
|
||||
|
||||
exit_rest_of_compilation:
|
||||
|
||||
/* In case the function was not output,
|
||||
@ -3818,8 +3876,6 @@ main (argc, argv, envp)
|
||||
}
|
||||
else if (str[0] == 'g')
|
||||
{
|
||||
char *p = str + 1;
|
||||
char *q;
|
||||
unsigned len;
|
||||
unsigned level;
|
||||
/* A lot of code assumes write_symbols == NO_DEBUG if the
|
||||
@ -3847,8 +3903,19 @@ main (argc, argv, envp)
|
||||
{ "gstabs+", DBX_DEBUG, 1 },
|
||||
#endif
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
{ "gdwarf-1", DWARF_DEBUG, 0 },
|
||||
{ "gdwarf-1+", DWARF_DEBUG, 1 },
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
{ "gdwarf-2", DWARF2_DEBUG, 0 },
|
||||
#endif
|
||||
#if defined (DWARF_DEBUGGING_INFO) || defined (DWARF2_DEBUGGING_INFO)
|
||||
#if PREFERRED_DEBUGGING_TYPE == DWARF_DEBUG || !defined (DWARF2_DEBUGGING_INFO)
|
||||
{ "gdwarf", DWARF_DEBUG, 0 },
|
||||
{ "gdwarf+", DWARF_DEBUG, 1 },
|
||||
#else
|
||||
{ "gdwarf", DWARF2_DEBUG, 0 },
|
||||
#endif
|
||||
#endif
|
||||
#ifdef XCOFF_DEBUGGING_INFO
|
||||
{ "gxcoff", XCOFF_DEBUG, 0 },
|
||||
@ -3861,36 +3928,38 @@ main (argc, argv, envp)
|
||||
};
|
||||
/* Indexed by enum debug_info_type. */
|
||||
static char *debug_type_names[] = {
|
||||
"none", "stabs", "coff", "dwarf", "xcoff"
|
||||
"none", "stabs", "coff", "dwarf-1", "dwarf-2", "xcoff"
|
||||
};
|
||||
|
||||
while (*p && (*p < '0' || *p > '9'))
|
||||
p++;
|
||||
len = p - str;
|
||||
q = p;
|
||||
while (*q && (*q >= '0' && *q <= '9'))
|
||||
q++;
|
||||
if (*p)
|
||||
level = atoi (p);
|
||||
else
|
||||
level = 2; /* default debugging info level */
|
||||
if (*q || level > 3)
|
||||
{
|
||||
warning ("invalid debug level specification in option: `-%s'",
|
||||
str);
|
||||
/* ??? This error message is incorrect in the case of
|
||||
-g4 -g. */
|
||||
warning ("no debugging information will be generated");
|
||||
level = 0;
|
||||
}
|
||||
|
||||
/* Look up STR in the table. */
|
||||
for (da = debug_args; da->arg; da++)
|
||||
{
|
||||
if (! strncmp (str, da->arg, len))
|
||||
if (! strncmp (str, da->arg, strlen (da->arg)))
|
||||
{
|
||||
enum debug_info_type type = da->debug_type;
|
||||
/* ??? A few targets use STR and LEN in the
|
||||
char *p, *q;
|
||||
|
||||
p = str + strlen (da->arg);
|
||||
if (*p && (*p < '0' || *p > '9'))
|
||||
continue;
|
||||
q = p;
|
||||
while (*q && (*q >= '0' && *q <= '9'))
|
||||
q++;
|
||||
if (*p)
|
||||
level = atoi (p);
|
||||
else
|
||||
level = 2; /* default debugging info level */
|
||||
if (*q || level > 3)
|
||||
{
|
||||
warning ("invalid debug level specification in option: `-%s'",
|
||||
str);
|
||||
/* ??? This error message is incorrect in the case of
|
||||
-g4 -g. */
|
||||
warning ("no debugging information will be generated");
|
||||
level = 0;
|
||||
}
|
||||
|
||||
/* ??? A few targets use STR in the
|
||||
definition of PREFERRED_DEBUGGING_TYPE! */
|
||||
if (type == NO_DEBUG)
|
||||
type = PREFERRED_DEBUGGING_TYPE;
|
||||
@ -4233,3 +4302,90 @@ print_switch_values (file, pos, max, indent, sep, term)
|
||||
|
||||
fprintf (file, "%s", term);
|
||||
}
|
||||
|
||||
/* Record the beginning of a new source file, named FILENAME. */
|
||||
|
||||
void
|
||||
debug_start_source_file (filename)
|
||||
register char *filename;
|
||||
{
|
||||
#ifdef DBX_DEBUGGING_INFO
|
||||
if (write_symbols == DBX_DEBUG)
|
||||
dbxout_start_new_source_file (filename);
|
||||
#endif
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_start_new_source_file (filename);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_start_source_file (filename);
|
||||
#endif /* DWARF2_DEBUGGING_INFO */
|
||||
}
|
||||
|
||||
/* Record the resumption of a source file. LINENO is the line number in
|
||||
the source file we are returning to. */
|
||||
|
||||
void
|
||||
debug_end_source_file (lineno)
|
||||
register unsigned lineno;
|
||||
{
|
||||
#ifdef DBX_DEBUGGING_INFO
|
||||
if (write_symbols == DBX_DEBUG)
|
||||
dbxout_resume_previous_source_file ();
|
||||
#endif
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_resume_previous_source_file (lineno);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_end_source_file ();
|
||||
#endif /* DWARF2_DEBUGGING_INFO */
|
||||
}
|
||||
|
||||
/* Called from check_newline in c-parse.y. The `buffer' parameter contains
|
||||
the tail part of the directive line, i.e. the part which is past the
|
||||
initial whitespace, #, whitespace, directive-name, whitespace part. */
|
||||
|
||||
void
|
||||
debug_define (lineno, buffer)
|
||||
register unsigned lineno;
|
||||
register char *buffer;
|
||||
{
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_define (lineno, buffer);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_define (lineno, buffer);
|
||||
#endif /* DWARF2_DEBUGGING_INFO */
|
||||
}
|
||||
|
||||
/* Called from check_newline in c-parse.y. The `buffer' parameter contains
|
||||
the tail part of the directive line, i.e. the part which is past the
|
||||
initial whitespace, #, whitespace, directive-name, whitespace part. */
|
||||
|
||||
void
|
||||
debug_undef (lineno, buffer)
|
||||
register unsigned lineno;
|
||||
register char *buffer;
|
||||
{
|
||||
#ifdef DWARF_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF_DEBUG)
|
||||
dwarfout_undef (lineno, buffer);
|
||||
#endif /* DWARF_DEBUGGING_INFO */
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (debug_info_level == DINFO_LEVEL_VERBOSE
|
||||
&& write_symbols == DWARF2_DEBUG)
|
||||
dwarf2out_undef (lineno, buffer);
|
||||
#endif /* DWARF2_DEBUGGING_INFO */
|
||||
}
|
||||
|
10
gcc/varasm.c
10
gcc/varasm.c
@ -1179,6 +1179,11 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
|
||||
if (write_symbols == DWARF_DEBUG && top_level
|
||||
&& DECL_CONTEXT (decl))
|
||||
dwarfout_file_scope_decl (decl, 0);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG && top_level
|
||||
&& DECL_CONTEXT (decl))
|
||||
dwarf2out_file_scope_decl (decl, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1308,6 +1313,11 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
|
||||
&& DECL_CONTEXT (decl))
|
||||
dwarfout_file_scope_decl (decl, 0);
|
||||
#endif
|
||||
#ifdef DWARF2_DEBUGGING_INFO
|
||||
if (write_symbols == DWARF2_DEBUG && top_level
|
||||
&& DECL_CONTEXT (decl))
|
||||
dwarf2out_file_scope_decl (decl, 0);
|
||||
#endif
|
||||
|
||||
/* Only output DWARF debugging information for record-scope variables
|
||||
here. In the case of function-scope variables, the information
|
||||
|
Loading…
x
Reference in New Issue
Block a user