public List<FunctionCallData> parseFunctionForCallData(List<PcodeOpAST> pcodeOps,
			Map<Address, Data> addressToCandidateData, Set<String> variadicFunctionNames) {

		if (pcodeOps == null || addressToCandidateData == null || variadicFunctionNames == null ||
			this.program == null) {
			return null;
		}
		List<FunctionCallData> functionCallDataList = new ArrayList<>();
		for (PcodeOpAST callOp : pcodeOps) {
			if (callOp.getOpcode() != PcodeOp.CALL) {
				continue;
			}
			Varnode callTarget = callOp.getInput(0);
			if (callTarget == null) {
				continue;
			}
			FunctionManager functionManager = program.getFunctionManager();
			Function function = functionManager.getFunctionAt(callTarget.getAddress());
			if (function == null) {
				continue;
			}
			String functionName = function.getName();
			if (!variadicFunctionNames.contains(functionName)) {
				continue;
			}
			// <= since first input of callOp is call target and 
			// so not a function argument
			if (callOp.getNumInputs() <= function.getParameterCount()) {
				continue;
			}
			boolean hasDefinedFormatString = searchForVariadicCallData(callOp,
				addressToCandidateData, functionCallDataList, function);
			if (!hasDefinedFormatString) {
				searchForHiddenFormatStrings(callOp, functionCallDataList, function);
			}
		}
		return functionCallDataList;
	}
Takes pcode ops of a function and parses them to determine whether there are
any calls to variadic functions that use format Strings.

@param pcodeOps            List of PcodeOpAST for a function
@param addressToCandidateData map of Addresses to format String data
@param variadicFunctionNames   Set of variadic functions to look for
@return List of variadic functions that the current function calls
Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/string/variadic/PcodeFunctionParser.java