public void create(Address addr, DwarfEHDecoder decoder, long fdeTableCnt)
			throws MemoryAccessException, ExceptionHandlerFrameException {
		CreateStructureCmd dataCmd = null;
		long curFdeTableCnt = 0;

		if (addr == null || decoder == null) {
			return;
		}

		initFdeTableDataType(decoder);

		monitor.setMessage("Creating Frame Description Table Entries");
		monitor.setShowProgressValue(true);
		monitor.setIndeterminate(false);
		monitor.initialize(fdeTableCnt);

		/* Create a new FDE structures beginning at startAddress */
		MemoryBlock curMemBlock = prog.getMemory().getBlock(".eh_frame_hdr");
		while( curMemBlock != null &&
				  (addr.compareTo( curMemBlock.getEnd()) < 0) && 
				  (curFdeTableCnt < fdeTableCnt) )
		{
			if (monitor.isCancelled()) {
				return;
			}

			/* Create a new FDE structure */
			dataCmd = new CreateStructureCmd(fdeTableEntry, addr);
			dataCmd.applyTo(prog);

			/*
			 * -- Create references to the 'initial location' and 'data
			 * location' --
			 */
			Data fdeTableData = prog.getListing().getDataAt(addr);
			Structure fdeStruct = (Structure) fdeTableData.getDataType();

			DataTypeComponent locComponent = fdeStruct.getComponent(0);
			Address locComponentAddr = addr.add(locComponent.getOffset());
			DwarfDecodeContext locDecodeContext =
				new DwarfDecodeContext(prog, locComponentAddr, curMemBlock);
			Address locAddr = decoder.decodeAddress(locDecodeContext);

			// this is an indirect reference to code from the table,
			//  so tag reference as an indirect code flow
			// TODO: This should be a CODE flow, leaving as INDIRECTION until refactor
			prog.getReferenceManager().addMemoryReference(locComponentAddr, locAddr,
				RefType.INDIRECTION,
						SourceType.ANALYSIS, 0);

			DataTypeComponent dataComponent = fdeStruct.getComponent(1);
			Address dataComponentAddr = addr.add(dataComponent.getOffset());
			DwarfDecodeContext dataDecodeContext =
				new DwarfDecodeContext(prog, dataComponentAddr, curMemBlock);
			Address dataAddr = decoder.decodeAddress(dataDecodeContext);

			prog.getReferenceManager().addMemoryReference(dataComponentAddr, dataAddr, RefType.DATA,
						SourceType.ANALYSIS, 0);

			/* Increment curAddress by number of bytes in a FDE Table entry */
			curFdeTableCnt++;
			addr = addr.add(fdeTableEntry.getLength());

			monitor.incrementProgress(1);
		}
	}
Creates an FDE Table at the specified Address.

@param addr Address at which the FDE Table should be created.
@param decoder the decoder for DWARF encoded exception handling information
@param fdeTableCnt the number of exception handler FDEs.
@throws MemoryAccessException if the needed memory can't be read.
@throws ExceptionHandlerFrameException if the FDE table can't be decoded.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FdeTable.java