protected InstructionBlockAdder startAddingBlock(Lifespan lifespan, Set<Address> skipDelaySlots,
			InternalTracePlatform platform, InstructionBlock block, boolean overwrite) {
		if (overwrite) {
			return new InstructionBlockAdder(skipDelaySlots, lifespan, platform, block, null, null,
				null, overwrite);
		}
		InstructionError conflict = block.getInstructionConflict();
		if (conflict == null) {
			return new InstructionBlockAdder(skipDelaySlots, lifespan, platform, block, null, null,
				null, overwrite);
		}
		Address errorAddress = conflict.getInstructionAddress();
		if (errorAddress == null) {
			return null; // The whole block is considered in error
		}
		if (!conflict.getInstructionErrorType().isConflict) {
			return new InstructionBlockAdder(skipDelaySlots, lifespan, platform, block,
				errorAddress, conflict, null, overwrite);
		}
		long startSnap = lifespan.lmin();
		CodeUnit conflictCodeUnit =
			space.definedUnits.getAt(startSnap, conflict.getConflictAddress());
		return new InstructionBlockAdder(skipDelaySlots, lifespan, platform, block, errorAddress,
			conflict, conflictCodeUnit, overwrite);
	}
Start adding the given block to the database

<p>
If this returns non-null, it should be immediately followed by
{@link InstructionBlockAdder#doAddInstructions()}.

@param lifespan the lifespan of each instruction
@param skipDelaySlots the addresses of delay-slotted instructions to skip
@param platform the instructions' platform (language, compiler)
@param block the block of instructions to add
@param overwrite true to overwrite existing defined units
@return the adder, or null
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/listing/DBTraceInstructionsView.java