@Override
	public MemoryBlock createInitializedBlock(String name, Address start, InputStream is,
			long length, TaskMonitor monitor, boolean overlay) throws MemoryConflictException,
			AddressOverflowException, CancelledException, LockException {
		checkBlockName(name);
		lock.acquire();
		try {
			checkBlockSize(length, true);

			program.checkExclusiveAccess();
			if (monitor != null && is != null) {
				is = new MonitoredInputStream(is, monitor);
			}
			boolean createdOverlaySpace = false;
			if (overlay && !start.getAddressSpace().isOverlaySpace()) {
				start = createOverlaySpace(name, start, length);
				createdOverlaySpace = true;
			}
			else {
				checkRange(start, length);
			}
			try {
				MemoryBlockDB newBlock =
					adapter.createInitializedBlock(name, start, is, length, MemoryBlock.READ);
				addToAllAddressSet(newBlock.getStart(), newBlock.getEnd());
				initializeBlocks();
				fireBlockAdded(newBlock);
				return newBlock;
			}
			catch (IOCancelledException e) {
				// this assumes the adapter has already cleaned up any partially created buffers.
				if (createdOverlaySpace) {
					attemptOverlaySpaceRemoval((OverlayAddressSpace) start.getAddressSpace());
				}
				throw new CancelledException();
			}
			catch (IOException e) {
				program.dbError(e);
			}

			return null;
		}
		finally {
			lock.release();
		}
	}
Generate an allowed address space name from a block name. Use of unsupported characters will
be converted to underscore (includes colon and all whitespace chars). double-underscore to
ensure uniqueness.

@param blockName corresponding memory block name
@return overlay space name
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDB.java