protected void moveLowLevel(Address newAddress, String newName, Namespace newNamespace,
			SourceType newSource, boolean pinned) {
		lock.acquire();
		try {
			checkDeleted();

			// update the address to the new location
			long newAddressKey = symbolMgr.getAddressMap().getKey(newAddress, true);
			record.setLongValue(SymbolDatabaseAdapter.SYMBOL_ADDR_COL, newAddressKey);

			// if the primary field is set, be sure to update it to the new address as well
			if (record.getFieldValue(SymbolDatabaseAdapter.SYMBOL_PRIMARY_COL) != null) {
				record.setLongValue(SymbolDatabaseAdapter.SYMBOL_PRIMARY_COL, newAddressKey);
			}
			if (newName != null) {
				record.setString(SymbolDatabaseAdapter.SYMBOL_NAME_COL, newName);
			}
			if (newNamespace != null) {
				record.setLongValue(SymbolDatabaseAdapter.SYMBOL_PARENT_ID_COL,
					newNamespace.getID());
			}
			if (newSource != null) {
				setSourceFlagBit(newSource);
			}
			updatePinnedFlag(pinned);
			updateRecord();
			setInvalid();
		}
		finally {
			lock.release();
		}
	}
low level record adjustment to move a symbol. Used only when moving a memory block or
 changing the image base.
 
@param newAddress the new address for the symbol
@param newName the new name for the symbol (or null if the name should stay the same)
@param newNamespace the new namespace for the symbol (or null if it should stay the same)
@param newSource the new SourceType for the symbol (or null if it should stay the same)
@param pinned the new pinned state
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/MemorySymbol.java