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

Function diff_data_symbol

objdiff-core/src/diff/data.rs:363–502  ·  view source on GitHub ↗
(
    left_obj: &Object,
    right_obj: &Object,
    left_symbol_idx: usize,
    right_symbol_idx: usize,
)

Source from the content-addressed store, hash-verified

361}
362
363pub fn diff_data_symbol(
364 left_obj: &Object,
365 right_obj: &Object,
366 left_symbol_idx: usize,
367 right_symbol_idx: usize,
368) -> Result<(SymbolDiff, SymbolDiff)> {
369 let left_symbol = &left_obj.symbols[left_symbol_idx];
370 let right_symbol = &right_obj.symbols[right_symbol_idx];
371
372 let left_section_idx =
373 left_symbol.section.ok_or_else(|| anyhow!("Data symbol section not found"))?;
374 let right_section_idx =
375 right_symbol.section.ok_or_else(|| anyhow!("Data symbol section not found"))?;
376
377 let left_section = &left_obj.sections[left_section_idx];
378 let right_section = &right_obj.sections[right_section_idx];
379
380 let left_start = left_symbol
381 .address
382 .checked_sub(left_section.address)
383 .ok_or_else(|| anyhow!("Symbol address out of section bounds"))?;
384 let right_start = right_symbol
385 .address
386 .checked_sub(right_section.address)
387 .ok_or_else(|| anyhow!("Symbol address out of section bounds"))?;
388 let left_end = left_start + left_symbol.size;
389 if left_end > left_section.size {
390 return Err(anyhow!(
391 "Symbol {} size out of section bounds ({} > {})",
392 left_symbol.name,
393 left_end,
394 left_section.size
395 ));
396 }
397 let right_end = right_start + right_symbol.size;
398 if right_end > right_section.size {
399 return Err(anyhow!(
400 "Symbol {} size out of section bounds ({} > {})",
401 right_symbol.name,
402 right_end,
403 right_section.size
404 ));
405 }
406 let left_range = left_start as usize..left_end as usize;
407 let right_range = right_start as usize..right_end as usize;
408 let left_data = &left_section.data[left_range.clone()];
409 let right_data = &right_section.data[right_range.clone()];
410
411 let (bytes_match_ratio, left_data_diff, right_data_diff) =
412 diff_data_range(left_data, right_data);
413
414 let reloc_diffs = diff_data_relocs_for_range(
415 left_obj,
416 right_obj,
417 left_section_idx,
418 right_section_idx,
419 left_range,
420 right_range,

Callers 3

diff_objsFunction · 0.85
generate_mapping_symbolsFunction · 0.85
find_symbolFunction · 0.85

Calls 6

diff_data_rangeFunction · 0.85
build_data_diff_rowsFunction · 0.85
pushMethod · 0.80
cmpMethod · 0.80
data_reloc_sizeMethod · 0.45

Tested by

no test coverage detected