public static String getDynamicName(Program program, Address addr) {
		if (addr == null || !addr.isMemoryAddress()) {
			return null;
		}

		Listing listing = program.getListing();
		CodeUnit codeUnit = listing.getCodeUnitContaining(addr);
		int refLevel = program.getReferenceManager().getReferenceLevel(addr);
		if (codeUnit == null) {
			return getDynamicName(refLevel, addr);
		}

		if (codeUnit instanceof Instruction) {
			return getDynamicInstructionName(program, (Instruction) codeUnit, addr, refLevel);
		}

		// must be a data
		return getDynamicDataName((Data) codeUnit, addr, refLevel);
	}
Create a name for a dynamic symbol.
@param program the current program
@param addr the address of the symbol for which to generate a name
@return a name for the symbol at the given address
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/symbol/SymbolUtilities.java