public boolean isPossibleFunctionPointer(Program program, Address address)
			throws CancelledException {

		Address referencedAddress = getPointer(address);

		if (referencedAddress == null) {
			return false;
		}

		Address normalizedReferencedAddress =
			PseudoDisassembler.getNormalizedDisassemblyAddress(program, referencedAddress);

		if (normalizedReferencedAddress == null) {
			return false;
		}

		Function function = getFunctionAt(normalizedReferencedAddress);
		if (function != null) {
			return true;
		}

		AddressSetView executeSet = program.getMemory().getExecuteSet();

		if (!executeSet.contains(normalizedReferencedAddress)) {
			return false;
		}

		Instruction instruction = getInstructionAt(normalizedReferencedAddress);
		if (instruction != null) {
			createFunction(normalizedReferencedAddress, null);
			return true;

		}

		boolean disassemble = disassemble(normalizedReferencedAddress);
		if (disassemble) {

			Listing listing = program.getListing();

			// check for the case where there is conflicting data at the thumb offset function
			// pointer and if so clear the data and redisassemble and remove the bad bookmark
			//	long originalLongValue = extendedFlatAPI.getLongValueAt(address);
			if (!referencedAddress.equals(normalizedReferencedAddress)) {

				Data dataAt = listing.getDataAt(referencedAddress);
				if (dataAt != null && dataAt.isDefined()) {
					clearListing(referencedAddress);
					disassemble = disassemble(address);

					Bookmark bookmark =
						getBookmarkAt(program, normalizedReferencedAddress, BookmarkType.ERROR,
							"Bad Instruction", "conflicting data");
					if (bookmark != null) {
						removeBookmark(bookmark);
					}
				}
			}

			createFunction(normalizedReferencedAddress, null);
			return true;
		}
		return false;
	}
Method to determine if the given address contains a possible function pointer
@param program the given program

@param address the given address
@return true if the given address contains a possible function pointer or
        false otherwise
@throws CancelledException if cancelled
Ghidra/Features/Decompiler/ghidra_scripts/classrecovery/ExtendedFlatProgramAPI.java