private boolean relocateV1(Address pdwListPayloadAddr, int entryCount, MessageLog log,
			TaskMonitor monitor) throws CancelledException {

		Listing listing = program.getListing();
		Data d = listing.getDefinedDataAt(pdwListPayloadAddr);
		if (d != null && (d.isArray() || d.isStructure())) {
			return false; // silent - appears to have been previously processed
		}

		Memory memory = program.getMemory();
		DataTypeManager dtm = program.getDataTypeManager();
		RelocationTable relocationTable = program.getRelocationTable();

		Address addr = pdwListPayloadAddr;
		DumbMemBufferImpl buf = new DumbMemBufferImpl(memory, pdwListPayloadAddr);

		RelocationResult appliedResult = new RelocationResult(Status.APPLIED_OTHER, 4);

		// relocation result counters
		int applied = 0;
		int failed = 0;

		for (int i = 0; i < entryCount; i++) {
			monitor.checkCancelled();

			RelocationResult result = appliedResult;
			int dwOffset = 0;
			try {
				dwOffset = buf.getInt(0);
			}
			catch (MemoryAccessException e1) {
				log.appendMsg("Failed to read Mingw pseudo-relocation offset at: " + addr);
				return false;
			}

			addr = addr.add(4);
			buf.setPosition(addr); // position on 2nd value
			Address targetAddr = getDWAddress(buf);
			if (targetAddr == null) {
				log.appendMsg("Failed to read Mingw pseudo-relocation target RVA at: " + addr);
				return false;
			}

			try {
				int val32 = memory.getInt(targetAddr) + dwOffset;
				memory.setInt(targetAddr, val32);
				++applied;
			}
			catch (Exception e) {
				markAsError(targetAddr, e.getMessage(), log);
				result = RelocationResult.FAILURE;
				++failed;
			}

			relocationTable.add(targetAddr, result.status(), 0, null, result.byteLength(), null);

			addr = addr.add(4);
			buf.setPosition(addr); // position on next element
		}

		if (failed != 0) {
			log.appendMsg("MinGW pseudo-relocations - applied:" + applied + " failed:" + failed);
		}

		Structure s = new StructureDataType(V1_RELOC_ITEM_STRUCT_NAME, 0, dtm);
		s.setPackingEnabled(true);
		s.add(DWordDataType.dataType, "addend", null);
		s.add(DWordDataType.dataType, "target", null); // may be offcut

		Array a = new ArrayDataType(s, entryCount, -1, dtm);

		try {
			DataUtilities.createData(program, pdwListPayloadAddr, a, -1, false,
				ClearDataMode.CLEAR_ALL_CONFLICT_DATA);
		}
		catch (CodeUnitInsertionException e) {
			Msg.error(this,
				"Failed to markup Mingw pseudo-relocation List at: " + pdwListPayloadAddr);
		}
		return true;
	}
External Import Address List (IAT) Symbol Record
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/MingwRelocationAnalyzer.java