cg_llvm: implement split dwarf support
This commit implements Split DWARF support, wiring up the flag (added in earlier commits) to the modified FFI wrapper (also from earlier commits). Signed-off-by: David Wood <david@davidtw.co>
This commit is contained in:
parent
241160de72
commit
e3fdae9d81
8 changed files with 228 additions and 46 deletions
|
@ -550,6 +550,7 @@ impl_stable_hash_via_hash!(OutputFilenames);
|
|||
|
||||
pub const RLINK_EXT: &str = "rlink";
|
||||
pub const RUST_CGU_EXT: &str = "rcgu";
|
||||
pub const DWARF_OBJECT_EXT: &str = "dwo";
|
||||
|
||||
impl OutputFilenames {
|
||||
pub fn new(
|
||||
|
@ -583,7 +584,12 @@ impl OutputFilenames {
|
|||
self.temp_path_ext(extension, codegen_unit_name)
|
||||
}
|
||||
|
||||
/// Like temp_path, but also supports things where there is no corresponding
|
||||
/// Like `temp_path`, but specifically for dwarf objects.
|
||||
pub fn temp_path_dwo(&self, codegen_unit_name: Option<&str>) -> PathBuf {
|
||||
self.temp_path_ext(DWARF_OBJECT_EXT, codegen_unit_name)
|
||||
}
|
||||
|
||||
/// Like `temp_path`, but also supports things where there is no corresponding
|
||||
/// OutputType, like noopt-bitcode or lto-bitcode.
|
||||
pub fn temp_path_ext(&self, ext: &str, codegen_unit_name: Option<&str>) -> PathBuf {
|
||||
let mut extension = String::new();
|
||||
|
@ -610,6 +616,26 @@ impl OutputFilenames {
|
|||
path.set_extension(extension);
|
||||
path
|
||||
}
|
||||
|
||||
/// Returns the path for the Split DWARF file - this can differ depending on which Split DWARF
|
||||
/// mode is being used, which is the logic that this function is intended to encapsulate.
|
||||
pub fn split_dwarf_file(
|
||||
&self,
|
||||
split_dwarf_kind: SplitDwarfKind,
|
||||
cgu_name: Option<&str>,
|
||||
) -> Option<PathBuf> {
|
||||
let obj_out = self.temp_path(OutputType::Object, cgu_name);
|
||||
let dwo_out = self.temp_path_dwo(cgu_name);
|
||||
match split_dwarf_kind {
|
||||
SplitDwarfKind::None => None,
|
||||
// Single mode doesn't change how DWARF is emitted, but does add Split DWARF attributes
|
||||
// (pointing at the path which is being determined here). Use the path to the current
|
||||
// object file.
|
||||
SplitDwarfKind::Single => Some(obj_out),
|
||||
// Split mode emits the DWARF into a different file, use that path.
|
||||
SplitDwarfKind::Split => Some(dwo_out),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn host_triple() -> &'static str {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue