private DWARFDataType makeDataTypeForTypedef(DIEAggregate diea)
			throws IOException, DWARFExpressionException {

		DWARFName typedefDNI = prog.getName(diea);
		DIEAggregate refdDIEA = diea.getTypeRef();

		if (refdDIEA != null && refdDIEA.getTag() == DW_TAG_base_type) {
			// if this is a typedef to a base type, skip to the base data type which
			// can create a better typedef than we can
			return makeNamedBaseType(typedefDNI, refdDIEA);
		}

		DWARFDataType refdDT = getDataType(refdDIEA, voidDDT);

		// do a second query to see if there was a recursive loop in the call above back
		// to this datatype that resulted in this datatype being created.
		// Use that instance if possible.
		DWARFDataType self = dieOffsetToDataTypeMap.get(diea.getOffset());
		if (self != null) {
			return self;
		}

		boolean typedefWithSameName = DataTypeUtilities.equalsIgnoreConflict(
			typedefDNI.asDataTypePath().getPath(), refdDT.dataType.getPathName());
		if (!typedefWithSameName && refdDT.dataType instanceof Pointer ptrDT) {
			if (ptrDT.getDataType() instanceof Pointer ptrptrDT) {
				// handle double ptr-to-ptr-to-funcdef (golang typedefs to funcdefs)
				ptrDT = ptrptrDT;
			}
			if (ptrDT.getDataType() instanceof FunctionDefinition pointedToFuncDefDT) {
				// hack to handle funcDefs that produce a ptr_to_funcdef instead of a funcdef type, which messes with name compare
				typedefWithSameName = DataTypeUtilities.equalsIgnoreConflict(
					typedefDNI.asDataTypePath().getPath(), pointedToFuncDefDT.getPathName());
			}
		}

		if (typedefWithSameName) {
			if (importOptions.isElideTypedefsWithSameName()) {
				// this typedef points to something that has the exact same name.  Skip this typedef
				refdDT.offsets.add(diea.getOffset());
				return refdDT;
			}
			// this typedef points to something with the same name.  tweak the typedef's name so
			// there isn't a gratuitous conflict.
			String newName = typedefDNI.getName() + "_typedef";
			typedefDNI = typedefDNI.replaceName(newName, newName);
		}

		TypedefDataType typedefDT = new TypedefDataType(typedefDNI.getParentCP(),
			typedefDNI.getName(), refdDT.dataType, dataTypeManager);
		updateMapping(refdDT.dataType, typedefDT.getDataType());

		return new DWARFDataType(typedefDT, typedefDNI, diea.getOffset());
	}
Returns true if the DWARF struct is larger than Ghidra allows (ie. bigger than MAX_INT).

@param structSize long int size of the DWARF struct
@return true if bigger than Ghidra can handle
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFDataTypeImporter.java