private void markupHeaders(Program program, FileBytes fileBytes, MzExecutable mz,
			MessageLog log, TaskMonitor monitor) {
		monitor.setMessage("Marking up headers...");
		OldDOSHeader header = mz.getHeader();
		int blockSize = paragraphsToBytes(Short.toUnsignedInt(header.e_cparhdr()));
		try {
			Address headerSpaceAddr = AddressSpace.OTHER_SPACE.getAddress(0);
			MemoryBlock headerBlock = MemoryBlockUtils.createInitializedBlock(program, true,
				"HEADER", headerSpaceAddr, fileBytes, 0, blockSize, "", "", false,
				false, false, log);
			Address addr = headerBlock.getStart();

			// Header
			DataUtilities.createData(program, addr, mz.getHeader().toDataType(), -1,
				DataUtilities.ClearDataMode.CHECK_FOR_SPACE);

			// Relocation Table
			List<MzRelocation> relocations = mz.getRelocations();
			if (!relocations.isEmpty()) {
				DataType relocationType = relocations.get(0).toDataType();
				int len = relocationType.getLength();
				addr = addr.add(Short.toUnsignedInt(header.e_lfarlc()));
				for (int i = 0; i < relocations.size(); i++) {
					monitor.checkCancelled();
					DataUtilities.createData(program, addr.add(i * len), relocationType, -1,
						DataUtilities.ClearDataMode.CHECK_FOR_SPACE);
				}
			}

		}
		catch (Exception e) {
			log.appendMsg("Failed to markup headers");
		}
	}
Stores a relocation's fixup information

@param relocation The original relocation info
@param address The {@link SegmentedAddress} of the relocation
@param fileOffset The file offset of the relocation
@param segment The fixed-up segment after the relocation is applied
@param valid True if the relocation is valid; otherwise, false
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MzLoader.java