private PcodeOp[] checkForUponReturnCallMechanismInjection(Program prog, Function func,
			Address target, Instruction instr) {
		PrototypeModel callingConvention = null;
		if (func != null) {
			callingConvention = func.getCallingConvention();
		}
		if (callingConvention == null) {
			callingConvention = prog.getCompilerSpec().getDefaultCallingConvention();
		}

		// magic incantation to get the uponreturn injection from the injection library
		String injectionName = callingConvention.getName() + "@@inject_uponreturn";

		PcodeInjectLibrary snippetLibrary = prog.getCompilerSpec().getPcodeInjectLibrary();
		InjectPayload payload =
			snippetLibrary.getPayload(InjectPayload.CALLMECHANISM_TYPE, injectionName);
		if (payload == null) {
			return null;
		}
		InjectContext con = snippetLibrary.buildInjectContext();
		con.baseAddr = instr.getMinAddress();
		con.nextAddr = con.baseAddr.add(instr.getDefaultFallThroughOffset());
		con.callAddr = target;
		con.refAddr = con.callAddr;
		try {
			return payload.getPcode(prog, con);
		}
		catch (Exception e) {
			Msg.warn(this, e.getMessage());
		}
		return null;
	}
Apply pcode from an instruction to current varnode context.
Following a flow will push a new context state based on the current context state onto the contextStack

@param contextStack context state stack
@param vContext varnode context
@param instruction instruction to apply pcode from
@param continueAfterHittingFlow true if should continue after hitting an already processed flow
@param monitor to cancel
@return true to to continue this instruction path, false otherwise
Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java