forked from OSchip/llvm-project
DebugInfo: Add flag to CU to disable emission of inline debug info into the skeleton CU
In cases where .dwo/.dwp files are guaranteed to be available, skipping the extra online (in the .o file) inline info can save a substantial amount of space - see the original r221306 for more details there. llvm-svn: 279651
This commit is contained in:
parent
a01f295322
commit
a45c31a5b4
|
@ -1255,6 +1255,10 @@ def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>,
|
||||||
Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
|
Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
|
||||||
def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,
|
def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,
|
||||||
Flags<[CC1Option]>;
|
Flags<[CC1Option]>;
|
||||||
|
def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group<f_Group>,
|
||||||
|
Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
|
||||||
|
def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group<f_Group>,
|
||||||
|
Flags<[CC1Option]>;
|
||||||
def fdebug_prefix_map_EQ
|
def fdebug_prefix_map_EQ
|
||||||
: Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>, Flags<[CC1Option]>,
|
: Joined<["-"], "fdebug-prefix-map=">, Group<f_Group>, Flags<[CC1Option]>,
|
||||||
HelpText<"remap file source paths in debug info">;
|
HelpText<"remap file source paths in debug info">;
|
||||||
|
|
|
@ -194,6 +194,9 @@ CODEGENOPT(DebugTypeExtRefs, 1, 0) ///< Whether or not debug info should contain
|
||||||
CODEGENOPT(DebugExplicitImport, 1, 0) ///< Whether or not debug info should
|
CODEGENOPT(DebugExplicitImport, 1, 0) ///< Whether or not debug info should
|
||||||
///< contain explicit imports for
|
///< contain explicit imports for
|
||||||
///< anonymous namespaces
|
///< anonymous namespaces
|
||||||
|
CODEGENOPT(SplitDwarfInlining, 1, 1) ///< Whether to include inlining info in the
|
||||||
|
///< skeleton CU to allow for symbolication
|
||||||
|
///< of inline stack frames without .dwo files.
|
||||||
|
|
||||||
CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists.
|
CODEGENOPT(EmitLLVMUseLists, 1, 0) ///< Control whether to serialize use-lists.
|
||||||
|
|
||||||
|
|
|
@ -454,7 +454,8 @@ void CGDebugInfo::CreateCompileUnit() {
|
||||||
TheCU = DBuilder.createCompileUnit(
|
TheCU = DBuilder.createCompileUnit(
|
||||||
LangTag, remapDIPath(MainFileName), remapDIPath(getCurrentDirname()),
|
LangTag, remapDIPath(MainFileName), remapDIPath(getCurrentDirname()),
|
||||||
Producer, LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers,
|
Producer, LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers,
|
||||||
CGM.getCodeGenOpts().SplitDwarfFile, EmissionKind, 0 /* DWOid */);
|
CGM.getCodeGenOpts().SplitDwarfFile, EmissionKind, 0 /* DWOid */,
|
||||||
|
CGM.getCodeGenOpts().SplitDwarfInlining);
|
||||||
}
|
}
|
||||||
|
|
||||||
llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
|
llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
|
||||||
|
|
|
@ -4697,6 +4697,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||||
CmdArgs.push_back("-generate-type-units");
|
CmdArgs.push_back("-generate-type-units");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Args.hasFlag(options::OPT_fsplit_dwarf_inlining,
|
||||||
|
options::OPT_fno_split_dwarf_inlining, true))
|
||||||
|
CmdArgs.push_back("-fno-split-dwarf-inlining");
|
||||||
|
|
||||||
// CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
|
// CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
|
||||||
// default.
|
// default.
|
||||||
bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI ||
|
bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI ||
|
||||||
|
|
|
@ -499,6 +499,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||||
Opts.WholeProgramVTables = Args.hasArg(OPT_fwhole_program_vtables);
|
Opts.WholeProgramVTables = Args.hasArg(OPT_fwhole_program_vtables);
|
||||||
Opts.LTOVisibilityPublicStd = Args.hasArg(OPT_flto_visibility_public_std);
|
Opts.LTOVisibilityPublicStd = Args.hasArg(OPT_flto_visibility_public_std);
|
||||||
Opts.SplitDwarfFile = Args.getLastArgValue(OPT_split_dwarf_file);
|
Opts.SplitDwarfFile = Args.getLastArgValue(OPT_split_dwarf_file);
|
||||||
|
Opts.SplitDwarfInlining = !Args.hasArg(OPT_fno_split_dwarf_inlining);
|
||||||
Opts.DebugTypeExtRefs = Args.hasArg(OPT_dwarf_ext_refs);
|
Opts.DebugTypeExtRefs = Args.hasArg(OPT_dwarf_ext_refs);
|
||||||
Opts.DebugExplicitImport = Triple.isPS4CPU();
|
Opts.DebugExplicitImport = Triple.isPS4CPU();
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,7 @@
|
||||||
namespace std { class A; }
|
namespace std { class A; }
|
||||||
using std::A; using ::A;
|
using std::A; using ::A;
|
||||||
|
|
||||||
|
// CHECK: [[CompileUnit:![0-9]+]] = distinct !DICompileUnit({{.+}} imports: [[Imports:![0-9]+]]
|
||||||
// CHECK: [[CompileUnit:![0-9]+]] = distinct !DICompileUnit({{.+}} imports: [[Imports:![0-9]+]])
|
|
||||||
// CHECK: [[Imports]] = !{[[ImportedEntity:![0-9]+]]}
|
// CHECK: [[Imports]] = !{[[ImportedEntity:![0-9]+]]}
|
||||||
// CHECK: [[ImportedEntity]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[CompileUnit]], entity: [[STDA:![0-9]+]], line: 4)
|
// CHECK: [[ImportedEntity]] = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: [[CompileUnit]], entity: [[STDA:![0-9]+]], line: 4)
|
||||||
// CHECK: [[STDA]] = !DICompositeType(tag: DW_TAG_class_type, name: "A",
|
// CHECK: [[STDA]] = !DICompositeType(tag: DW_TAG_class_type, name: "A",
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// RUN: %clang -target x86_64-linux-gnu -gsplit-dwarf -S -emit-llvm -o - %s | FileCheck %s
|
// RUN: %clang_cc1 -debug-info-kind=limited -split-dwarf-file foo.dwo -S -emit-llvm -o - %s | FileCheck %s
|
||||||
int main (void) {
|
int main (void) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testing to ensure that the dwo name gets output into the compile unit.
|
// Testing to ensure that the dwo name gets output into the compile unit.
|
||||||
// CHECK: split-debug-filename.dwo
|
// CHECK: !DICompileUnit({{.*}}, splitDebugFilename: "foo.dwo"
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
// RUN: %clang_cc1 -debug-info-kind=limited -fno-split-dwarf-inlining -S -emit-llvm -o - %s | FileCheck %s
|
||||||
|
// RUN: %clang_cc1 -debug-info-kind=limited -S -emit-llvm -o - %s | FileCheck --check-prefix=ABSENT %s
|
||||||
|
void f(void) {}
|
||||||
|
// Verify that disabling split debug inlining info is propagated to the debug
|
||||||
|
// info metadata.
|
||||||
|
// CHECK: !DICompileUnit({{.*}}, splitDebugInlining: false
|
||||||
|
// ABSENT-NOT: splitDebugInlining
|
Loading…
Reference in New Issue