private SymbolDB makeSymbol(Address addr, DBRecord record, SymbolType type) {
		if (addr == null) {
			addr =
				addrMap.decodeAddress(record.getLongValue(SymbolDatabaseAdapter.SYMBOL_ADDR_COL));
		}
		if (type == SymbolType.CLASS) {
			return new ClassSymbol(this, cache, record); // uses NO_ADDRESS
		}
		else if (type == SymbolType.LABEL) {
			return new CodeSymbol(this, cache, addr, record); // uses NO_ADDRESS
		}
		else if (type == SymbolType.NAMESPACE) {
			return new NamespaceSymbol(this, cache, record);
		}
		else if (type == SymbolType.FUNCTION) {
			return new FunctionSymbol(this, cache, addr, record);
		}
		else if (type == SymbolType.LIBRARY) {
			return new LibrarySymbol(this, cache, record); // uses NO_ADDRESS
		}
		else if (type == SymbolType.PARAMETER || type == SymbolType.LOCAL_VAR) {
			return new VariableSymbolDB(this, cache, type, variableStorageMgr, addr, record);
		}
		else if (type == SymbolType.GLOBAL_VAR) {
			return new GlobalVariableSymbolDB(this, cache, variableStorageMgr, addr, record);
		}
		throw new IllegalArgumentException("No symbol type for " + type);
	}
Save off old local symbols whose upgrade needs to be deferred until after function manager
upgrade has been completed.

@param tmpHandle scratch pad database handle
@param symbolID local symbol ID
@param oldAddr old address value from symbol table
@param name symbol name
@param isPrimary true if symbol is primary at oldAddr
@throws IOException if there is database exception
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java