@Override
	protected AbstractSpaceMap<TaintTraceSpace> newSpaceMap() {
		return new CacheingSpaceMap<PcodeTracePropertyAccess<String>, TaintTraceSpace>() {
			@Override
			protected PcodeTracePropertyAccess<String> getBacking(AddressSpace space) {
				return property;
			}

			@Override
			protected TaintTraceSpace newSpace(AddressSpace space,
					PcodeTracePropertyAccess<String> backing) {
				return new TaintTraceSpace(space, property);
			}

			@Override
			public AbstractSpaceMap<TaintTraceSpace> fork() {
				throw new UnsupportedOperationException();
			}

			@Override
			public TaintTraceSpace fork(TaintTraceSpace s) {
				throw new UnsupportedOperationException();
			}
		};
	}
{@inheritDoc}

<p>
Here we create a map that uses {@link TaintTraceSpace}s. The framework provides the concept
of a space map where storage is actually a cache backed by some other object. The backing
object we'll use here is {@link TracePropertyMapSpace}, which is provided by the
TraceModeling module. We'll need a little bit of extra logic for fetching a register space
vs. a plain memory space, but after that, we need not care which address space the backing
object is for.
Ghidra/Debug/TaintAnalysis/src/main/java/ghidra/pcode/emu/taint/trace/TaintTracePcodeExecutorStatePiece.java