Commit 33b49800 by Geoffrey Keating Committed by Geoffrey Keating

dbxout.c (scope_labelno): Add GTY.

2003-04-04  Geoffrey Keating  <geoffk@apple.com>

	* dbxout.c (scope_labelno): Add GTY.
	(have_used_extensions): Add GTY.
	(source_label_number): Add GTY.
	(lastfile): Add GTY.
	(lastfile_is_base): New.
	(base_input_file): New.
	(dbxout_handle_pch): New.
	(dbx_debug_hooks): Add handle_pch.
	(xcoff_debug_hooks): Likewise.
	(dbxout_function_end): Remove scope_labelno.
	(dbxout_init): Set base_input_file.
	(dbxout_handle_pch): New.
	(dbxout_source_file): Honour lastfile_is_base.
	* dwarfout.c (dwarf_debug_hooks): Add dummy handle_pch.
	* sdbout.c (sdb_debug_hooks): Add dummy handle_pch.
	* vmsdbgout.c (vmsdbg_debug_hooks): Add dummy handle_pch.
	* dwarf2out.c (dwarf2_debug_hooks): Add dummy handle_pch.
	* debug.c (do_nothing_debug_hooks): Add dummy handle_pch.
	* debug.h (struct gcc_debug_hooks): Add handle_pch.
	* c-pch.c (pch_init): Don't call start_source_file, but do call
	handle_pch.
	(c_common_write_pch): Call handle_pch.
	(c_common_read_pch): Don't call start_source_file,
	or end_source_file.

Index: gcc/testsuite/ChangeLog
2003-04-04  Geoffrey Keating  <geoffk@apple.com>

	* gcc.dg/pch/static-3.c: New.
	* gcc.dg/pch/static-3.hs: New.
	* gcc.dg/pch/pch.exp: Test with -O0 -g too.

