private boolean readGlobalStorage(DIEAggregate diea) {
		DWARFProgram prog = diea.getProgram();

		try {
			DWARFLocationList locList = diea.getLocationList(DW_AT_location);
			DWARFLocation location = locList.getFirstLocation();
			if (location == null) {
				return false;
			}

			DWARFExpressionEvaluator exprEvaluator =
				new DWARFExpressionEvaluator(diea.getCompilationUnit());

			DWARFExpression expr = exprEvaluator.readExpr(location.getExpr());

			exprEvaluator.evaluate(expr);
			if (exprEvaluator.getRawLastRegister() != -1) {
				Msg.warn(this, "DWARF: bad location for global variable %s: %s"
						.formatted(getDeclInfoString(), expr.toString()));
				return false;
			}

			long res = exprEvaluator.pop();
			if (res == 0) {
				if (diea.hasAttribute(DWARFAttribute.DW_AT_const_value)) {
					// skip without complaining global vars with a const value and bad location expression 
					return false;
				}

				// If the expression evaluated to a static address of '0'.
				// This case is probably caused by relocation fixups not being applied to the
				// .debug_info section.
				prog.getImportSummary().relocationErrorVarDefs.add("%s:%s".formatted(
					name.getNamespacePath().asFormattedString(), type.getPathName()));
				return false;
			}

			setRamStorage(res);
			return true;
		}
		catch (DWARFExpressionException | UnsupportedOperationException
				| IndexOutOfBoundsException | IOException ex) {
			prog.getImportSummary().exprReadError++;
			return false;
		}
	}
If this is a static/global variable, stored at a ram address, return it's
ram address.

@return address of where this variable is stored, null if not ram address
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFVariable.java