Skip to content

Commit cff0750

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

File tree

3 files changed

+50
-6
lines changed

3 files changed

+50
-6
lines changed

src/librustc_codegen_llvm/debuginfo/metadata.rs

+4-2
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

+23-2
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
const SPFlagOptimized = (1 << 4);
606606
}
607607
}
608+
609+
/// LLVMRustDebugEmissionKind
610+
#[derive(Copy, Clone)]
611+
#[repr(C)]
612+
pub enum DebugEmissionKind {
613+
NoDebug,
614+
FullDebug,
615+
LineTablesOnly,
616+
}
617+
618+
impl DebugEmissionKind {
619+
pub fn from_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 { pub type ModuleBuffer; }
@@ -1381,7 +1401,8 @@ extern "C" {
13811401
isOptimized: bool,
13821402
Flags: *const c_char,
13831403
RuntimeVer: c_uint,
1384-
SplitName: *const c_char)
1404+
SplitName: *const c_char,
1405+
kind: DebugEmissionKind)
13851406
-> &'a DIDescriptor;
13861407

13871408
pub fn LLVMRustDIBuilderCreateFile(Builder: &DIBuilder<'a>,

src/rustllvm/RustWrapper.cpp

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

579+
enum class LLVMRustDebugEmissionKind {
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_t LLVMRustDebugMetadataVersion() {
580599
return DEBUG_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
const char *Producer, bool isOptimized, const char *Flags,
619-
unsigned RuntimeVer, const char *SplitName) {
638+
unsigned RuntimeVer, const char *SplitName,
639+
LLVMRustDebugEmissionKind Kind) {
620640
auto *File = unwrapDI<DIFile>(FileRef);
621641

622642
return wrap(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)