From e5796c46de20856f2eee0d8651572343d4fea9db Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Sun, 5 Dec 2021 20:49:23 +0000 Subject: Apply path remapping to DW_AT_GNU_dwo_name --- compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'compiler/rustc_codegen_llvm/src') diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs b/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs index 10c7bb2eaea..f15f81a83b0 100644 --- a/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs +++ b/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs @@ -1057,9 +1057,12 @@ pub fn compile_unit_metadata( let output_filenames = tcx.output_filenames(()); let out_dir = &output_filenames.out_directory; let split_name = if tcx.sess.target_can_use_split_dwarf() { - output_filenames - .split_dwarf_path(tcx.sess.split_debuginfo(), Some(codegen_unit_name)) - .map(|f| out_dir.join(f)) + output_filenames.split_dwarf_path(tcx.sess.split_debuginfo(), Some(codegen_unit_name)).map( + |f| { + let joined = out_dir.join(f); + tcx.sess.source_map().path_mapping().map_prefix(joined).0 + }, + ) } else { None } -- cgit 1.4.1-3-g733a5 From 32810223c6b743de889eda96b442f621c293a848 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Mon, 6 Dec 2021 18:10:16 +0000 Subject: Produce .dwo file for Packed as well --- compiler/rustc_codegen_llvm/src/back/write.rs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'compiler/rustc_codegen_llvm/src') diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 460a8cc6912..8a73890ba9d 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -901,17 +901,14 @@ pub(crate) unsafe fn codegen( .generic_activity_with_arg("LLVM_module_codegen_emit_obj", &module.name[..]); let dwo_out = cgcx.output_filenames.temp_path_dwo(module_name); - let dwo_out = match cgcx.split_debuginfo { - // Don't change how DWARF is emitted in single mode (or when disabled). - SplitDebuginfo::Off | SplitDebuginfo::Packed => None, + let dwo_out = if cgcx.target_can_use_split_dwarf + && cgcx.split_debuginfo != SplitDebuginfo::Off + { // Emit (a subset of the) DWARF into a separate file in split mode. - SplitDebuginfo::Unpacked => { - if cgcx.target_can_use_split_dwarf { - Some(dwo_out.as_path()) - } else { - None - } - } + Some(dwo_out.as_path()) + } else { + // Don't change how DWARF is emitted in single mode (or when disabled). + None }; with_codegen(tm, llmod, config.no_builtins, |cpm| { @@ -948,7 +945,7 @@ pub(crate) unsafe fn codegen( Ok(module.into_compiled_module( config.emit_obj != EmitObj::None, - cgcx.target_can_use_split_dwarf && cgcx.split_debuginfo == SplitDebuginfo::Unpacked, + cgcx.target_can_use_split_dwarf && cgcx.split_debuginfo != SplitDebuginfo::Off, config.emit_bc, &cgcx.output_filenames, )) -- cgit 1.4.1-3-g733a5 From 42190bb42e06f87e24f9b4280a996175e97b73ab Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Mon, 6 Dec 2021 23:59:59 +0000 Subject: Remove redundant path join --- compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'compiler/rustc_codegen_llvm/src') diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs b/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs index f15f81a83b0..0549bf853b9 100644 --- a/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs +++ b/compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs @@ -1055,14 +1055,11 @@ pub fn compile_unit_metadata( let work_dir = tcx.sess.opts.working_dir.to_string_lossy(FileNameDisplayPreference::Remapped); let flags = "\0"; let output_filenames = tcx.output_filenames(()); - let out_dir = &output_filenames.out_directory; let split_name = if tcx.sess.target_can_use_split_dwarf() { - output_filenames.split_dwarf_path(tcx.sess.split_debuginfo(), Some(codegen_unit_name)).map( - |f| { - let joined = out_dir.join(f); - tcx.sess.source_map().path_mapping().map_prefix(joined).0 - }, - ) + output_filenames + .split_dwarf_path(tcx.sess.split_debuginfo(), Some(codegen_unit_name)) + // We get a path relative to the working directory from split_dwarf_path + .map(|f| tcx.sess.source_map().path_mapping().map_prefix(f).0) } else { None } -- cgit 1.4.1-3-g733a5 From 3d16a20c7aa117773a957db9893f83a1cb3bd653 Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Sat, 11 Dec 2021 01:11:57 +0000 Subject: Remap path in MCOptions --- compiler/rustc_codegen_llvm/src/back/write.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'compiler/rustc_codegen_llvm/src') diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 8a73890ba9d..1ddc0cf8b9b 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -205,8 +205,11 @@ pub fn target_machine_factory( let use_init_array = !sess.opts.debugging_opts.use_ctors_section.unwrap_or(sess.target.use_ctors_section); + let path_mapping = sess.source_map().path_mapping().clone(); + Arc::new(move |config: TargetMachineFactoryConfig| { - let split_dwarf_file = config.split_dwarf_file.unwrap_or_default(); + let split_dwarf_file = + path_mapping.map_prefix(config.split_dwarf_file.unwrap_or_default()).0; let split_dwarf_file = CString::new(split_dwarf_file.to_str().unwrap()).unwrap(); let tm = unsafe { -- cgit 1.4.1-3-g733a5 From 707f72c1dffc33f2980945371aa4fb2d9f77af6d Mon Sep 17 00:00:00 2001 From: Andy Wang Date: Mon, 13 Dec 2021 11:40:59 +0000 Subject: Revert "Produce .dwo file for Packed as well" This reverts commit 32810223c6b743de889eda96b442f621c293a848. --- compiler/rustc_codegen_llvm/src/back/write.rs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'compiler/rustc_codegen_llvm/src') diff --git a/compiler/rustc_codegen_llvm/src/back/write.rs b/compiler/rustc_codegen_llvm/src/back/write.rs index 1ddc0cf8b9b..10170bd7b0e 100644 --- a/compiler/rustc_codegen_llvm/src/back/write.rs +++ b/compiler/rustc_codegen_llvm/src/back/write.rs @@ -904,14 +904,17 @@ pub(crate) unsafe fn codegen( .generic_activity_with_arg("LLVM_module_codegen_emit_obj", &module.name[..]); let dwo_out = cgcx.output_filenames.temp_path_dwo(module_name); - let dwo_out = if cgcx.target_can_use_split_dwarf - && cgcx.split_debuginfo != SplitDebuginfo::Off - { - // Emit (a subset of the) DWARF into a separate file in split mode. - Some(dwo_out.as_path()) - } else { + let dwo_out = match cgcx.split_debuginfo { // Don't change how DWARF is emitted in single mode (or when disabled). - None + SplitDebuginfo::Off | SplitDebuginfo::Packed => None, + // Emit (a subset of the) DWARF into a separate file in split mode. + SplitDebuginfo::Unpacked => { + if cgcx.target_can_use_split_dwarf { + Some(dwo_out.as_path()) + } else { + None + } + } }; with_codegen(tm, llmod, config.no_builtins, |cpm| { @@ -948,7 +951,7 @@ pub(crate) unsafe fn codegen( Ok(module.into_compiled_module( config.emit_obj != EmitObj::None, - cgcx.target_can_use_split_dwarf && cgcx.split_debuginfo != SplitDebuginfo::Off, + cgcx.target_can_use_split_dwarf && cgcx.split_debuginfo == SplitDebuginfo::Unpacked, config.emit_bc, &cgcx.output_filenames, )) -- cgit 1.4.1-3-g733a5