fn store()

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(())
}