protected void setProgramContext(long offset, DataType dt, String tid) {
		ProgramContext ctx = program.getProgramContext();
		if (dt instanceof TypedefDataType) {
			TypedefDataType typedef = (TypedefDataType) dt;
			dt = typedef.getBaseDataType();
		}
		if (dt instanceof StructureDataType) {
			Map<String, Long> map = new HashMap<>();
			StructureDataType struct = (StructureDataType) dt;
			DataTypeComponent[] components = struct.getComponents();
			for (DataTypeComponent dtc : components) {
				String fieldName = dtc.getFieldName();
				int fieldOffset = dtc.getOffset();
				try {
					long fieldValue = reader.readPointer(offset + fieldOffset);
					map.put(fieldName.toUpperCase(), fieldValue);
				}
				catch (IOException e) {
					Msg.error(this, e.getMessage());
				}
			}
			Register pc = program.getLanguage().getProgramCounter();
			if (map.containsKey(pc.getName())) {
				Long pcval = map.get(pc.getName());
				Msg.info(this,
					"Setting context for thread " + tid + " at " + Long.toHexString(pcval));
				Address start = getAddress(pcval);
				for (Entry<String, Long> entry : map.entrySet()) {
					Register register = ctx.getRegister(entry.getKey());
					if (register != null) {
						try {
							ctx.setValue(register, start, start,
								BigInteger.valueOf(entry.getValue()));
						}
						catch (ContextChangeException e) {
							Msg.error(this, e.getMessage());
						}
					}
				}
			}
		}

	}
Determine if {@link DumpFileLoader} should join memory blocks associated with interior
address ranges.
@return true if loaded memory blocks should be joined
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/dump/DumpFile.java