mirror of
https://github.com/encounter/decomp-toolkit.git
synced 2025-06-26 16:33:30 +00:00
dol diff: Conditionally warn on symbol size mismatch
When a symbol's data matches but the size differs due to padding bytes, print a warning and continue. Resolves #35
This commit is contained in:
parent
e55ade10ec
commit
b9642321a1
@ -1720,7 +1720,7 @@ fn diff(args: DiffArgs) -> Result<()> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
found = true;
|
found = true;
|
||||||
} else if linked_sym.kind == orig_sym.kind && linked_sym.size == orig_sym.size {
|
} else if linked_sym.kind == orig_sym.kind {
|
||||||
// Fuzzy match
|
// Fuzzy match
|
||||||
let orig_data = orig_section.data_range(
|
let orig_data = orig_section.data_range(
|
||||||
orig_sym.address as u32,
|
orig_sym.address as u32,
|
||||||
@ -1730,7 +1730,12 @@ fn diff(args: DiffArgs) -> Result<()> {
|
|||||||
linked_sym.address as u32,
|
linked_sym.address as u32,
|
||||||
linked_sym.address as u32 + linked_sym.size as u32,
|
linked_sym.address as u32 + linked_sym.size as u32,
|
||||||
)?;
|
)?;
|
||||||
if orig_data == linked_data {
|
let len = orig_data.len().min(linked_data.len());
|
||||||
|
if orig_data[..len] == linked_data[..len]
|
||||||
|
// Ignore padding differences
|
||||||
|
&& orig_data[len..].iter().all(|&b| b == 0)
|
||||||
|
&& linked_data[len..].iter().all(|&b| b == 0)
|
||||||
|
{
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1794,7 +1799,11 @@ fn diff(args: DiffArgs) -> Result<()> {
|
|||||||
linked_sym.address as u32,
|
linked_sym.address as u32,
|
||||||
linked_sym.address as u32 + linked_sym.size as u32,
|
linked_sym.address as u32 + linked_sym.size as u32,
|
||||||
)?;
|
)?;
|
||||||
if orig_data != linked_data {
|
let len = orig_data.len().min(linked_data.len());
|
||||||
|
if orig_data[..len] != linked_data[..len]
|
||||||
|
|| orig_data[len..].iter().any(|&b| b != 0)
|
||||||
|
|| linked_data[len..].iter().any(|&b| b != 0)
|
||||||
|
{
|
||||||
log::error!(
|
log::error!(
|
||||||
"Data mismatch for {} (type {:?}, size {:#X}) at {:#010X}",
|
"Data mismatch for {} (type {:?}, size {:#X}) at {:#010X}",
|
||||||
orig_sym.name,
|
orig_sym.name,
|
||||||
@ -1834,6 +1843,15 @@ fn diff(args: DiffArgs) -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::process::exit(1);
|
std::process::exit(1);
|
||||||
|
} else if orig_data.len() != linked_data.len() {
|
||||||
|
log::error!(
|
||||||
|
"Size mismatch for {} (type {:?}) at {:#010X}: Expected {:#X}, found {:#X}",
|
||||||
|
orig_sym.name,
|
||||||
|
orig_sym.kind,
|
||||||
|
orig_sym.address,
|
||||||
|
orig_data.len(),
|
||||||
|
linked_data.len()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user