private boolean searchForVariadicCallData(PcodeOpAST callOp,
			Map<Address, Data> addressToCandidateData, List<FunctionCallData> functionCallDataList,
			Function function) {
		//format string should be last parameter of Function ("..." doesn't count as a parameter)
		//don't subtract 1 since input 0 is the call target
		Varnode v = callOp.getInput(function.getParameterCount());
		Data data = null;
		Address ramSpaceAddress = convertAddressToRamSpace(v.getAddress());
		if (addressToCandidateData.containsKey(ramSpaceAddress)) {
			data = addressToCandidateData.get(ramSpaceAddress);
			functionCallDataList.add(new FunctionCallData(callOp.getSeqnum().getTarget(),
				function.getName(), data.getDefaultValueRepresentation()));
			return true;
		}
		//check for offcut references into a larger defined string
		Data containing = program.getListing().getDataContaining(ramSpaceAddress);
		if (containing == null) {
			return false;
		}
		if (addressToCandidateData.containsKey(containing.getAddress())) {
			StringDataInstance entire = StringDataInstance.getStringDataInstance(containing);
			String subString = entire
					.getByteOffcut(
						(int) (ramSpaceAddress.getOffset() - containing.getAddress().getOffset()))
					.getStringValue();
			if (subString != null) {
				functionCallDataList.add(new FunctionCallData(callOp.getSeqnum().getTarget(),
					function.getName(), subString));
				return true;
			}
		}
		return false;
	}
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