]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[SFN] Introduce -gstatement-frontiers option, enable debug markers
authorAlexandre Oliva <aoliva@redhat.com>
Tue, 12 Dec 2017 02:16:31 +0000 (02:16 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Tue, 12 Dec 2017 02:16:31 +0000 (02:16 +0000)
Introduce a command line option to enable statement frontiers, enabled
by default in optimized builds with DWARF2+ debug information.

This patch depends on an earlier patch that completed the
infrastructure for debug markers, and on another patch that turns -g
into a negatable option prefix.

for  gcc/ChangeLog

* common.opt (gstatement-frontiers): New, setting
debug_nonbind_markers_p.
* rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate.
* toplev.c (process_options): Autodetect value for debug statement
frontiers option.
* tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate.
* doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New.

From-SVN: r255569

gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/rtl.h
gcc/toplev.c
gcc/tree.h

index 01bd2b9f49ad8f73ced4b05218dd8bb7befae661..a53e7b8173f526a05b20c7615a3fce00f2c57732 100644 (file)
@@ -1,5 +1,13 @@
 2017-12-12  Alexandre Oliva <aoliva@redhat.com>
 
+       * common.opt (gstatement-frontiers): New, setting
+       debug_nonbind_markers_p.
+       * rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate.
+       * toplev.c (process_options): Autodetect value for debug statement
+       frontiers option.
+       * tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate.
+       * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New.
+
        * cfgexpand.c (expand_gimple_basic_block): Handle begin stmt
        markers.  Integrate source bind into debug stmt expand loop.
        (pass_expand::execute): Check debug marker limit.  Avoid deep
index 57b3cd7304abdd2f775931422983bb96333ed97a..d80ae5b7f39b92ef31590d8d411cbfc9c14e6666 100644 (file)
@@ -2936,6 +2936,10 @@ gstabs+
 Common Driver JoinedOrMissing Negative(gvms)
 Generate debug information in extended STABS format.
 
+gstatement-frontiers
+Common Driver Var(debug_nonbind_markers_p) Init(2)
+Emit progressive recommended breakpoint locations.
+
 gstrict-dwarf
 Common Driver Report Var(dwarf_strict) Init(0)
 Don't emit DWARF additions beyond selected version.
index 189b3e438fff9753cd5c86f4d6af27ec48510e77..6402a5ae1734e1c1d8f7f42ba5cdec047bee0639 100644 (file)
@@ -346,6 +346,7 @@ Objective-C and Objective-C++ Dialects}.
 -ggdb  -grecord-gcc-switches  -gno-record-gcc-switches @gol
 -gstabs  -gstabs+  -gstrict-dwarf  -gno-strict-dwarf @gol
 -gcolumn-info  -gno-column-info @gol
+-gstatement-frontiers  -gno-statement-frontiers @gol
 -gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
 -fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
 -fno-eliminate-unused-debug-types @gol
@@ -7146,6 +7147,17 @@ Emit location column information into DWARF debugging information, rather
 than just file and line.
 This option is enabled by default.
 
+@item -gstatement-frontiers
+@item -gno-statement-frontiers
+@opindex gstatement-frontiers
+@opindex gno-statement-frontiers
+This option causes GCC to create markers in the internal representation
+at the beginning of statements, and to keep them roughly in place
+throughout compilation, using them to guide the output of @code{is_stmt}
+markers in the line number table.  This is enabled by default when
+compiling with optimization (@option{-Os}, @option{-O}, @option{-O2},
+@dots{}), and outputting DWARF 2 debug information at the normal level.
+
 @item -gz@r{[}=@var{type}@r{]}
 @opindex gz
 Produce compressed debug sections in DWARF format, if that is supported.
index 4de167d982cf2efb26561872d75a7646bc05385e..3ef687e5a371bcbf02339cc9ae8c9df3097a880d 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -816,7 +816,7 @@ struct GTY(()) rtvec_def {
 #define NONDEBUG_INSN_P(X) (INSN_P (X) && !DEBUG_INSN_P (X))
 
 /* Nonzero if DEBUG_MARKER_INSN_P may possibly hold.  */
-#define MAY_HAVE_DEBUG_MARKER_INSNS 0 /* debug_nonbind_markers_p */
+#define MAY_HAVE_DEBUG_MARKER_INSNS debug_nonbind_markers_p
 /* Nonzero if DEBUG_BIND_INSN_P may possibly hold.  */
 #define MAY_HAVE_DEBUG_BIND_INSNS flag_var_tracking_assignments
 /* Nonzero if DEBUG_INSN_P may possibly hold.  */
index 2f154960a170dc2fc0a14a9b6e58a0ba3ebc4788..b6e038d2f89d7862a5638ef5eb5ed2196014366e 100644 (file)
@@ -1536,6 +1536,10 @@ process_options (void)
     warning_at (UNKNOWN_LOCATION, 0,
                "var-tracking-assignments changes selective scheduling");
 
+  if (debug_nonbind_markers_p == AUTODETECT_VALUE)
+    debug_nonbind_markers_p = optimize && debug_info_level >= DINFO_LEVEL_NORMAL
+      && (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG);
+
   if (flag_tree_cselim == AUTODETECT_VALUE)
     {
       if (HAVE_conditional_move)
index 892a8ba7f707f32d1f505049f90d4b6bddee1ab5..83af3bcaf55f78c2562aeaf032b5b54ee80317ae 100644 (file)
@@ -1124,7 +1124,7 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
   ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
 
 /* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold.  */
-#define MAY_HAVE_DEBUG_MARKER_STMTS 0 /* debug_nonbind_markers_p */
+#define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
 /* Nonzero if gimple_debug_bind_p() (and thus
    gimple_debug_source_bind_p()) may possibly hold.  */
 #define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments