private boolean processAddressTable(AddressTable addressTable, Program program, AutoAnalysisManager mgr,
			TaskMonitor monitor) throws CancelledException {
		boolean didTable = false;
		
		while (addressTable != null) {
			Address startTableAddr = addressTable.getTopAddress();

			int tableLen = checkTable(addressTable, program, monitor);
			
			// check if there is already an address table bookmark here
			Bookmark bookmark = program.getBookmarkManager()
					.getBookmark(addressTable.getTopAddress(), BookmarkType.ANALYSIS,
						ADDRESS_TABLE_BOOKMARK_TYPENAME);

			// if table too small, or bookmark already here
			// - skip the bad tableLen entries
			// - continue with any additional entries in the table
			if (bookmark != null || tableLen < minimumTableSize) {
				// There might be more to the table. Get a new smaller table.
				// This will skip one element in the table, that is assumed to have
				// broken the table up, thus (tableLen+1)
				//
				// table entry will be null if no more table entries beyond tableLen+1
				addressTable = addressTable.newRemainingAddressTable(tableLen+1);
				continue;
			}

			// make the table
			addressTable.makeTable(program, 0, tableLen - 1, autoLabelTable, false);

			int tableByteLen = addressTable.getByteLength(0, tableLen - 1, false);
			Address endTableAddr = startTableAddr.add(tableByteLen-1);
			mgr.codeDefined(new AddressSet(startTableAddr, endTableAddr));

			// put info bookmark in
			if (createBookmarksEnabled) {
				program.getBookmarkManager()
						.setBookmark(addressTable.getTopAddress(), BookmarkType.ANALYSIS,
							ADDRESS_TABLE_BOOKMARK_TYPENAME, "Address table[" + tableLen + "] created");
			}

			// if all are valid code, disassemble
			List<Address> validCodeList = addressTable.getFunctionEntries(program, 0);
			if (validCodeList != null &&
				validCodeList.size() >= addressTable.getNumberAddressEntries()) {
				AddressSet validCodeSet = new AddressSet();
				AddressSet validFuncSet = new AddressSet();
				for (Address addr : validCodeList) {
					// set target context correctly. Target address will get
					// aligned in DisassembleCmd
					PseudoDisassembler.setTargetContextForDisassembly(program, addr);

					// even though they are valid code, don't do them if
					// there is already code there.
					if (program.getListing().getCodeUnitContaining(addr) == null) {
						validCodeSet.addRange(addr, addr);
					}
					// For Now, Never make functions from address tables,
					// Could later be an option
					// if (pdis.isValidSubroutine(addr, true)) {
					// validFuncSet.addRange(addr, addr);
					// }
				}
				// disassemble valid code
				if (!validCodeSet.isEmpty()) {
					mgr.disassemble(validCodeSet,
						AnalysisPriority.DATA_TYPE_PROPOGATION.before());
				}
				// if valid functions, schedule much later, so switch table analysis can pick it up.
				if (!validFuncSet.isEmpty()) {
					//  For Now, Never make functions from address tables, Could later be an option
					//		mgr.createFunction(validFuncSet, true,
					//		AnalysisPriority.DATA_TYPE_PROPOGATION.getNext());
				}
			}
			
			// There might be more to the table. Get a new smaller table.
			// This will skip one element in the table, that is assumed to have
			// broken the table up, thus (tableLen+1)
			//
			// table entry will be null if no more table entries beyond tableLen+1
			addressTable = addressTable.newRemainingAddressTable(tableLen+1);
			didTable = true;
		}
		
		return didTable;
	}
Process the table of addresses.  This could create multiple address tables if the
table has an entry that breaks the table.

Note: current algorithm processes the entire table, if this changes, code that
      assumes this must be re-factored to know how many bytes were consumed

@param addressTable address table
@param program program
@param mgr autoAnalysis manager
@param monitor monitor for checking if table creation canceled
@return true if a table was actually made, false otherwise
@throws CancelledException if use cancels
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/AddressTableAnalyzer.java