Skip to content

Commit cff0750

Browse files
committed
Set the DICompileUnit emissionKind
1 parent 75d0bce commit cff0750

3 files changed

Lines changed: 50 additions & 6 deletions

File tree

‎src/librustc_codegen_llvm/debuginfo/metadata.rs‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use value::Value;
1313

1414
use llvm;
1515
use llvm::debuginfo::{DIArray,DIType,DIFile,DIScope,DIDescriptor,
16-
DICompositeType,DILexicalBlock,DIFlags};
16+
DICompositeType,DILexicalBlock,DIFlags,DebugEmissionKind};
1717
use llvm_util;
1818

1919
use rustc_data_structures::stable_hasher::{HashStable,StableHasher};
@@ -846,6 +846,7 @@ pub fn compile_unit_metadata(tcx: TyCtxt,
846846
let producer = CString::new(producer).unwrap();
847847
let flags = "\0";
848848
let split_name = "\0";
849+
let kind = DebugEmissionKind::from_generic(tcx.sess.opts.debuginfo);
849850

850851
unsafe{
851852
let file_metadata = llvm::LLVMRustDIBuilderCreateFile(
@@ -859,7 +860,8 @@ pub fn compile_unit_metadata(tcx: TyCtxt,
859860
tcx.sess.opts.optimize != config::OptLevel::No,
860861
flags.as_ptr()as*const_,
861862
0,
862-
split_name.as_ptr()as*const_);
863+
split_name.as_ptr()as*const_,
864+
kind);
863865

864866
if tcx.sess.opts.debugging_opts.profile{
865867
let cu_desc_metadata = llvm::LLVMRustMetadataAsValue(debug_context.llcontext,

‎src/librustc_codegen_llvm/llvm/ffi.rs‎

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::debuginfo::{
22
DIBuilder,DIDescriptor,DIFile,DILexicalBlock,DISubprogram,DIType,
33
DIBasicType,DIDerivedType,DICompositeType,DIScope,DIVariable,
44
DIGlobalVariableExpression,DIArray,DISubrange,DITemplateTypeParameter,DIEnumerator,
5-
DINameSpace,DIFlags,DISPFlags,
5+
DINameSpace,DIFlags,DISPFlags,DebugEmissionKind,
66
};
77

88
use libc::{c_uint, c_int, size_t, c_char};
@@ -605,6 +605,26 @@ pub mod debuginfo {
605605
constSPFlagOptimized = (1 << 4);
606606
}
607607
}
608+
609+
/// LLVMRustDebugEmissionKind
610+
#[derive(Copy,Clone)]
611+
#[repr(C)]
612+
pubenumDebugEmissionKind{
613+
NoDebug,
614+
FullDebug,
615+
LineTablesOnly,
616+
}
617+
618+
implDebugEmissionKind{
619+
pubfnfrom_generic(kind: rustc::session::config::DebugInfo) -> Self{
620+
use rustc::session::config::DebugInfo;
621+
match kind {
622+
DebugInfo::None => DebugEmissionKind::NoDebug,
623+
DebugInfo::Limited => DebugEmissionKind::LineTablesOnly,
624+
DebugInfo::Full => DebugEmissionKind::FullDebug,
625+
}
626+
}
627+
}
608628
}
609629

610630
extern{pubtypeModuleBuffer;}
@@ -1381,7 +1401,8 @@ extern "C" {
13811401
isOptimized:bool,
13821402
Flags:*constc_char,
13831403
RuntimeVer:c_uint,
1384-
SplitName:*constc_char)
1404+
SplitName:*constc_char,
1405+
kind:DebugEmissionKind)
13851406
-> &'aDIDescriptor;
13861407

13871408
pubfnLLVMRustDIBuilderCreateFile(Builder:&DIBuilder<'a>,

‎src/rustllvm/RustWrapper.cpp‎

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,25 @@ static DISubprogram::DISPFlags fromRust(LLVMRustDISPFlags SPFlags) {
576576
}
577577
#endif
578578

579+
enumclassLLVMRustDebugEmissionKind {
580+
NoDebug,
581+
FullDebug,
582+
LineTablesOnly,
583+
};
584+
585+
static DICompileUnit::DebugEmissionKind fromRust(LLVMRustDebugEmissionKind Kind) {
586+
switch (Kind) {
587+
case LLVMRustDebugEmissionKind::NoDebug:
588+
return DICompileUnit::DebugEmissionKind::NoDebug;
589+
case LLVMRustDebugEmissionKind::FullDebug:
590+
return DICompileUnit::DebugEmissionKind::FullDebug;
591+
case LLVMRustDebugEmissionKind::LineTablesOnly:
592+
return DICompileUnit::DebugEmissionKind::LineTablesOnly;
593+
default:
594+
report_fatal_error("bad DebugEmissionKind.");
595+
}
596+
}
597+
579598
extern"C"uint32_tLLVMRustDebugMetadataVersion() {
580599
returnDEBUG_METADATA_VERSION;
581600
}
@@ -616,11 +635,13 @@ extern "C" void LLVMRustDIBuilderFinalize(LLVMRustDIBuilderRef Builder) {
616635
extern"C" LLVMMetadataRef LLVMRustDIBuilderCreateCompileUnit(
617636
LLVMRustDIBuilderRef Builder, unsigned Lang, LLVMMetadataRef FileRef,
618637
constchar *Producer, bool isOptimized, constchar *Flags,
619-
unsigned RuntimeVer, constchar *SplitName) {
638+
unsigned RuntimeVer, constchar *SplitName,
639+
LLVMRustDebugEmissionKind Kind) {
620640
auto *File = unwrapDI<DIFile>(FileRef);
621641

622642
returnwrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
623-
Flags, RuntimeVer, SplitName));
643+
Flags, RuntimeVer, SplitName,
644+
fromRust(Kind)));
624645
}
625646

626647
extern"C" LLVMMetadataRef

0 commit comments

Comments
 (0)