private Address createCiePointer(Address addr)
			throws MemoryAccessException, ExceptionHandlerFrameException {
		/*
		 * Create a new CIE Pointer field at the specified address and sets an
		 * appropriate comment for the new structure.
		 */
		String comment = "(FDE) CIE Reference Pointer ";

		DataType locType = new DWordDataType();
		int locTypeSize = locType.getLength();

		createAndCommentData(program, addr, locType, comment, CommentType.EOL);

		intPtr = (int) GccAnalysisUtils.readDWord(program, addr);

		Address cieAddr = Address.NO_ADDRESS;

		if (isInDebugFrame(addr)) {

			if (intPtr == -1) {
				throw new ExceptionHandlerFrameException(
					"Invalid CIE Reference Pointer (0x" + Integer.toHexString(intPtr) + ")");
			}
			cieAddr = addr.getNewAddress(intPtr); // absolute ref

		}
		else {
			if (intPtr == 0) {
				throw new ExceptionHandlerFrameException(
					"Invalid CIE Reference Pointer (0x" + Integer.toHexString(intPtr) + ")");
			}
			cieAddr = addr.subtract(intPtr); // relative ref
		}

		cie = cieSource.getCie(cieAddr);

		curSize += locTypeSize;

		program.getReferenceManager()
				.addMemoryReference(addr, cieAddr, RefType.DATA, SourceType.ANALYSIS, 0);

		return addr.add(locTypeSize);
	}
Creates the pointer to this FDE's associated CIE

@param addr Address at which the CIE Pointer should be created.
@return Address immediately following the CIE Pointer field.
@throws MemoryAccessException if the required memory can't be read
@throws ExceptionHandlerFrameException if there is an error creating the information.
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FrameDescriptionEntry.java