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

Function no_diff_data_symbol

objdiff-core/src/diff/data.rs:312–361  ·  view source on GitHub ↗
(obj: &Object, symbol_index: usize)

Source from the content-addressed store, hash-verified

310}
311
312pub fn no_diff_data_symbol(obj: &Object, symbol_index: usize) -> Result<SymbolDiff> {
313 let symbol = &obj.symbols[symbol_index];
314 let section_idx = symbol.section.ok_or_else(|| anyhow!("Data symbol section not found"))?;
315 let section = &obj.sections[section_idx];
316
317 let start = symbol
318 .address
319 .checked_sub(section.address)
320 .ok_or_else(|| anyhow!("Symbol address out of section bounds"))?;
321 let end = start + symbol.size;
322 if end > section.size {
323 return Err(anyhow!(
324 "Symbol {} size out of section bounds ({} > {})",
325 symbol.name,
326 end,
327 section.size
328 ));
329 }
330 let range = start as usize..end as usize;
331 let data = &section.data[range.clone()];
332
333 let data_diff = vec![DataDiff {
334 data: data.to_vec(),
335 kind: DataDiffKind::None,
336 size: symbol.size as usize,
337 }];
338
339 let mut reloc_diffs = Vec::new();
340 for reloc in section.relocations.iter() {
341 if !range.contains(&(reloc.address as usize)) {
342 continue;
343 }
344 let reloc_len = obj.arch.data_reloc_size(reloc.flags);
345 let range = reloc.address..reloc.address + reloc_len as u64;
346 reloc_diffs.push(DataRelocationDiff {
347 reloc: reloc.clone(),
348 kind: DataDiffKind::None,
349 range,
350 });
351 }
352
353 let data_rows = build_data_diff_rows(&data_diff, &reloc_diffs, symbol.address);
354 Ok(SymbolDiff {
355 target_symbol: None,
356 match_percent: None,
357 diff_score: None,
358 data_rows,
359 ..Default::default()
360 })
361}
362
363pub fn diff_data_symbol(
364 left_obj: &Object,

Callers 1

diff_objsFunction · 0.85

Calls 3

build_data_diff_rowsFunction · 0.85
pushMethod · 0.80
data_reloc_sizeMethod · 0.45

Tested by

no test coverage detected