From-SVN: r65266
parent 41a73c4c
2003-04-04 Geoffrey Keating <geoffk@apple.com>
* dbxout.c (scope_labelno): Add GTY.
(have_used_extensions): Add GTY.
(source_label_number): Add GTY.
(lastfile): Add GTY.
(lastfile_is_base): New.
(base_input_file): New.
(dbxout_handle_pch): New.
(dbx_debug_hooks): Add handle_pch.
(xcoff_debug_hooks): Likewise.
(dbxout_function_end): Remove scope_labelno.
(dbxout_init): Set base_input_file.
(dbxout_handle_pch): New.
(dbxout_source_file): Honour lastfile_is_base.
* dwarfout.c (dwarf_debug_hooks): Add dummy handle_pch.
* sdbout.c (sdb_debug_hooks): Add dummy handle_pch.
* vmsdbgout.c (vmsdbg_debug_hooks): Add dummy handle_pch.
* dwarf2out.c (dwarf2_debug_hooks): Add dummy handle_pch.
* debug.c (do_nothing_debug_hooks): Add dummy handle_pch.
* debug.h (struct gcc_debug_hooks): Add handle_pch.
* c-pch.c (pch_init): Don't call start_source_file, but do call
handle_pch.
(c_common_write_pch): Call handle_pch.
(c_common_read_pch): Don't call start_source_file,
or end_source_file.
Fri Apr 4 17:43:52 2003 Olivier Hainque <hainque@act-europe.fr> Fri Apr 4 17:43:52 2003 Olivier Hainque <hainque@act-europe.fr>
* emit-rtl.c (get_mem_attrs): Adjust alignment tests determining * emit-rtl.c (get_mem_attrs): Adjust alignment tests determining
......
...@@ -68,10 +68,6 @@ pch_init () ...@@ -68,10 +68,6 @@ pch_init ()
if (pch_file) if (pch_file)
{ {
/* We're precompiling a header file, so when it's actually used,
it'll be at least one level deep. */
(*debug_hooks->start_source_file) (lineno, input_filename);
f = fopen (pch_file, "w+b"); f = fopen (pch_file, "w+b");
if (f == NULL) if (f == NULL)
fatal_io_error ("can't open %s", pch_file); fatal_io_error ("can't open %s", pch_file);
...@@ -88,6 +84,9 @@ pch_init () ...@@ -88,6 +84,9 @@ pch_init ()
asm_file_startpos = ftell (asm_out_file); asm_file_startpos = ftell (asm_out_file);
/* Let the debugging format deal with the PCHness. */
(*debug_hooks->handle_pch) (0);
cpp_save_state (parse_in, f); cpp_save_state (parse_in, f);
} }
} }
...@@ -100,6 +99,8 @@ c_common_write_pch () ...@@ -100,6 +99,8 @@ c_common_write_pch ()
long written; long written;
struct c_pch_header h; struct c_pch_header h;
(*debug_hooks->handle_pch) (1);
cpp_write_pch_deps (parse_in, pch_outfile); cpp_write_pch_deps (parse_in, pch_outfile);
asm_file_end = ftell (asm_out_file); asm_file_end = ftell (asm_out_file);
...@@ -195,7 +196,7 @@ c_common_read_pch (pfile, name, fd, orig_name) ...@@ -195,7 +196,7 @@ c_common_read_pch (pfile, name, fd, orig_name)
cpp_reader *pfile; cpp_reader *pfile;
const char *name; const char *name;
int fd; int fd;
const char *orig_name; const char *orig_name ATTRIBUTE_UNUSED;
{ {
FILE *f; FILE *f;
struct c_pch_header h; struct c_pch_header h;
...@@ -203,10 +204,6 @@ c_common_read_pch (pfile, name, fd, orig_name) ...@@ -203,10 +204,6 @@ c_common_read_pch (pfile, name, fd, orig_name)
unsigned long written; unsigned long written;
struct save_macro_data *smd; struct save_macro_data *smd;
/* Before we wrote the file, we started a source file, so we have to start
one here to match. */
(*debug_hooks->start_source_file) (lineno, orig_name);
f = fdopen (fd, "rb"); f = fdopen (fd, "rb");
if (f == NULL) if (f == NULL)
{ {
...@@ -243,6 +240,4 @@ c_common_read_pch (pfile, name, fd, orig_name) ...@@ -243,6 +240,4 @@ c_common_read_pch (pfile, name, fd, orig_name)
return; return;
fclose (f); fclose (f);
(*debug_hooks->end_source_file) (lineno);
} }
...@@ -189,32 +189,41 @@ static GTY(()) struct dbx_file *current_file; ...@@ -189,32 +189,41 @@ static GTY(()) struct dbx_file *current_file;
static GTY(()) int next_file_number; static GTY(()) int next_file_number;
/* Typical USG systems don't have stab.h, and they also have /* A counter for dbxout_function_end. */
no use for DBX-format debugging info. */
#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
/* Last source file name mentioned in a NOTE insn. */
static const char *lastfile;
/* Current working directory. */ static GTY(()) int scope_labelno;
static const char *cwd;
/* Nonzero if we have actually used any of the GDB extensions /* Nonzero if we have actually used any of the GDB extensions
to the debugging format. The idea is that we use them for the to the debugging format. The idea is that we use them for the
first time only if there's a strong reason, but once we have done that, first time only if there's a strong reason, but once we have done that,
we use them whenever convenient. */ we use them whenever convenient. */
static int have_used_extensions = 0; static GTY(()) int have_used_extensions = 0;
/* Number for the next N_SOL filename stabs label. The number 0 is reserved /* Number for the next N_SOL filename stabs label. The number 0 is reserved
for the N_SO filename stabs label. */ for the N_SO filename stabs label. */
#if defined (DBX_DEBUGGING_INFO) && !defined (DBX_OUTPUT_SOURCE_FILENAME) static GTY(()) int source_label_number = 1;
static int source_label_number = 1;
#endif /* Last source file name mentioned in a NOTE insn. */
static GTY(()) const char *lastfile;
/* Used by PCH machinery to detect if 'lastfile' should be reset to
base_input_file. */
static GTY(()) int lastfile_is_base;
/* Typical USG systems don't have stab.h, and they also have
no use for DBX-format debugging info. */
#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
/* The original input file name. */
static const char *base_input_file;
/* Current working directory. */
static const char *cwd;
#ifdef DEBUG_SYMS_TEXT #ifdef DEBUG_SYMS_TEXT
#define FORCE_TEXT function_section (current_function_decl); #define FORCE_TEXT function_section (current_function_decl);
...@@ -323,6 +332,7 @@ static void dbxout_begin_function PARAMS ((tree)); ...@@ -323,6 +332,7 @@ static void dbxout_begin_function PARAMS ((tree));
static void dbxout_begin_block PARAMS ((unsigned, unsigned)); static void dbxout_begin_block PARAMS ((unsigned, unsigned));
static void dbxout_end_block PARAMS ((unsigned, unsigned)); static void dbxout_end_block PARAMS ((unsigned, unsigned));
static void dbxout_function_decl PARAMS ((tree)); static void dbxout_function_decl PARAMS ((tree));
static void dbxout_handle_pch PARAMS ((unsigned));
const struct gcc_debug_hooks dbx_debug_hooks = const struct gcc_debug_hooks dbx_debug_hooks =
{ {
...@@ -349,7 +359,8 @@ const struct gcc_debug_hooks dbx_debug_hooks = ...@@ -349,7 +359,8 @@ const struct gcc_debug_hooks dbx_debug_hooks =
dbxout_global_decl, /* global_decl */ dbxout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */ debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
dbxout_handle_pch /* handle_pch */
}; };
#endif /* DBX_DEBUGGING_INFO */ #endif /* DBX_DEBUGGING_INFO */
...@@ -375,7 +386,8 @@ const struct gcc_debug_hooks xcoff_debug_hooks = ...@@ -375,7 +386,8 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
dbxout_global_decl, /* global_decl */ dbxout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */ debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
dbxout_handle_pch /* handle_pch */
}; };
#endif /* XCOFF_DEBUGGING_INFO */ #endif /* XCOFF_DEBUGGING_INFO */
...@@ -383,7 +395,6 @@ const struct gcc_debug_hooks xcoff_debug_hooks = ...@@ -383,7 +395,6 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
static void static void
dbxout_function_end () dbxout_function_end ()
{ {
static int scope_labelno = 0;
char lscope_label_name[100]; char lscope_label_name[100];
/* Convert Ltext into the appropriate format for local labels in case /* Convert Ltext into the appropriate format for local labels in case
the system doesn't insert underscores in front of user generated the system doesn't insert underscores in front of user generated
...@@ -473,7 +484,7 @@ dbxout_init (input_file_name) ...@@ -473,7 +484,7 @@ dbxout_init (input_file_name)
ASM_STABS_OP, STABS_GCC_MARKER, N_OPT); ASM_STABS_OP, STABS_GCC_MARKER, N_OPT);
#endif #endif
lastfile = input_file_name; base_input_file = lastfile = input_file_name;
next_type_number = 1; next_type_number = 1;
...@@ -559,6 +570,31 @@ dbxout_end_source_file (line) ...@@ -559,6 +570,31 @@ dbxout_end_source_file (line)
#endif #endif
} }
/* Handle a few odd cases that occur when trying to make PCH files work. */
static void
dbxout_handle_pch (unsigned at_end)
{
if (! at_end)
{
/* When using the PCH, this file will be included, so we need to output
a BINCL. */
dbxout_start_source_file (0, lastfile);
/* The base file when using the PCH won't be the same as
the base file when it's being generated. */
lastfile = NULL;
}
else
{
/* ... and an EINCL. */
dbxout_end_source_file (0);
/* Deal with cases where 'lastfile' was never actually changed. */
lastfile_is_base = lastfile == NULL;
}
}
#if defined (DBX_DEBUGGING_INFO) #if defined (DBX_DEBUGGING_INFO)
/* Output debugging info to FILE to switch to sourcefile FILENAME. */ /* Output debugging info to FILE to switch to sourcefile FILENAME. */
...@@ -567,6 +603,12 @@ dbxout_source_file (file, filename) ...@@ -567,6 +603,12 @@ dbxout_source_file (file, filename)
FILE *file; FILE *file;
const char *filename; const char *filename;
{ {
if (lastfile == 0 && lastfile_is_base)
{
lastfile = base_input_file;
lastfile_is_base = 0;
}
if (filename && (lastfile == 0 || strcmp (filename, lastfile))) if (filename && (lastfile == 0 || strcmp (filename, lastfile)))
{ {
#ifdef DBX_OUTPUT_SOURCE_FILENAME #ifdef DBX_OUTPUT_SOURCE_FILENAME
......
...@@ -43,7 +43,8 @@ const struct gcc_debug_hooks do_nothing_debug_hooks = ...@@ -43,7 +43,8 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
debug_nothing_tree, /* global_decl */ debug_nothing_tree, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */ debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
debug_nothing_int /* handle_pch */
}; };
/* This file contains implementations of each debug hook that do /* This file contains implementations of each debug hook that do
......
...@@ -101,6 +101,10 @@ struct gcc_debug_hooks ...@@ -101,6 +101,10 @@ struct gcc_debug_hooks
/* Called from final_scan_insn for any CODE_LABEL insn whose /* Called from final_scan_insn for any CODE_LABEL insn whose
LABEL_NAME is non-null. */ LABEL_NAME is non-null. */
void (* label) PARAMS ((rtx)); void (* label) PARAMS ((rtx));
/* Called after the start and before the end of writing a PCH file.
The parameter is 0 if after the start, 1 if before the end. */
void (* handle_pch) PARAMS ((unsigned int));
}; };
extern const struct gcc_debug_hooks *debug_hooks; extern const struct gcc_debug_hooks *debug_hooks;
......
...@@ -3282,7 +3282,8 @@ const struct gcc_debug_hooks dwarf2_debug_hooks = ...@@ -3282,7 +3282,8 @@ const struct gcc_debug_hooks dwarf2_debug_hooks =
emitting the abstract description of inline functions until emitting the abstract description of inline functions until
something tries to reference them. */ something tries to reference them. */
dwarf2out_abstract_function, /* outlining_inline_function */ dwarf2out_abstract_function, /* outlining_inline_function */
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
debug_nothing_int /* handle_pch */
}; };
#endif #endif
......
...@@ -1294,7 +1294,8 @@ const struct gcc_debug_hooks dwarf_debug_hooks = ...@@ -1294,7 +1294,8 @@ const struct gcc_debug_hooks dwarf_debug_hooks =
dwarfout_global_decl, dwarfout_global_decl,
dwarfout_deferred_inline_function, dwarfout_deferred_inline_function,
debug_nothing_tree, /* outlining_inline_function */ debug_nothing_tree, /* outlining_inline_function */
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
debug_nothing_int /* handle_pch */
}; };
/************************ general utility functions **************************/ /************************ general utility functions **************************/
......
...@@ -333,7 +333,8 @@ const struct gcc_debug_hooks sdb_debug_hooks = ...@@ -333,7 +333,8 @@ const struct gcc_debug_hooks sdb_debug_hooks =
sdbout_global_decl, /* global_decl */ sdbout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */ debug_nothing_tree, /* outlining_inline_function */
sdbout_label sdbout_label, /* label */
debug_nothing_int /* handle_pch */
}; };
#if 0 #if 0
......
2003-04-04 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/pch/static-3.c: New.
* gcc.dg/pch/static-3.hs: New.
* gcc.dg/pch/pch.exp: Test with -O0 -g too.
2003-04-04 Richard Henderson <rth@redhat.com> 2003-04-04 Richard Henderson <rth@redhat.com>
* g++.dg/eh/forced1.C: Use _Unwind_SjLj_ForcedUnwind as appropriate. * g++.dg/eh/forced1.C: Use _Unwind_SjLj_ForcedUnwind as appropriate.
......
...@@ -41,8 +41,11 @@ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { ...@@ -41,8 +41,11 @@ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
catch { file delete "$bname.s-gch" } catch { file delete "$bname.s-gch" }
# We don't try to use the loop-optimizing options, since they are highly # We don't try to use the loop-optimizing options, since they are highly
# unlikely to make any difference to PCH. # unlikely to make any difference to PCH. However, we do want to
foreach flags $torture_without_loops { # add -O0 -g, since users who want PCH usually want debugging and quick
# compiles.
set pch_torture [concat [list {-O0 -g}] $torture_without_loops]
foreach flags $pch_torture {
verbose "Testing $nshort, $flags" 1 verbose "Testing $nshort, $flags" 1
# For the header files, the default is to precompile. # For the header files, the default is to precompile.
......
#include "static-3.h"
int bar(int *a)
{
int i, tot;
for (i = tot = 0; i < 100; i++)
tot += a[i];
return tot;
}
static int foo(int *a)
{
int i, tot;
for (i = tot = 0; i < 100; i++)
tot += a[i];
return tot;
}
...@@ -189,7 +189,8 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks ...@@ -189,7 +189,8 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
vmsdbgout_global_decl, vmsdbgout_global_decl,
debug_nothing_tree, /* deferred_inline_function */ debug_nothing_tree, /* deferred_inline_function */
vmsdbgout_abstract_function, vmsdbgout_abstract_function,
debug_nothing_rtx /* label */ debug_nothing_rtx, /* label */
debug_nothing_int /* handle_pch */
}; };
/* Definitions of defaults for assembler-dependent names of various /* Definitions of defaults for assembler-dependent names of various
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment