@Override
	public ProgramOverlayAddressSpace createOverlaySpace(String overlaySpaceName,
			AddressSpace baseSpace) throws IllegalStateException, DuplicateNameException,
			InvalidNameException, LockException {

		checkExclusiveAccess();

		if (!addressFactory.isValidOverlayBaseSpace(baseSpace)) {
			throw new IllegalArgumentException(
				"Invalid address space for overlay: " + baseSpace.getName());
		}

		ProgramOverlayAddressSpace ovSpace = null;
		lock.acquire();
		try {
			if (imageBaseOverride) {
				throw new IllegalStateException(
					"Overlay spaces may not be created while an image-base override is active");
			}
			ovSpace =
				overlaySpaceAdapter.createOverlaySpace(addressFactory, overlaySpaceName, baseSpace);

			setChanged(ProgramEvent.OVERLAY_SPACE_ADDED, overlaySpaceName, null);
		}
		catch (IOException e) {
			dbError(e);
		}
		finally {
			lock.release();
		}
		return ovSpace;
	}
Notification that a symbol was added.
@param symbol the symbol that was added.
@param eventType the type of change
@param addr the address of the symbol that added
@param oldValue old value depends on the type of the change
@param newValue old value depends on the type of the change
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/ProgramDB.java