public RegionDescriptor create(Address fdeBaseAddress)
			throws MemoryAccessException, ExceptionHandlerFrameException {

		if (fdeBaseAddress == null || monitor.isCancelled()) {
			return null;
		}

		Address addr = fdeBaseAddress;
		baseAddress = fdeBaseAddress;
		MemoryBlock ehblock = program.getMemory().getBlock(addr);
		RegionDescriptor region = new RegionDescriptor(ehblock);

		// See if processing should stop due to the current length field == 0
		if (program.getMemory().getInt(addr) == 0) {
			markEndOfFrame(addr);
			endOfFrame = true;
			return null;
		}

		// Begin creating the fields that compose the FDE.
		addr = createFdeLength(addr);
		addr = createExtendedLength(addr);
		addr = createCiePointer(addr);
		addr = createPcBegin(addr, region);
		addr = createPcRange(addr); // This can return null.

		AddressRange addrRange = new AddressRangeImpl(pcBeginAddr, pcEndAddr);

		region.setIPRange(addrRange);

		try {
			/* Create a function at the pcBegin Addr address */
			CreateFunctionCmd createFuncCmd = new CreateFunctionCmd(pcBeginAddr);
			createFuncCmd.applyTo(program);
		}
		catch (AddressOutOfBoundsException e) {
			throw new ExceptionHandlerFrameException(
				e.getMessage() + ": " + pcBeginAddr.toString() + " + " + intPcRange);
		}

		// If some FDE data remains, then it is the augmentation fields or call frame instructions.
		if (curSize < intLength) {

			// Get the Augmentation String from the CIE
			cieAugmentationString = cie.getAugmentationString();

			addr = createAugmentationFields(addr); // If addr is originally null, it remains null.

			/*
			 * Add call frame instructions and possible padding
			 */
			if (!hasExtLength) {
				if (addr != null && curSize < intLength) {
					// Create the call frame instructions w/ the remaining bytes.
					addr = createCallFrameInstructions(addr);
				}
			}
			else {
				throw new ExceptionHandlerFrameException(
					"ExtLength is not completely implemented.");
			}
		}

		createFdeLabel(fdeBaseAddress);

		region.setFrameDescriptorEntry(this);

		createAugmentationInfo(ehblock, region);

		nextAddress = addr; // This could be null.
		return region;
	}
Creates a Frame Description Entry (FDE) at the address
specified.
<br>Note: This method must get called before any of the "get..." methods.

@param fdeBaseAddress Address where the FDE should be created.
@return a region descriptor which holds information about this FDE. Otherwise, null.
@throws MemoryAccessException if memory for the FDE or its associated data can't be accessed
@throws ExceptionHandlerFrameException if there is an error creating the FDE information.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FrameDescriptionEntry.java