private void fixupPinnedMemorySymbolsAfterRebase(Address oldBase, Address base, Address minAddr,
			Address maxAddr) {

		List<MemorySymbol> fixupPinnedSymbols = findPinnedMemorySymbols(minAddr, maxAddr);

		Set<Address> primaryFixups = new HashSet<>();
		for (MemorySymbol memSymbol : fixupPinnedSymbols) {
			Address currentAddress = memSymbol.getAddress();
			Address beforeBaseChangeAddress = oldBase.addWrap(currentAddress.subtract(base));
			primaryFixups.add(currentAddress);
			primaryFixups.add(beforeBaseChangeAddress);

			// see if there is a name collision for the pinned symbol we are about to move back
			Symbol match = getSymbol(memSymbol.getName(), beforeBaseChangeAddress,
				memSymbol.getParentNamespace());

			if (memSymbol.getSymbolType() == SymbolType.FUNCTION) {
				fixupPinnedFunctionSymbolAfterRebase(memSymbol, beforeBaseChangeAddress, match);
			}
			else {
				fixupPinnedLabelSymbolAfterRebase(memSymbol, beforeBaseChangeAddress, match);
			}
		}
		fixupPrimarySymbols(primaryFixups);
	}
Checks if the givens symbols from the same address have exactly one primary symbol amongst
them

@param symbols the array of symbols at a an address
@return true if there is exactly one primary symbol at the address (also true if no symbols
        at address)
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/symbol/SymbolManager.java