mirror of
https://github.com/encounter/decomp-toolkit.git
synced 2025-06-10 00:23:28 +00:00
Prefer references to _savegpr_14
over __savegpr
Same for `__restore_gpr`, `__save_fpr` and `__restore_fpr`. A common issue that can be solved with a little bit of special-casing.
This commit is contained in:
parent
dc7e307c44
commit
c1c4373e53
@ -583,15 +583,24 @@ pub fn best_match_for_reloc(
|
|||||||
}
|
}
|
||||||
symbols.sort_by_key(|&(_, symbol)| {
|
symbols.sort_by_key(|&(_, symbol)| {
|
||||||
let mut rank = match symbol.kind {
|
let mut rank = match symbol.kind {
|
||||||
ObjSymbolKind::Function | ObjSymbolKind::Object => match reloc_kind {
|
ObjSymbolKind::Function | ObjSymbolKind::Object => {
|
||||||
ObjRelocKind::PpcAddr16Hi
|
// HACK: These are generally not referenced directly, so reduce their rank
|
||||||
| ObjRelocKind::PpcAddr16Ha
|
if matches!(
|
||||||
| ObjRelocKind::PpcAddr16Lo => 1,
|
symbol.name.as_str(),
|
||||||
ObjRelocKind::Absolute
|
"__save_gpr" | "__restore_gpr" | "__save_fpr" | "__restore_fpr"
|
||||||
| ObjRelocKind::PpcRel24
|
) {
|
||||||
| ObjRelocKind::PpcRel14
|
return 0;
|
||||||
| ObjRelocKind::PpcEmbSda21 => 2,
|
}
|
||||||
},
|
match reloc_kind {
|
||||||
|
ObjRelocKind::PpcAddr16Hi
|
||||||
|
| ObjRelocKind::PpcAddr16Ha
|
||||||
|
| ObjRelocKind::PpcAddr16Lo => 1,
|
||||||
|
ObjRelocKind::Absolute
|
||||||
|
| ObjRelocKind::PpcRel24
|
||||||
|
| ObjRelocKind::PpcRel14
|
||||||
|
| ObjRelocKind::PpcEmbSda21 => 2,
|
||||||
|
}
|
||||||
|
}
|
||||||
// Label
|
// Label
|
||||||
ObjSymbolKind::Unknown => match reloc_kind {
|
ObjSymbolKind::Unknown => match reloc_kind {
|
||||||
ObjRelocKind::PpcAddr16Hi
|
ObjRelocKind::PpcAddr16Hi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user