private long checkBlockLimit(String sectionName, long dataLength, boolean initialized)
			throws IOException {

		long available = Memory.MAX_BINARY_SIZE - program.getMemory().getNumAddresses();
		if (dataLength < 0 || dataLength > available) {
			String msg = "Failed to create memory blocks which exceed the fixed " +
				Memory.MAX_BINARY_SIZE_GB + " GByte total memory size limit";
			log("ERROR: " + msg);
			throw new IOException(msg);
		}

		int maxSectionSizeGBytes = Memory.MAX_BLOCK_SIZE_GB;
		long maxSectionSizeBytes = Memory.MAX_BLOCK_SIZE;

		if (dataLength > maxSectionSizeBytes) {
			float sizeGB = (float) dataLength / (float) Memory.GBYTE;
			String msg = "Truncating " + formatFloat(sizeGB, 1) + " GByte '" + sectionName +
				"' section to " + maxSectionSizeGBytes + " GByte fixed size limit";
			log("ERROR: " + msg);
			return maxSectionSizeBytes;
		}
		return dataLength;
	}
check if new symbol needs to grab the primary label.
Elf sometimes has multiple symbols at a location marking the type of instruction of data at the location.
@param sym - new symbol to be made primary (some exclusions apply)
@return revised symbol
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/ElfProgramBuilder.java