private void processPLTSection(TaskMonitor monitor) throws CancelledException {

		// TODO: May want to consider using analysis to fully disassemble PLT, we only 
		// really need to migrate external symbols contained within the PLT

		// FIXME: Code needs help ... bad assumption about PLT head size (e.g., 16)
		int assumedPltHeadSize = 16;

		if (elf.isRelocatable()) {
			return; //relocatable files do not have .PLT sections
		}

		MemoryBlock pltBlock = memory.getBlock(ElfSectionHeaderConstants.dot_plt);
		// TODO: This is a band-aid since there are many PLT implementations and this assumes only one.
		if (pltBlock == null || !pltBlock.isExecute() || !pltBlock.isInitialized() ||
			pltBlock.getSize() <= assumedPltHeadSize) {
			return;
		}

		int skipPointers = assumedPltHeadSize;

		// ARM, AARCH64 and others may not store pointers at start of .plt
		if (elf.e_machine() == ElfConstants.EM_ARM || elf.e_machine() == ElfConstants.EM_AARCH64) {
			skipPointers = 0; // disassemble entire PLT
		}

		// Process PLT section
		Address minAddress = pltBlock.getStart().add(skipPointers);
		Address maxAddress = pltBlock.getEnd();
		processLinkageTable(ElfSectionHeaderConstants.dot_plt, minAddress, maxAddress, monitor);
	}
Mark-up all GOT entries as pointers within the memory range gotStart to
gotEnd.
@param gotStart address for start of GOT
@param gotEnd address for end of GOT
@param monitor task monitor
@throws CancelledException thrown if task cancelled
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/elf/ElfDefaultGotPltMarkup.java