private DWARFDataType makeDataTypeForStruct(DIEAggregate diea) {

		DWARFName dni = prog.getName(diea);

		long structSize = diea.getUnsignedLong(DW_AT_byte_size, 0);
		long origStructSize = structSize;
		if (isStructTooBigForGhidra(structSize)) {
			Msg.error(this, "Large DWARF structure encountered, substituting empty struct for " +
				dni + ", size: " + Long.toString(structSize) + " at DIE " + diea.getHexOffset());
			structSize = 0;
		}
		boolean isUnion = diea.getTag() == DW_TAG_union_type;
		boolean isDecl = diea.getBool(DW_AT_declaration, false);

		DataType struct =
			isUnion ? new UnionDataType(dni.getParentCP(), dni.getName(), dataTypeManager)
					: new StructureDataType(dni.getParentCP(), dni.getName(), (int) structSize,
						dataTypeManager);

		if (!isDecl && origStructSize == 0) {
			// Enable packing on 0-byte composites so they are treated as defined
			// and will not take space if used in a field in another composite.
			((Composite) struct).setToDefaultPacking();
		}

		DWARFDataType result = new DWARFDataType(struct, dni, diea.getOffset());
		result.dsi = DWARFSourceInfo.create(diea);

		if (dni.isNameModified() && !dni.isAnon()) {
			DWARFUtil.appendDescription(struct, "Original name: " + dni.getOriginalName(), "\n");
		}

		if (importOptions.isOutputDIEInfo()) {
			DWARFUtil.appendDescription(struct, "DWARF DIE: " + diea.getHexOffset(), "\n");
		}

		if (importOptions.isOutputSourceLocationInfo() && result.dsi != null &&
			result.dsi.getDescriptionStr() != null) {
			DWARFUtil.appendDescription(struct, result.dsi.getDescriptionStr(), "\n");
		}

		if (isStructTooBigForGhidra(origStructSize)) {
			DWARFUtil.appendDescription(struct,
				"Structure oversize error, original size: " + Long.toString(origStructSize), "\n");
		}

		return result;
	}
Creates an empty stub structure/union for the DIEA.
<p>
Use {@link #finishStruct(DIEAggregate, DataType)} (which calls
{@link #populateStubStruct(StructureDataType, DIEAggregate)} and
{@link #populateStubEnum(Enum, DIEAggregate)}) to fill in the fields of the structure.
<p>
This is done in two steps to enable ending recursive loops by publishing the empty
struct in the {@link #dieOffsetToDataTypeMap} map, where it will be found and returned by
{@link #getDataTypeWorker(DIEAggregate, DataType)}, instead of calling back
into this method.
@param diea
@return
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFDataTypeImporter.java