This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[debuglocus] Initial debuglocus table support.
- From: Andrew MacLeod <amacleod at redhat dot com>
- To: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 23 Mar 2009 09:46:24 -0400
- Subject: [debuglocus] Initial debuglocus table support.
Initial cut of support for maintaining a debuglocus table. This includes
wrappers and accessors for source locations, insn_locators, and the
debugtable itself.
No debuglocuses are actually created yet, so some of the code isn't
actually exercised yet. That comes next.
Bootstrapped and no new regressions on x86_64-unknown-linux-gnu.
Andrew
2009-03-20 Andrew MacLeod <amacleod@redhat.com>
* debuglocus.c: New file.
(init_debuglocus_table): Create and initialize a debuglocus table.
(create_debuglocus_table): Create a debugtable for the current func.
(destroy_debuglocus_table): Delete a debugtable fro the current func.
(get_debuglocus_entry): Get an entry from a debuglocus table.
(get_debuglocus): Get an entry from the current function's table.
(new_debuglocus_entry): Create a new entry in a table.
(create_debuglocus_entry): Create a new entry in cfun's table.
(create_duplicate_debuglocus): Do a deep copy of a debuglocus.
* debuglocus.h: New file.
(struct debuglocus_entry_d): Debuglocus table entry.
(struct debuglocus_table_d): Debuglocus table.
(copy_debuglocus): Copy a source locus entrypoint.
(debuglocus_lookup_locus): Get a locus from a debuglocus.
* tree-pretty-print.c (dump_generic_node): Add '*' when debuglocus is
present.
* tree.c (expand_location): Fill in debuglocus field.
* tree.h (COPY_EXPR_LOCATION, COPY_EXPR_LOCUS): Deep copy of source
location field if debuglocus is present.
* input.h (expanded_location): Add debuglocus index.
* gimple-pretty-print.c (dump_gimple_phi, dump_gimple_stmt,
dump_implicit_edges): Print '*' if debuglocus is present.
* function.h (struct function): Add debuglocus_table to function.
* print-rtl.c (print_rtx): Print '*' if insn has a debuglocus.
* print-tree.c (print_node): Print '*' if insn has a debuglocus.
* cfglayout.c (insn_debuglocus): New. Return debuglocus for insn.
* rtl.h (insn_debuglocus): extern decl.
* Makefile.in: Add debuglocus.o and debuglocus.h dependancies.
Index: debuglocus.c
===================================================================
*** debuglocus.c (revision 0)
--- debuglocus.c (revision 0)
***************
*** 0 ****
--- 1,197 ----
+ /* Routines for dealing with debuglocus
+ Copyright (C) 2009 Free Software Foundation, Inc.
+ Contributed by Andrew Macleod <amacleod@redhat.com>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, 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 COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "ggc.h"
+ #include "basic-block.h"
+ #include "diagnostic.h"
+ #include "bitmap.h"
+ #include "tree-flow.h"
+ #include "timevar.h"
+ #include "tree-dump.h"
+ #include "tree-ssa-live.h"
+ #include "tree-pass.h"
+ #include "toplev.h"
+ #include "debuglocus.h"
+ #include "hashtab.h"
+
+
+ /* This file contains data and functions required to implement debuglocus
+ support. This is a mechanism for tracking debug information in the compiler
+ by replacing the source locus field on some statements with entries into
+ a debug table. This debuglocus entry also contains the original source locus
+ allowing for transparent use of source locations on statements. */
+
+
+ #define DEBUGLOCUS_VEC_SIZE 8192
+ #define DEBUGLOCUS_VEC_MEM (DEBUGLOCUS_VEC_SIZE * sizeof (debuglocus))
+
+
+ /* Create and initialize a new debuglocus table. */
+ static debuglocus_table_t *
+ init_debuglocus_table (void)
+ {
+ debuglocus_table_t *tab;
+ debuglocus_p dlocus;
+
+ tab = (debuglocus_table_t *) xmalloc (sizeof (debuglocus_table_t));
+ tab->table = VEC_alloc (debuglocus_p, heap, 100);
+ dlocus = (debuglocus_p) xmalloc (DEBUGLOCUS_VEC_MEM);
+ VEC_safe_push (debuglocus_p, heap, tab->table, dlocus);
+
+ /* Reserve space numbner 0 for the NULL entry. */
+ tab->size = 1;
+ return tab;
+ }
+
+
+ /* Create a debuglocus table for the current function. */
+ void
+ create_debuglocus_table (void)
+ {
+ cfun->debuglocus_table = init_debuglocus_table ();
+ }
+
+
+ /* Destroy the current function's debuglocus table. */
+ void
+ destroy_debuglocus_table (void)
+ {
+ cfun->debuglocus_table = NULL;
+ }
+
+
+ /* Return a pointer to the debuglocus in table TAB at index I. */
+ static debuglocus_p
+ get_debuglocus_entry (debuglocus_table_t *tab, debuglocus_index i)
+ {
+ int v,e;
+ debuglocus_p table_vec;
+ gcc_assert (tab != NULL);
+ gcc_assert (i > 0 && i < tab->size);
+
+ v = i / DEBUGLOCUS_VEC_SIZE;
+ e = i % DEBUGLOCUS_VEC_SIZE;
+ table_vec = VEC_index (debuglocus_p, tab->table, v);
+ return &(table_vec[e]);
+ }
+
+
+ /* Return a pointer to the debuglocus entry at index I in the current table. */
+ debuglocus_p
+ get_debuglocus (debuglocus_index i)
+ {
+ return get_debuglocus_entry (cfun->debuglocus_table, i);
+ }
+
+
+ /* Create and return a pointer to a new debuglocus entry in table TAB. */
+ static debuglocus_p
+ new_debuglocus_entry (debuglocus_table_t *tab)
+ {
+ int i;
+ debuglocus_p dlocus;
+ gcc_assert (tab != NULL);
+
+ i = tab->size++;
+
+ /* Check if we need to increase the size of the table vector. */
+ if (i % DEBUGLOCUS_VEC_SIZE == 0)
+ {
+ dlocus = (debuglocus_p) xmalloc (DEBUGLOCUS_VEC_MEM);
+ VEC_safe_push (debuglocus_p, heap, tab->table, dlocus);
+ }
+
+ dlocus = get_debuglocus_entry (tab, i);
+
+ /* Initialize the entry. */
+ dlocus->locus = UNKNOWN_LOCATION;
+ dlocus->decl = NULL_TREE;
+ dlocus->order = i; /* Initially the issuing index. */
+ dlocus->prev = dlocus->next = i; /* Initialize the circular linked list. */
+ return get_debuglocus_entry (tab, i);
+ }
+
+
+ /* Create and return a pointer to a new debuglocus entry in the current
+ table. */
+ debuglocus_p
+ create_debuglocus_entry (void)
+ {
+ return new_debuglocus_entry (cfun->debuglocus_table);
+ }
+
+
+ /* Copy the debuglocus LOCUS. This requires duplicating the debuglocus, as well
+ as any chain of debuglocus's attached to it. */
+ source_location
+ create_duplicate_debuglocus (source_location locus)
+ {
+ int root_i, new_i, src_i, dest_i, prev_dest_i;
+ debuglocus_p root_p, new_p, src_p, dest_p, prev_dest_p;
+
+ gcc_assert (IS_DEBUGLOCUS_P (locus));
+
+ root_i = DEBUGLOCUS_INDEX (locus); /* Root is the locus being copied. */
+ root_p = get_debuglocus (root_i);
+
+ new_p = create_debuglocus_entry (); /* New is the copy of root. */
+ /* The order field starts as the index of the new debuglocus. */
+ new_i = new_p->order;
+
+ /* Copy the fields from the root node. */
+ new_p->decl = root_p->decl;
+ new_p->locus = root_p->locus;
+ new_p->order = root_p->order;
+
+ prev_dest_p = new_p; /* prev_dest is used for updating the links. */
+ prev_dest_i = new_i;
+
+ /* Now duplicate and link in any other locus's which are linked to root. */
+ for (src_i = root_p->next; src_i != root_i; src_i = src_p->next)
+ {
+ src_p = get_debuglocus (src_i); /* Src is the node being copied. */
+ dest_p = create_debuglocus_entry (); /* Dest is the new node. */
+ dest_i = dest_p->order;
+ /* Initialize links */
+ prev_dest_p->next = dest_i;
+ dest_p->prev = prev_dest_i;
+
+ /* copy node values. */
+ dest_p->decl = src_p->decl;
+ dest_p->locus = src_p->locus;
+ dest_p->order = src_p->order;
+
+ /* Now dest is the previous node in the new list. */
+ prev_dest_i = dest_i;
+ prev_dest_p = dest_p;
+ }
+
+ /* Update the final link. */
+ new_p->prev = prev_dest_i;
+ prev_dest_p->next = new_i;
+
+ /* Return the debuglocus for the new copy. */
+ return new_i | DEBUGLOCUS_BIT;
+ }
Index: debuglocus.h
===================================================================
*** debuglocus.h (revision 0)
--- debuglocus.h (revision 0)
***************
*** 0 ****
--- 1,89 ----
+ /* Routines for dealing with debuglocus
+ Copyright (C) 2009 Free Software Foundation, Inc.
+ Contributed by Andrew Macleod <amacleod@redhat.com>
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, 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 COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+
+ #ifndef DEBUGLOCUS_H
+ #define DEBUGLOCUS_H
+
+ /* No entry. Used for terminating lists and returning no matches. */
+ #define DEBUGLOCUS_NONE 0
+ #define IS_DEBUGLOCUS_P(LOCUS) (((LOCUS) & DEBUGLOCUS_BIT) != 0)
+ #define DEBUGLOCUS_INDEX(LOCUS) ((LOCUS) & ~DEBUGLOCUS_BIT)
+ #define GET_DEBUGLOCUS(I) (get_debuglocus (I))
+ #define GET_LOCUS_FROM_DEBUGLOCUS(DL) (debuglocus_lookup_locus (DL))
+
+ struct debuglocus_entry_d GTY((skip)) {
+ tree decl; /* debug decl */
+ int order; /* Linear ordering for emission sorting. */
+ source_location locus; /* locus of statement. */
+ int prev; /* prev link for multiple entries on a stmt. */
+ int next; /* next link for multiple entries on a stmt. */
+ };
+
+ typedef struct debuglocus_entry_d debuglocus;
+ typedef struct debuglocus_entry_d *debuglocus_p;
+
+
+ DEF_VEC_P(debuglocus_p);
+ DEF_VEC_ALLOC_P(debuglocus_p, heap);
+
+ /* The debuglocus table is implemented simply as an array of segments. This
+ allows for simple growth of the table without having to relocate existing
+ memory in use. The table can never shrink in size. */
+
+ struct debuglocus_table_d GTY((skip)) {
+ int size; /* Current number of debuglocus entries. */
+ VEC(debuglocus_p, heap) *table; /* list of Table segments. */
+ };
+
+ typedef struct debuglocus_table_d debuglocus_table_t;
+
+
+ typedef int debuglocus_index;
+
+ void create_debuglocus_table(void);
+ void destroy_debuglocus_table(void);
+ debuglocus_p create_debuglocus_entry (void);
+ debuglocus_p get_debuglocus (debuglocus_index);
+ source_location create_duplicate_debuglocus (source_location locus);
+
+
+ /* Copy a locus, performing a deep copy if it is a debuglocus. */
+ static inline source_location
+ copy_debuglocus (source_location locus)
+ {
+ if (!IS_DEBUGLOCUS_P (locus))
+ return locus;
+ else
+ return create_duplicate_debuglocus (locus);
+ }
+
+
+ /* Return the source locus associated with a debuglocus. */
+ static inline source_location
+ debuglocus_lookup_locus (source_location dlocus)
+ {
+ debuglocus_p ptr;
+
+ gcc_assert (IS_DEBUGLOCUS_P (dlocus));
+ ptr = get_debuglocus (DEBUGLOCUS_INDEX (dlocus));
+ return ptr->locus;
+ }
+
+ #endif
Index: tree-pretty-print.c
===================================================================
*** tree-pretty-print.c (revision 144935)
--- tree-pretty-print.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
#include "fixed-value.h"
#include "value-prof.h"
#include "predict.h"
+ #include "debuglocus.h"
/* Local functions, macros and variables. */
static const char *op_symbol (const_tree);
*************** dump_generic_node (pretty_printer *buffe
*** 455,460 ****
--- 456,463 ----
pp_string (buffer, " : ");
}
pp_decimal_int (buffer, xloc.line);
+ if (xloc.debuglocus != DEBUGLOCUS_NONE)
+ pp_character (buffer, '*');
pp_string (buffer, "] ");
}
Index: tree.c
===================================================================
*** tree.c (revision 144935)
--- tree.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 51,56 ****
--- 51,57 ----
#include "params.h"
#include "pointer-set.h"
#include "fixed-value.h"
+ #include "debuglocus.h"
/* Tree code classes. */
*************** expand_location (source_location loc)
*** 3565,3574 ****
xloc.line = 0;
xloc.column = 0;
xloc.sysp = 0;
}
else
{
! const struct line_map *map = linemap_lookup (line_table, loc);
xloc.file = map->to_file;
xloc.line = SOURCE_LINE (map, loc);
xloc.column = SOURCE_COLUMN (map, loc);
--- 3566,3585 ----
xloc.line = 0;
xloc.column = 0;
xloc.sysp = 0;
+ xloc.debuglocus = DEBUGLOCUS_NONE;
}
else
{
! const struct line_map *map;
! /* Look through a debuglocus. */
! if (IS_DEBUGLOCUS_P (loc))
! {
! loc = GET_LOCUS_FROM_DEBUGLOCUS (loc);
! xloc.debuglocus = DEBUGLOCUS_INDEX (loc);
! }
! else
! xloc.debuglocus = DEBUGLOCUS_NONE;
! map = linemap_lookup (line_table, loc);
xloc.file = map->to_file;
xloc.line = SOURCE_LINE (map, loc);
xloc.column = SOURCE_COLUMN (map, loc);
Index: tree.h
===================================================================
*** tree.h (revision 144970)
--- tree.h (working copy)
*************** struct tree_constructor GTY(())
*** 1565,1575 ****
--- 1565,1583 ----
return nothing. */
#define EXPR_LOCATION(NODE) (EXPR_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
#define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS)
+ /* COPY_EXPR_LOCATION duplicates any debuglocus that may be present. */
+ #define COPY_EXPR_LOCATION(NODE, LOCUS) \
+ SET_EXPR_LOCATION (((NODE), copy_debuglocus (LOCUS))
#define EXPR_HAS_LOCATION(NODE) (EXPR_LOCATION (NODE) != UNKNOWN_LOCATION)
#define EXPR_LOCUS(NODE) (EXPR_P (NODE) \
? CONST_CAST (source_location *, &(NODE)->exp.locus) \
: (source_location *) NULL)
#define SET_EXPR_LOCUS(NODE, FROM) set_expr_locus ((NODE), (FROM))
+ /* COPY_EXPR_LOCUS duplicates any debuglocus that may be present. */
+ #define COPY_EXPR_LOCUS(NODE, FROM) \
+ set_expr_locus ((NODE), \
+ (FROM) ? copy_debuglocus (*(FROM)) \
+ : (FROM))
#define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus)
#define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
Index: input.h
===================================================================
*** input.h (revision 144935)
--- input.h (working copy)
*************** typedef struct GTY (())
*** 44,49 ****
--- 44,52 ----
/* In a system header?. */
bool sysp;
+
+ /* If this is a debuglocus, set to index, otherwise DEBUGLOCUS_NONE. */
+ source_location debuglocus;
} expanded_location;
extern expanded_location expand_location (source_location);
Index: gimple-pretty-print.c
===================================================================
*** gimple-pretty-print.c (revision 144970)
--- gimple-pretty-print.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 32,37 ****
--- 32,38 ----
#include "tree-pass.h"
#include "gimple.h"
#include "value-prof.h"
+ #include "debuglocus.h"
#define INDENT(SPACE) \
do { int i; for (i = 0; i < SPACE; i++) pp_space (buffer); } while (0)
*************** dump_gimple_phi (pretty_printer *buffer,
*** 1194,1199 ****
--- 1195,1202 ----
pp_string (buffer, " : ");
}
pp_decimal_int (buffer, xloc.line);
+ if (xloc.debuglocus != DEBUGLOCUS_NONE)
+ pp_character (buffer, '*');
pp_string (buffer, "] ");
}
if (i < gimple_phi_num_args (phi) - 1)
*************** dump_gimple_stmt (pretty_printer *buffer
*** 1495,1500 ****
--- 1498,1505 ----
pp_string (buffer, " : ");
}
pp_decimal_int (buffer, xloc.line);
+ if (xloc.debuglocus != DEBUGLOCUS_NONE)
+ pp_character (buffer, '*');
pp_string (buffer, "] ");
}
*************** dump_implicit_edges (pretty_printer *buf
*** 1844,1849 ****
--- 1849,1856 ----
pp_string (buffer, " : ");
}
pp_decimal_int (buffer, goto_xloc.line);
+ if (goto_xloc.debuglocus != DEBUGLOCUS_NONE)
+ pp_character (buffer, '*');
pp_string (buffer, "] ");
}
Index: function.h
===================================================================
*** function.h (revision 144935)
--- function.h (working copy)
*************** along with GCC; see the file COPYING3.
*** 25,30 ****
--- 25,31 ----
#include "tree.h"
#include "hashtab.h"
#include "varray.h"
+ #include "debuglocus.h"
/* Stack of pending (incomplete) sequences saved by `start_sequence'.
Each element describes one pending sequence.
*************** struct function GTY(())
*** 527,532 ****
--- 528,536 ----
/* Line number of the end of the function. */
location_t function_end_locus;
+ /* Debuglocus table. */
+ struct debuglocus_table_d * GTY ((skip)) debuglocus_table;
+
/* Properties used by the pass manager. */
unsigned int curr_properties;
unsigned int last_verified;
Index: print-rtl.c
===================================================================
*** print-rtl.c (revision 144935)
--- print-rtl.c (working copy)
*************** print_rtx (const_rtx in_rtx)
*** 395,401 ****
redundant with line number information and do not print anything
when there is no location information available. */
if (INSN_LOCATOR (in_rtx) && insn_file (in_rtx))
! fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx));
#endif
}
else if (i == 6 && NOTE_P (in_rtx))
--- 395,401 ----
redundant with line number information and do not print anything
when there is no location information available. */
if (INSN_LOCATOR (in_rtx) && insn_file (in_rtx))
! fprintf(outfile, " %s:%i%s", insn_file (in_rtx), insn_line (in_rtx), (insn_debuglocus (in_rtx) ? "*" : ""));
#endif
}
else if (i == 6 && NOTE_P (in_rtx))
Index: print-tree.c
===================================================================
*** print-tree.c (revision 144935)
--- print-tree.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 31,36 ****
--- 31,37 ----
#include "tree-iterator.h"
#include "diagnostic.h"
#include "tree-flow.h"
+ #include "debuglocus.h"
/* Define the hash table of nodes already seen.
Such nodes are not repeated; brief cross-references are used. */
*************** print_node (FILE *file, const char *pref
*** 455,460 ****
--- 456,463 ----
xloc = expand_location (DECL_SOURCE_LOCATION (node));
fprintf (file, " file %s line %d col %d", xloc.file, xloc.line,
xloc.column);
+ if (xloc.debuglocus != DEBUGLOCUS_NONE)
+ fprintf (file, "* ");
if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON))
{
Index: cfglayout.c
===================================================================
*** cfglayout.c (revision 144935)
--- cfglayout.c (working copy)
*************** along with GCC; see the file COPYING3.
*** 39,44 ****
--- 39,45 ----
#include "tree-pass.h"
#include "df.h"
#include "vecprim.h"
+ #include "debuglocus.h"
/* Holds the interesting trailing notes for the function. */
rtx cfg_layout_function_footer;
*************** insn_file (const_rtx insn)
*** 557,562 ****
--- 558,580 ----
return locator_file (INSN_LOCATOR (insn));
}
+ /* Return the debuglocus associated with INSN, else return NULL. */
+ struct debuglocus_entry_d *
+ insn_debuglocus (const_rtx insn)
+ {
+ int loc = INSN_LOCATOR (insn);
+ debuglocus_p ptr = NULL;
+
+ if (loc)
+ {
+ expanded_location xloc;
+ xloc = expand_location (locator_location (loc));
+ if (xloc.debuglocus != DEBUGLOCUS_NONE)
+ ptr = GET_DEBUGLOCUS (xloc.debuglocus);
+ }
+ return ptr;
+ }
+
/* Return true if LOC1 and LOC2 locators have the same location and scope. */
bool
locator_eq (int loc1, int loc2)
Index: rtl.h
===================================================================
*** rtl.h (revision 144935)
--- rtl.h (working copy)
*************** extern rtx prev_cc0_setter (rtx);
*** 1637,1642 ****
--- 1637,1643 ----
/* In cfglayout.c */
extern int insn_line (const_rtx);
extern const char * insn_file (const_rtx);
+ extern struct debuglocus_entry_d *insn_debuglocus (const_rtx);
extern location_t locator_location (int);
extern int locator_line (int);
extern const char * locator_file (int);
Index: Makefile.in
===================================================================
*** Makefile.in (revision 144970)
--- Makefile.in (working copy)
*************** RECOG_H = recog.h
*** 820,826 ****
ALIAS_H = alias.h coretypes.h
EMIT_RTL_H = emit-rtl.h
FLAGS_H = flags.h options.h
! FUNCTION_H = function.h $(TREE_H) $(HASHTAB_H) varray.h
EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) $(MACHMODE_H) $(EMIT_RTL_H)
OPTABS_H = optabs.h insn-codes.h
REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H) $(FUNCTION_H)
--- 820,826 ----
ALIAS_H = alias.h coretypes.h
EMIT_RTL_H = emit-rtl.h
FLAGS_H = flags.h options.h
! FUNCTION_H = function.h $(TREE_H) $(HASHTAB_H) varray.h debuglocus.h
EXPR_H = expr.h insn-config.h $(FUNCTION_H) $(RTL_H) $(FLAGS_H) $(TREE_H) $(MACHMODE_H) $(EMIT_RTL_H)
OPTABS_H = optabs.h insn-codes.h
REGS_H = regs.h varray.h $(MACHMODE_H) $(OBSTACK_H) $(BASIC_BLOCK_H) $(FUNCTION_H)
*************** OBJS-common = \
*** 1081,1086 ****
--- 1081,1087 ----
dce.o \
ddg.o \
debug.o \
+ debuglocus.o \
df-byte-scan.o \
df-core.o \
df-problems.o \
*************** tree-inline.o : tree-inline.c $(CONFIG_H
*** 2070,2076 ****
$(IPA_PROP_H) value-prof.h tree-pass.h $(TARGET_H) $(INTEGRATE_H)
print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(GGC_H) langhooks.h $(REAL_H) tree-iterator.h fixed-value.h \
! $(DIAGNOSTIC_H) $(TREE_FLOW_H)
stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(PARAMS_H) $(FLAGS_H) $(FUNCTION_H) $(EXPR_H) output.h $(RTL_H) \
$(GGC_H) $(TM_P_H) $(TARGET_H) langhooks.h $(REGS_H) gt-stor-layout.h \
--- 2071,2077 ----
$(IPA_PROP_H) value-prof.h tree-pass.h $(TARGET_H) $(INTEGRATE_H)
print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(GGC_H) langhooks.h $(REAL_H) tree-iterator.h fixed-value.h \
! $(DIAGNOSTIC_H) $(TREE_FLOW_H) debuglocus.h
stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(PARAMS_H) $(FLAGS_H) $(FUNCTION_H) $(EXPR_H) output.h $(RTL_H) \
$(GGC_H) $(TM_P_H) $(TARGET_H) langhooks.h $(REGS_H) gt-stor-layout.h \
*************** tree-stdarg.o: tree-stdarg.c $(CONFIG_H)
*** 2399,2411 ****
tree-stdarg.h $(TARGET_H) langhooks.h
tree-object-size.o: tree-object-size.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(TREE_H) $(TOPLEV_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) tree-pass.h \
! tree-ssa-propagate.h
gimple.o : gimple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
$(GGC_H) $(GIMPLE_H) $(GIMPLE_H) $(DIAGNOSTIC_H) gt-gimple.h \
$(TREE_FLOW_H) value-prof.h $(FLAGS_H)
gimple-pretty-print.o : gimple-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(REAL_H) $(HASHTAB_H) $(TREE_FLOW_H) \
! $(TM_H) coretypes.h tree-pass.h $(GIMPLE_H) value-prof.h
tree-mudflap.o : $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TREE_INLINE_H) \
$(GIMPLE_H) $(DIAGNOSTIC_H) $(HASHTAB_H) langhooks.h tree-mudflap.h \
$(TM_H) coretypes.h $(TREE_DUMP_H) tree-pass.h $(CGRAPH_H) $(GGC_H) \
--- 2400,2412 ----
tree-stdarg.h $(TARGET_H) langhooks.h
tree-object-size.o: tree-object-size.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(TREE_H) $(TOPLEV_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) tree-pass.h \
! tree-ssa-propagate.h debuglocus.h
gimple.o : gimple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
$(GGC_H) $(GIMPLE_H) $(GIMPLE_H) $(DIAGNOSTIC_H) gt-gimple.h \
$(TREE_FLOW_H) value-prof.h $(FLAGS_H)
gimple-pretty-print.o : gimple-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(REAL_H) $(HASHTAB_H) $(TREE_FLOW_H) \
! $(TM_H) coretypes.h tree-pass.h $(GIMPLE_H) value-prof.h debuglocus.h
tree-mudflap.o : $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TREE_INLINE_H) \
$(GIMPLE_H) $(DIAGNOSTIC_H) $(HASHTAB_H) langhooks.h tree-mudflap.h \
$(TM_H) coretypes.h $(TREE_DUMP_H) tree-pass.h $(CGRAPH_H) $(GGC_H) \
*************** tree-nomudflap.o : $(CONFIG_H) $(SYSTEM_
*** 2418,2424 ****
tree-pretty-print.o : tree-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(REAL_H) $(HASHTAB_H) $(TREE_FLOW_H) \
$(TM_H) coretypes.h tree-iterator.h tree-chrec.h langhooks.h tree-pass.h \
! value-prof.h fixed-value.h output.h
fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(FLAGS_H) $(REAL_H) $(TOPLEV_H) $(HASHTAB_H) $(EXPR_H) $(RTL_H) \
$(GGC_H) $(TM_P_H) langhooks.h $(MD5_H) intl.h fixed-value.h $(TARGET_H) \
--- 2419,2425 ----
tree-pretty-print.o : tree-pretty-print.c $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(DIAGNOSTIC_H) $(REAL_H) $(HASHTAB_H) $(TREE_FLOW_H) \
$(TM_H) coretypes.h tree-iterator.h tree-chrec.h langhooks.h tree-pass.h \
! value-prof.h fixed-value.h output.h debuglocus.h
fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(FLAGS_H) $(REAL_H) $(TOPLEV_H) $(HASHTAB_H) $(EXPR_H) $(RTL_H) \
$(GGC_H) $(TM_P_H) langhooks.h $(MD5_H) intl.h fixed-value.h $(TARGET_H) \
*************** dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM
*** 2541,2546 ****
--- 2542,2549 ----
langhooks.h insn-config.h reload.h $(GSTAB_H) xcoffout.h output.h dbxout.h \
$(TOPLEV_H) $(GGC_H) $(OBSTACK_H) $(EXPR_H) gt-dbxout.h
debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
+ debuglocus.o : debuglocus.c debuglocus.h $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H)
sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) debug.h \
$(TREE_H) $(GGC_H) $(RTL_H) $(REGS_H) $(FLAGS_H) insn-config.h \
output.h $(TOPLEV_H) $(TM_P_H) gsyms.h langhooks.h $(TARGET_H) sdbout.h \
*************** cfglayout.o : cfglayout.c $(CONFIG_H) $(
*** 3018,3024 ****
$(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
$(FUNCTION_H) $(CFGLAYOUT_H) $(CFGLOOP_H) $(TARGET_H) gt-cfglayout.h \
$(GGC_H) alloc-pool.h $(FLAGS_H) $(OBSTACK_H) tree-pass.h vecprim.h \
! $(DF_H)
timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TIMEVAR_H) $(FLAGS_H) intl.h $(TOPLEV_H) $(RTL_H) timevar.def
regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
--- 3021,3027 ----
$(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
$(FUNCTION_H) $(CFGLAYOUT_H) $(CFGLOOP_H) $(TARGET_H) gt-cfglayout.h \
$(GGC_H) alloc-pool.h $(FLAGS_H) $(OBSTACK_H) tree-pass.h vecprim.h \
! $(DF_H) debuglocus.h
timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TIMEVAR_H) $(FLAGS_H) intl.h $(TOPLEV_H) $(RTL_H) timevar.def
regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \