public final void setExternalProgramAddress(Address externalProgramAddress, boolean notify) {
		SymbolType type = getSymbolType();
		if (!getAddress().isExternalAddress() ||
			(type != SymbolType.LABEL && type != SymbolType.FUNCTION)) {
			throw new javax.help.UnsupportedOperationException(
				"Symbol does not support: external program address");
		}
		if (externalProgramAddress != null && !externalProgramAddress.isLoadedMemoryAddress()) {
			throw new IllegalArgumentException("Memory address required for external program");
		}
		lock.acquire();
		try {
			checkDeleted();
			if (record == null) {
				return;
			}
			String addrStr =
				externalProgramAddress != null ? externalProgramAddress.toString() : null;
			String oldData = record.getString(SymbolDatabaseAdapter.SYMBOL_EXTERNAL_PROG_ADDR_COL);
			if (!Objects.equals(addrStr, oldData)) {
				record.setString(SymbolDatabaseAdapter.SYMBOL_EXTERNAL_PROG_ADDR_COL, addrStr);
				updateRecord();
				if (notify) {
					symbolMgr.symbolDataChanged(this);
				}
			}
		}
		finally {
			lock.release();
		}
	}
Sets the symbol's external Program Address field for an external 
{@link SymbolType#LABEL} or {@link SymbolType#FUNCTION} which has an 
{@link Address#isExternalAddress() external address}.  These symbol types correspond 
to {@link CodeSymbol} and {@link FunctionSymbol} DB symbol implementations respectively.

@param externalProgramAddress the external Program Address which corresponds to the
externally linked location (may be null).
@param notify if true, a program change notification will be generated
@throws UnsupportedOperationException if symbol is neither an external {@link SymbolType#LABEL}
or {@link SymbolType#FUNCTION}.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/MemorySymbol.java