private void processImports(ContainerHeader header, Program program,
			ImportStateCache importState, MessageLog log, TaskMonitor monitor) {

		LoaderInfoHeader loader = header.getLoader();
		List<ImportedLibrary> libraries = loader.getImportedLibraries();
		List<ImportedSymbol> symbols = loader.getImportedSymbols();
		int symbolIndex = 0;

		MemoryBlock importBlock = makeFakeImportBlock(program, symbols, log, monitor);
		if (importBlock == null) {
			return;
		}

		Address start = importBlock.getStart();

		for (ImportedLibrary library : libraries) {
			if (monitor.isCancelled()) {
				return;
			}

			String libraryName = SymbolUtilities.replaceInvalidChars(library.getName(), true);

			int symbolCount = library.getImportedSymbolCount();
			int symbolStart = library.getFirstImportedSymbol();

			int totalSymbolCount = symbolStart + symbolCount;

			for (int i = symbolStart; i < totalSymbolCount; ++i) {
				if (monitor.isCancelled()) {
					return;
				}

				if (symbolIndex % 100 == 0) {
					monitor.setMessage(
						"Processing import " + symbolIndex + " of " + symbols.size());
				}
				++symbolIndex;

				String symbolName =
					SymbolUtilities.replaceInvalidChars(symbols.get(i).getName(), true);

				boolean success = importState.createLibrarySymbol(library, symbolName, start);
				if (!success) {
					log.appendMsg("Unable to create symbol.");
				}

				createPointer(program, start, log);
				program.getReferenceManager().removeAllReferencesFrom(start);
				addExternalReference(program, start, libraryName, symbolName, log);

				start = start.add(4);
			}
		}
	}
TODO determine how to correctly identify TOC location
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PefLoader.java