MCPcopy Index your code
hub / github.com/encounter/objdiff / diff_objs

Function diff_objs

objdiff-core/src/diff/mod.rs:197–420  ·  view source on GitHub ↗
(
    left: Option<&Object>,
    right: Option<&Object>,
    prev: Option<&Object>,
    diff_config: &DiffObjConfig,
    mapping_config: &MappingConfig,
)

Source from the content-addressed store, hash-verified

195}
196
197pub fn diff_objs(
198 left: Option<&Object>,
199 right: Option<&Object>,
200 prev: Option<&Object>,
201 diff_config: &DiffObjConfig,
202 mapping_config: &MappingConfig,
203) -> Result<DiffObjsResult> {
204 let symbol_matches = matching_symbols(left, right, prev, mapping_config)?;
205 let section_matches = matching_sections(left, right)?;
206 let mut left = left.map(|p| (p, ObjectDiff::new_from_obj(p)));
207 let mut right = right.map(|p| (p, ObjectDiff::new_from_obj(p)));
208 let mut prev = prev.map(|p| (p, ObjectDiff::new_from_obj(p)));
209
210 for symbol_match in symbol_matches {
211 match symbol_match {
212 SymbolMatch {
213 left: Some(left_symbol_ref),
214 right: Some(right_symbol_ref),
215 prev: prev_symbol_ref,
216 section_kind,
217 } => {
218 let (left_obj, left_out) = left.as_mut().unwrap();
219 let (right_obj, right_out) = right.as_mut().unwrap();
220 match section_kind {
221 SectionKind::Code => {
222 let (left_diff, right_diff) = diff_code(
223 left_obj,
224 right_obj,
225 left_symbol_ref,
226 right_symbol_ref,
227 diff_config,
228 )?;
229 left_out.symbols[left_symbol_ref] = left_diff;
230 right_out.symbols[right_symbol_ref] = right_diff;
231
232 if let Some(prev_symbol_ref) = prev_symbol_ref {
233 let (_prev_obj, prev_out) = prev.as_mut().unwrap();
234 let (_, prev_diff) = diff_code(
235 left_obj,
236 right_obj,
237 right_symbol_ref,
238 prev_symbol_ref,
239 diff_config,
240 )?;
241 prev_out.symbols[prev_symbol_ref] = prev_diff;
242 }
243 }
244 SectionKind::Data => {
245 let (left_diff, right_diff) = diff_data_symbol(
246 left_obj,
247 right_obj,
248 left_symbol_ref,
249 right_symbol_ref,
250 )?;
251 left_out.symbols[left_symbol_ref] = left_diff;
252 right_out.symbols[right_symbol_ref] = right_diff;
253 }
254 SectionKind::Bss | SectionKind::Common => {

Callers 6

run_diffMethod · 0.85
run_buildFunction · 0.85
display_section_orderingFunction · 0.85
diff_ppcFunction · 0.85
report_objectFunction · 0.85
run_oneshotFunction · 0.85

Calls 13

matching_symbolsFunction · 0.85
matching_sectionsFunction · 0.85
diff_codeFunction · 0.85
diff_data_symbolFunction · 0.85
diff_bss_symbolFunction · 0.85
no_diff_codeFunction · 0.85
no_diff_data_symbolFunction · 0.85
diff_generic_sectionFunction · 0.85
diff_data_sectionFunction · 0.85
diff_bss_sectionFunction · 0.85
no_diff_data_sectionFunction · 0.85
no_diff_bss_sectionFunction · 0.85

Tested by 2

display_section_orderingFunction · 0.68
diff_ppcFunction · 0.68