in src/dumper.rs [203:246]
fn store(output: &Output, check_cfi: bool, object_info: ObjectInfo) -> common::Result<()> {
anyhow::ensure!(!check_cfi || object_info.has_stack(), "No CFI data");
let sym_store_path = |dir: &Path| -> Option<PathBuf> {
if dir.to_str()?.is_empty() {
return None;
}
let mut pb = PathBuf::new();
pb.push(dir);
pb.push(utils::get_path_for_sym(
object_info.get_name(),
object_info.get_debug_id(),
));
Some(pb)
};
let (foutput, store) = match output {
Output::File(fo) => (Some(fo), None),
Output::Store(store) => (None, sym_store_path(store)),
Output::FileAndStore {
file,
store_directory,
} => (Some(file), sym_store_path(store_directory)),
};
if let Some(store) = store {
fs::create_dir_all(store.parent().unwrap())?;
let fo = FileOutput::Path(store);
let output = get_writer_for_sym(&fo);
object_info.dump(output)?;
info!("Store symbols at {}", fo);
}
if let Some(file) = foutput {
let writer = get_writer_for_sym(file);
object_info.dump(writer)?;
info!("Write symbols at {}", file);
}
Ok(())
}