private void markupOatPatches(Program program, OatHeader oatHeader, TaskMonitor monitor,
			MessageLog log) throws CancelledException {
		monitor.setMessage("Annotating OAT Patches...");
		Memory memory = program.getMemory();

		if (oatHeader.getVersion().equals(OatConstants.OAT_VERSION_045)) {
			MemoryBlock oatBlock = memory.getBlock(OatConstants.DOT_OAT_PATCHES_SECTION_NAME);
			MemoryBlock destinationBlock = findOatPatchesDestinationBlock(program, oatBlock);
			if (oatBlock == null || destinationBlock == null) {
				log.appendMsg("Could not locate OAT patches source / destination block.");
				return;
			}
			DataType dataType = new DWordDataType();
			monitor.setProgress(0);
			long numberOfElements = oatBlock.getSize() / dataType.getLength();
			monitor.setMaximum(numberOfElements);
			for (int i = 0; i < numberOfElements; ++i) {
				monitor.checkCancelled();
				monitor.incrementProgress(1);
				try {
					Address address = oatBlock.getStart().add(i * dataType.getLength());
					Data data = createData(program, address, dataType);
					Scalar scalar = data.getScalar(0);
					Address toAddr = destinationBlock.getStart().add(scalar.getUnsignedValue());
					program.getListing().setComment(address, CommentType.EOL, "->" + toAddr);
				}
				catch (Exception e) {
					log.appendException(e);
					return;
				}
			}
		}
		else if (oatHeader.getVersion().equals(OatConstants.OAT_VERSION_064)) {
			//TODO
		}
		else if (oatHeader.getVersion().equals(OatConstants.OAT_VERSION_088)) {
			//TODO
		}
		else if (oatHeader.getVersion().equals(OatConstants.OAT_VERSION_124)) {
			//TODO
		}
		else if (oatHeader.getVersion().equals(OatConstants.OAT_VERSION_131)) {
			//TODO
		}
	}
Annotates the listing for the ".oat_patches" section(s).  
The format of the section changes based on the OAT version.
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/OatHeaderAnalyzer.java