public static List<Update> generateUpdates(Iterator<FunctionDescription> iter,
			Map<Long, FunctionDescription> addrMap, List<FunctionDescription> badList) {
		List<FunctionDescription.Update> updateList = new ArrayList<FunctionDescription.Update>();
		Update curupdate = new Update();
		while (iter.hasNext()) {
			FunctionDescription newfunc = iter.next();
			long addr = newfunc.getAddress();
			if (addr == -1) {
				continue;
			}
			FunctionDescription oldfunc = addrMap.get(addr);
			if (oldfunc == null) {
				badList.add(newfunc); // Keep track of functions with update info which we couldn't find
				continue;
			}
			if (newfunc.diffForUpdate(curupdate, oldfunc)) { // Check if there is any change in metadata
				updateList.add(curupdate);
				curupdate = new FunctionDescription.Update();
			}
		}
		return updateList;
	}
Match new functions to old functions via the address, test if there is an update between the two functions,
generate an update record if there is, return the list of updates
@param iter is the list of NEW functions
@param addrMap is a map from address to OLD functions
@param badList is a container for new functions that could not be mapped to old
@return the list of Update records
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/description/FunctionDescription.java