This patch adds a new Clang compiler flag "-gline-tables-only".

It reduces the amount of emitted debug information:
1) DIEs in .debug_info have types DW_TAG_compile_unit, DW_TAG_subprogram,
DW_TAG_inlined_subroutine (for opt builds) and DW_TAG_lexical_block only.
2) .debug_str contains only function names.
3) No debug data for types/namespaces/variables is emitted.
4) The data in .debug_line is enough to produce valid stack traces with
function names and line numbers.

Reviewed by Eric Christopher.

llvm-svn: 156160
This commit is contained in:
Alexey Samsonov
2012-05-04 07:39:27 +00:00
parent bdd2e34b1f
commit 74a3868dbb
13 changed files with 161 additions and 38 deletions

View File

@@ -184,6 +184,9 @@ static void CodeGenOptsToArgs(const CodeGenOptions &Opts, ToArgsList &Res) {
switch (Opts.DebugInfo) {
case CodeGenOptions::NoDebugInfo:
break;
case CodeGenOptions::DebugLineTablesOnly:
Res.push_back("-gline-tables-only");
break;
case CodeGenOptions::LimitedDebugInfo:
Res.push_back("-g");
Res.push_back("-flimit-debug-info");
@@ -1148,7 +1151,9 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.Inlining = Args.hasArg(OPT_fno_inline_functions) ?
CodeGenOptions::OnlyAlwaysInlining : Opts.Inlining;
if (Args.hasArg(OPT_g_Flag)) {
if (Args.hasArg(OPT_gline_tables_only)) {
Opts.DebugInfo = CodeGenOptions::DebugLineTablesOnly;
} else if (Args.hasArg(OPT_g_Flag)) {
if (Args.hasFlag(OPT_flimit_debug_info, OPT_fno_limit_debug_info, true))
Opts.DebugInfo = CodeGenOptions::LimitedDebugInfo;
else