private void markupBlock(MemoryBlock block, DataType datatype) throws Exception {
		Address address = block.getStart();
		while (!monitor.isCancelled()) {
			if (address.compareTo(block.getEnd()) > 0) {
				break;
			}
			try {
				listing.createData(address, datatype);
				if (datatype instanceof Pointer) {
					fixupThumbPointers(address);
				}
				address = address.add(listing.getDataAt(address).getLength());
			}
			catch (CodeUnitInsertionException e) {
				if (datatype instanceof TerminatedStringDataType) {
					// Sometimes there are huge strings, like JSON blobs
					log.appendMsg("Skipping markup for large string at: " + address);
				}
				else if (!(datatype instanceof Pointer)) {
					// May have already been created, by relocation, or chain pointers
					log.appendMsg("Skipping markup for existing pointer at: " + address);
				}
				else {
					log.appendException(e);
				}
				return;
			}
			catch (Exception e) {
				log.appendException(e);
				return;
			}
		}
	}
Handles a relocation error by placing a bookmark and writing to the log

@param address The address of the relocation error
@param message The error message
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MachoProgramBuilder.java