GP-1792 Prevent proto override from cancelling a callfixup

This commit is contained in:
caheckman 2022-03-03 18:35:28 -05:00
parent d6cf7a97f5
commit 6aefaa106d

View file

@ -646,9 +646,9 @@ void FlowInfo::queryCall(FuncCallSpecs &fspecs)
Funcdata *otherfunc = data.getScopeLocal()->getParent()->queryFunction( fspecs.getEntryAddress() ); Funcdata *otherfunc = data.getScopeLocal()->getParent()->queryFunction( fspecs.getEntryAddress() );
if (otherfunc != (Funcdata *)0) { if (otherfunc != (Funcdata *)0) {
fspecs.setFuncdata(otherfunc); // Associate the symbol with the callsite fspecs.setFuncdata(otherfunc); // Associate the symbol with the callsite
if (!fspecs.hasModel()) { // If the prototype was not overridden if (!fspecs.hasModel() || otherfunc->getFuncProto().isInline()) { // If the prototype was not overridden
fspecs.copyFlowEffects(otherfunc->getFuncProto()); // Take the symbols's prototype fspecs.copyFlowEffects(otherfunc->getFuncProto()); // Take the flow affects of the symbol
// If the callsite is applying just the standard prototype from the symbol, // If the call site is applying just the standard prototype from the symbol,
// this postpones the full copy of the prototype until ActionDefaultParams // this postpones the full copy of the prototype until ActionDefaultParams
// Which lets "last second" changes come in, between when the function is first walked and // Which lets "last second" changes come in, between when the function is first walked and
// when it is finally decompiled // when it is finally decompiled