diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionData.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionData.java index a66dc66688..4054cc13af 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionData.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/function/editor/FunctionData.java @@ -218,7 +218,7 @@ class FunctionData extends FunctionDataView { } VariableStorage[] paramStorage = - effectiveCallingConvention.getStorageLocations(getProgram(), dataTypes, true); + effectiveCallingConvention.getStorageLocations(getProgram(), dataTypes, true, hasVarArgs); returnInfo.setStorage(paramStorage[0]); diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java index fef08a80ca..2793543343 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/lang/PrototypeModel.java @@ -398,6 +398,30 @@ public class PrototypeModel { */ public VariableStorage[] getStorageLocations(Program program, DataType[] dataTypes, boolean addAutoParams) { + return getStorageLocations(program, dataTypes, addAutoParams, false); + } + + /** + * Calculate input and output storage locations given a function prototype, + * with optional variable-argument support. + *
+ * This overload additionally sets {@link PrototypePieces#firstVarArgSlot} when
+ * {@code isVarArgs} is true, enabling {@code VarargsFilter}-based calling-convention
+ * rules (e.g. {@code