public static DWARFRangeList readV4(BinaryReader reader, DWARFCompilationUnit cu)
			throws IOException {
		byte pointerSize = cu.getPointerSize();
		List<DWARFRange> ranges = new ArrayList<>();

		long baseAddress = cu.getPCRange().getFrom();
		long maxAddrVal = pointerSize == 4 ? NumericUtilities.MAX_UNSIGNED_INT32_AS_LONG : -1;

		while (reader.hasNext()) {
			// Read the beginning and ending addresses
			long beginning = reader.readNextUnsignedValue(pointerSize);
			long ending = reader.readNextUnsignedValue(pointerSize); // dwarf end addrs are exclusive

			// End of the list
			if (beginning == 0 && ending == 0) {
				break;
			}

			// Check to see if this is a base address entry
			if (beginning == maxAddrVal) {
				baseAddress = ending;
				continue;
			}

			// Add the range to the list
			ranges.add(new DWARFRange(baseAddress + beginning, baseAddress + ending));
		}
		return new DWARFRangeList(ranges);
	}
Reads a v4 {@link DWARFRangeList} from the .debug_ranges stream.

@param reader stream positioned to the start of a .debug_ranges range list
@param cu the compUnit referring to this range
@return new {@link DWARFRangeList}, never null
@throws IOException if error reading
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFRangeList.java