private void storeExtraDefinitions(String procName, FileDataTypeManager dtMgr,
			DataTypeManager[] openTypes, PreProcessor cpp) {
		int transactionID = dtMgr.startTransaction("Add Extra Equates");
		try {
			DefineTable definitions = cpp.getDefinitions();
			Iterator<String> defineNames = definitions.getDefineNames();
			while (defineNames.hasNext()) {
				String defName = defineNames.next();
				String rawDefValue = definitions.getValue(defName);
				String expandValue = definitions.expandDefine(defName);

				if (expandValue == null || expandValue.length() == 0) {
					// can't expand, must be a macro
					continue;
				}

				// look at the string and see if it is the definition of an SFR
				String PTR_PREFIX_16 = "(*(volatile uint16_t *)";
				String PTR_PREFIX_8 = "(*(volatile uint8_t *)";

				Long lvalue = null;
				if (expandValue.startsWith(PTR_PREFIX_16)) {
					// ptr to 16 bit address in SFR
					expandValue = expandValue.replace(PTR_PREFIX_16, "");
					expandValue = expandValue.substring(0, expandValue.lastIndexOf(')'));
				}
				else if (expandValue.startsWith(PTR_PREFIX_8)) {
					// ptr to 8 bit address in SFR
					expandValue = expandValue.replace(PTR_PREFIX_8, "");
					expandValue = expandValue.substring(0, expandValue.lastIndexOf(')'));
				}
				else {
					continue;
				}

				if (expandValue == null || expandValue.length() == 0) {
					continue;
				}

				lvalue = ExpressionEvaluator.evaluateToLong(expandValue);
				if (lvalue == null) {
					continue;
				}
				definitions.populateDefineEquate(openTypes, dtMgr, "memory", "", defName, lvalue);
			}
		}
		finally {
			dtMgr.endTransaction(transactionID, true);
		}
	}
get extra defines special for the AVR8 that describe memory locations per variant

@param procName processor variant
@param dtMgr add data types to dtMgr
@param cpp pre-processor holds macros/defines from parsing
Ghidra/Processors/Atmel/ghidra_scripts/CreateAVR8GDTArchiveScript.java