@Override
	public Address getVariableStorageAddress(VariableStorage storage, boolean create)
			throws IOException {
		long hash = storage.getLongHash();
		MyVariableStorage myStorage = cacheMap.get(hash);
		long key;
		if (myStorage != null) {
			key = myStorage.getKey();
			// verify that cache entry is still valid
			if (cache.get(key) == null) {
				key = -1;
			}
		}
		else {
			key = adapter.findRecordKey(hash);
		}

		if (key == -1) {
			if (!create) {
				return null;
			}

			// create new storage record
			key = adapter.getNextStorageID();
			DBRecord rec = VariableStorageDBAdapter.VARIABLE_STORAGE_SCHEMA.createRecord(key);
			rec.setLongValue(VariableStorageDBAdapter.HASH_COL, storage.getLongHash());
			rec.setString(VariableStorageDBAdapter.STORAGE_COL, storage.getSerializationString());
			adapter.updateRecord(rec);

			// add to cache
			myStorage = new MyVariableStorage(cache, rec);
			cacheMap.put(hash, myStorage);
		}
		return AddressSpace.VARIABLE_SPACE.getAddress(key);
	}
Get a variable address for the given storage specification.
NOTE: The program architecture and error handler must be set appropriately prior to 
invocation of this method (see {@link #setProgramArchitecture(ProgramArchitecture)}.
@param storage variable storage specification
@param create if true a new variable address will be allocated if needed
@return variable address which corresponds to the storage specification or null if not found
and create is false.
@throws IOException if an IO error occurs
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/VariableStorageManagerDB.java