mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
GP-1924 Don't override previous dynamic mapping
This commit is contained in:
parent
2f414bf570
commit
c5c74d987f
1 changed files with 4 additions and 5 deletions
|
@ -1177,12 +1177,11 @@ bool Funcdata::attemptDynamicMapping(SymbolEntry *entry,DynamicHash &dhash)
|
||||||
dhash.clear();
|
dhash.clear();
|
||||||
Varnode *vn = dhash.findVarnode(this,entry->getFirstUseAddress(),entry->getHash());
|
Varnode *vn = dhash.findVarnode(this,entry->getFirstUseAddress(),entry->getHash());
|
||||||
if (vn == (Varnode *)0) return false;
|
if (vn == (Varnode *)0) return false;
|
||||||
|
if (vn->getSymbolEntry() != (SymbolEntry *)0) return false; // Varnode is already labeled
|
||||||
if (entry->getSymbol()->getCategory() == 1) { // Is this an equate symbol
|
if (entry->getSymbol()->getCategory() == 1) { // Is this an equate symbol
|
||||||
if (vn->mapentry != entry) { // Check we haven't marked this before
|
|
||||||
vn->setSymbolEntry(entry);
|
vn->setSymbolEntry(entry);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (entry->getSize() == vn->getSize()) {
|
else if (entry->getSize() == vn->getSize()) {
|
||||||
if (vn->setSymbolProperties(entry))
|
if (vn->setSymbolProperties(entry))
|
||||||
return true;
|
return true;
|
||||||
|
@ -1205,7 +1204,7 @@ bool Funcdata::attemptDynamicMappingLate(SymbolEntry *entry,DynamicHash &dhash)
|
||||||
Varnode *vn = dhash.findVarnode(this,entry->getFirstUseAddress(),entry->getHash());
|
Varnode *vn = dhash.findVarnode(this,entry->getFirstUseAddress(),entry->getHash());
|
||||||
if (vn == (Varnode *)0)
|
if (vn == (Varnode *)0)
|
||||||
return false;
|
return false;
|
||||||
if (vn->getSymbolEntry() == entry) return false; // Already applied it
|
if (vn->getSymbolEntry() != (SymbolEntry *)0) return false; // Symbol already applied
|
||||||
Symbol *sym = entry->getSymbol();
|
Symbol *sym = entry->getSymbol();
|
||||||
if (sym->getCategory() == 1) { // Equate symbol does not depend on size
|
if (sym->getCategory() == 1) { // Equate symbol does not depend on size
|
||||||
vn->setSymbolEntry(entry);
|
vn->setSymbolEntry(entry);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue