>From 6dd5796f04ca249e8e59026208e90e7619534a80 Mon Sep 17 00:00:00 2001 From: Andrei Herman Date: Sun, 1 Jun 2014 11:13:09 +0300 Subject: [PATCH 1/2] Add command line option -fforce-dwarf-lexical-blocks. * gcc/c-family/c.opt: Add -fforce-dwarf-lexical-blocks flag. * gcc/c-family/c-opts.c (c_common_post_options): Limit its use to dwarf4. * gcc/doc/invoke.texi: Document the new option. Signed-off-by: Andrei Herman --- gcc/c-family/c-opts.c | 13 +++++++++++++ gcc/c-family/c.opt | 4 ++++ gcc/doc/invoke.texi | 12 ++++++++++++ 3 files changed, 29 insertions(+), 0 deletions(-) diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c index 29e9a35..7c9dbfc 100644 --- a/gcc/c-family/c-opts.c +++ b/gcc/c-family/c-opts.c @@ -936,6 +936,19 @@ c_common_post_options (const char **pfilename) #endif } + /* The -fforce-dwarf-lexical-blocks option is only relevant when debug + info is in DWARF4 format */ + if (flag_force_dwarf_blocks) { + if (write_symbols != DWARF2_DEBUG) + flag_force_dwarf_blocks = 0; + if (write_symbols == DWARF2_DEBUG && dwarf_version < 4) { + inform (input_location, + "-fforce-dwarf-lexical-blocks is only supported with " + "DWARF4 debug format"); + flag_force_dwarf_blocks = 0; + } + } + if (flag_preprocess_only) { /* Open the output now. We must do so even if flag_no_output is diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index c586e65..b66389e 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -960,6 +960,10 @@ ffor-scope C++ ObjC++ Var(flag_new_for_scope) Init(1) Scope of for-init-statement variables is local to the loop +fforce-dwarf-lexical-blocks +C C++ Var(flag_force_dwarf_blocks) +Force generation of lexical blocks in dwarf output + ffreestanding C ObjC C++ ObjC++ Do not assume that standard C libraries and \"main\" exist diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 9475594..5bf154a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -333,6 +333,7 @@ Objective-C and Objective-C++ Dialects}. -feliminate-unused-debug-symbols -femit-class-debug-always @gol -fenable-@var{kind}-@var{pass} @gol -fenable-@var{kind}-@var{pass}=@var{range-list} @gol +-fforce-dwarf-lexical-blocks @gol -fdebug-types-section -fmem-report-wpa @gol -fmem-report -fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs @gol -fopt-info @gol @@ -5200,6 +5201,17 @@ normally emits debugging information for classes because using this option increases the size of debugging information by as much as a factor of two. +@item -fforce-dwarf-lexical-blocks +Produce debug information (a DW_TAG_lexical_block) for every function +body, loop body, switch body, case statement, if-then and if-else statement, +even if the body is a single statement. Likewise, a lexical block will be +emitted for the first label of a statement. This block ends at the end of the +current lexical scope, or when a break, continue, goto or return statement is +encountered at the same lexical scope level. This option is usefull for +coverage tools that utilize the dwarf debug information. +This option only applies to C/C++ code and is available when using DWARF +Version 4 or higher. + @item -fdebug-types-section @opindex fdebug-types-section @opindex fno-debug-types-section -- 1.7.1