OpenBSD CVS

CVS log for src/usr.sbin/vmd/loadfile_elf.c


[BACK] Up to [local] / src / usr.sbin / vmd

Request diff between arbitrary revisions


Default branch: MAIN


Revision 1.47 / (download) - annotate - [select for diffs], Tue Apr 25 12:46:13 2023 UTC (13 months, 2 weeks ago) by dv
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, OPENBSD_7_4_BASE, OPENBSD_7_4, HEAD
Changes since 1.46: +5 -4 lines
Diff to previous 1.46 (colored)

vmm(4)/vmd(8): pull struct members out of vmm ioctl create struct.

The object sent to vmm(4) contained file paths and details the
kernel does not need for cpu virtualization as device emulation is
in userland. Effectively, "pull up" the struct members from the
vm_create_params struct to the parent vmop_create_params struct.

This allows us to clean up some of vmd(8) and simplify things for
switching to having vmctl(8) open the "kernel" file (SeaBIOS, bsd.rd,
etc.) to allow users to boot recovery ramdisk kernels.

ok mlarkin@

Revision 1.46 / (download) - annotate - [select for diffs], Wed Apr 19 12:58:16 2023 UTC (13 months, 3 weeks ago) by jsg
Branch: MAIN
Changes since 1.45: +1 -2 lines
Diff to previous 1.45 (colored)

remove duplicate includes

Revision 1.45 / (download) - annotate - [select for diffs], Wed Dec 28 21:30:19 2022 UTC (17 months, 1 week ago) by jmc
Branch: MAIN
CVS Tags: OPENBSD_7_3_BASE, OPENBSD_7_3
Changes since 1.44: +2 -2 lines
Diff to previous 1.44 (colored)

spelling fixes; from paul tagliamonte
any parts of his diff not taken are noted on tech

Revision 1.44 / (download) - annotate - [select for diffs], Mon Dec 26 23:50:20 2022 UTC (17 months, 1 week ago) by dv
Branch: MAIN
Changes since 1.43: +10 -25 lines
Diff to previous 1.43 (colored)

vmd(8): provide a detailed e820 memory map.

When booting guests with SeaBIOS, vmd(8) supplied details about the
available guest memory via CMOS registers. Consequently, we've been
carrying some patches in the ports tree to SeaBIOS to fetch this
information like it's the 1990s.

When a vm initializes memory ranges, we now track what each range
represents. This information can be used to supply the e820 memory
map to SeaBIOS via the fw_cfg interface allowing it to properly
communicate memory ranges to a guest operating system. (This will
also allow us to drop some patches from the port.)

Given the ranges can now be marked with a purpose, this also allows
vmm(4) to switch from hard-coded mmio ranges and instead let the
information on the memory range dictate if vmm should be handling
a page fault or sending to vmd for a memory assist.

Tested by Mischa Peters and others. OK mlarkin@.

Revision 1.42.4.1 / (download) - annotate - [select for diffs], Fri Dec 9 16:44:19 2022 UTC (17 months, 4 weeks ago) by bluhm
Branch: OPENBSD_7_2
Changes since 1.42: +2 -1 lines
Diff to previous 1.42 (colored) next main 1.43 (colored)

vmd(8): zero consdev in bootargs to fix booting ramdisks

Mischa Peters reported that booting a bsd.rd from 7.2 or newer
stopped working with vmd(8) in 7.2.

Direct booting kernels requires vmd to build boot args in guest
memory. Recently, the bios_consdev_t struct changed in amd64
machdep.c, adding additional struct members. vmd wasn't zeroing out
the struct, causing the booted kernel to read garbage.

from dv@; ok claudio, mlarkin

this is errata/7.2/010_vmd.patch.sig

Revision 1.43 / (download) - annotate - [select for diffs], Mon Nov 28 18:24:52 2022 UTC (18 months, 1 week ago) by dv
Branch: MAIN
Changes since 1.42: +18 -16 lines
Diff to previous 1.42 (colored)

vmd(8): zero consdev in bootargs to fix booting ramdisks

Mischa Peters reported that booting a bsd.rd from 7.2 or newer
stopped working with vmd(8) in 7.2.

Direct booting kernels requires vmd to build boot args in guest
memory. Recently, the bios_consdev_t struct changed in amd64
machdep.c, adding additional struct members. vmd wasn't zeroing out
the struct, causing the booted kernel to read garbage.

While here, cleanup some of push_bootargs to use descriptive names
for boot args and standardize on explicit usage of uint32_t.

ok claudio, mlarkin

Revision 1.42 / (download) - annotate - [select for diffs], Fri Jan 28 06:33:27 2022 UTC (2 years, 4 months ago) by guenther
Branch: MAIN
CVS Tags: OPENBSD_7_2_BASE, OPENBSD_7_1_BASE, OPENBSD_7_1
Branch point for: OPENBSD_7_2
Changes since 1.41: +2 -2 lines
Diff to previous 1.41 (colored)

When it's the possessive of 'it', it's spelled "its", without the
apostrophe.

Revision 1.41 / (download) - annotate - [select for diffs], Tue Jan 4 15:18:44 2022 UTC (2 years, 5 months ago) by claudio
Branch: MAIN
Changes since 1.40: +6 -17 lines
Diff to previous 1.40 (colored)

Fix some simple -Wunused-but-set-variable warnings.
OK benno@ dv@

Revision 1.40 / (download) - annotate - [select for diffs], Thu Dec 30 08:12:23 2021 UTC (2 years, 5 months ago) by claudio
Branch: MAIN
Changes since 1.39: +20 -6 lines
Diff to previous 1.39 (colored)

Add back support for -B net -b bsd.rd which emulates a PXE install and
results in an autoinstall. This can be used to quickly create new OpenBSD
installs.
OK dv@

Revision 1.39 / (download) - annotate - [select for diffs], Tue May 4 10:48:51 2021 UTC (3 years, 1 month ago) by dv
Branch: MAIN
CVS Tags: OPENBSD_7_0_BASE, OPENBSD_7_0
Changes since 1.38: +13 -3 lines
Diff to previous 1.38 (colored)

gzread(3) doesn't always set errno, so use gzerror(3)

Compression errors from libz don't set errno.

OK mlarkin@

Revision 1.38 / (download) - annotate - [select for diffs], Mon Apr 5 18:09:48 2021 UTC (3 years, 2 months ago) by dv
Branch: MAIN
CVS Tags: OPENBSD_6_9_BASE, OPENBSD_6_9
Changes since 1.37: +34 -33 lines
Diff to previous 1.37 (colored)

Support booting from compressed kernel images.

The bsd.rd ramdisk now ships gzip'd on amd64. Use libz in base to
transparently handle decompression of any compressed kernel images.

Patch from Josh Rickmar.

ok kn@

Revision 1.37 / (download) - annotate - [select for diffs], Fri Mar 19 09:29:33 2021 UTC (3 years, 2 months ago) by kn
Branch: MAIN
Changes since 1.36: +11 -30 lines
Diff to previous 1.36 (colored)

Remove booting from kernels in raw/qcow2 images

Diff and (slightly tweaked) text below from
Dave Voutila < dave at sisu dot io >, thanks!

--
Since 6.7 switched to FFS2 as the default filesystem for new installs,
the ability for vmd(8) to load a kernel and boot.conf from a disk image
directly (without SeaBIOS) has been broken.

A diff from tb to add FFS2 support never mdae it into the tree.

On 5th Jan 2021, new ramdisks for amd64 have started shipping gzipped,
breaking the ability to load the bsd.rd directly as a kernel image for a vmd
guest without first uncompressing the image.

Using BIOS works, the FFS2 change happend ten months ago and few if any have
complained about the breakage.  vmctl(8) is still vague about supporting it
per its man page and one still has to pass the disk image twice as a "-b"
and "-d" argument to boot an OpenBSD guest *without* BIOS.

Josh Rickmar reported the gzip issue on bugs@ and provided patches to add
support for compressed ramdisks and kernel images.  The easiest way to do so
is to drop support for FFS images since they require a call to fmemopen(3)
while all the other logic uses fopen(3)/fdopen(3) calls and a file
descriptor.  It is much easier to get thsoe patches merged if they don't
have to account for extracting files from disk images.
--

No objections anyone
"Removing it makes sense" reyk (who wrote the FFS module)
OK mlarkin

Revision 1.36 / (download) - annotate - [select for diffs], Mon Oct 26 04:04:31 2020 UTC (3 years, 7 months ago) by visa
Branch: MAIN
Changes since 1.35: +5 -5 lines
Diff to previous 1.35 (colored)

Remove an unneeded variable.

OK kettenis@

Revision 1.35 / (download) - annotate - [select for diffs], Thu May 16 21:16:04 2019 UTC (5 years ago) by claudio
Branch: MAIN
CVS Tags: OPENBSD_6_8_BASE, OPENBSD_6_8, OPENBSD_6_7_BASE, OPENBSD_6_7, OPENBSD_6_6_BASE, OPENBSD_6_6
Changes since 1.34: +5 -3 lines
Diff to previous 1.34 (colored)

Unbreak vmctl start foo -b /bsd -d disk.img -cL
Define a local definition of LOADADDR() instead of pulling in
machine/loadfile_machdep.h. vmd -b requires the addresses to be masked
and the new bootloader no longer does that.
OK pd@ kettenis@

Revision 1.34 / (download) - annotate - [select for diffs], Fri Mar 1 07:32:29 2019 UTC (5 years, 3 months ago) by mlarkin
Branch: MAIN
CVS Tags: OPENBSD_6_5_BASE, OPENBSD_6_5
Changes since 1.33: +1 -30 lines
Diff to previous 1.33 (colored)

vmd(8): remove some i386 remnants that missed the original cleanup

ok pd, kn, deraadt

Revision 1.33 / (download) - annotate - [select for diffs], Wed Dec 12 21:20:57 2018 UTC (5 years, 5 months ago) by claudio
Branch: MAIN
Changes since 1.32: +3 -28 lines
Diff to previous 1.32 (colored)

Simplify mbzero() by using mem_write with a NULL buf which does zero out
all memory at once without having to use a zero buffer.
OK mlarkin@

Revision 1.32 / (download) - annotate - [select for diffs], Wed Dec 12 21:19:22 2018 UTC (5 years, 5 months ago) by claudio
Branch: MAIN
Changes since 1.31: +2 -2 lines
Diff to previous 1.31 (colored)

Set the com speed to 115200 like we do in our bootloader when using SeaBIOS.
OK mlarkin@

Revision 1.31 / (download) - annotate - [select for diffs], Thu Dec 6 09:20:06 2018 UTC (5 years, 6 months ago) by claudio
Branch: MAIN
Changes since 1.30: +24 -9 lines
Diff to previous 1.30 (colored)

Make it possible to define the bootdevice in vmd. This information is used
currently only when booting a OpenBSD kernel. If VMBOOTDEV_NET is used the
internal dhcp server will pass "auto_install" as boot file to the client and
the boot loader passes the MAC of the first interface to the kernel to indicate
PXE booting. Adding boot order support to SeaBIOS is not yet implemented.
Ok ccardenas@

Revision 1.30 / (download) - annotate - [select for diffs], Tue Jul 17 13:47:06 2018 UTC (5 years, 10 months ago) by mlarkin
Branch: MAIN
CVS Tags: OPENBSD_6_4_BASE, OPENBSD_6_4
Changes since 1.29: +41 -9 lines
Diff to previous 1.29 (colored)

vmd(8): fix vmctl -b option for i386 kernels.

ok pd@

Revision 1.29 / (download) - annotate - [select for diffs], Wed Nov 29 02:46:10 2017 UTC (6 years, 6 months ago) by mlarkin
Branch: MAIN
CVS Tags: OPENBSD_6_3_BASE, OPENBSD_6_3
Changes since 1.28: +6 -15 lines
Diff to previous 1.28 (colored)

make vmm(4) less responsible for initial register state, preferring to let
usermode daemons handle that.

ok pd@

Revision 1.28 / (download) - annotate - [select for diffs], Mon Nov 27 03:19:00 2017 UTC (6 years, 6 months ago) by mlarkin
Branch: MAIN
Changes since 1.27: +3 -3 lines
Diff to previous 1.27 (colored)

typo in comments "optionel" -> "optional"

Revision 1.27 / (download) - annotate - [select for diffs], Sun Oct 29 08:45:53 2017 UTC (6 years, 7 months ago) by mpi
Branch: MAIN
Changes since 1.26: +2 -2 lines
Diff to previous 1.26 (colored)

Prefer <elf.h> to the non portable <sys/exec_elf.h>.

ok jca@, deraadt@

Revision 1.26 / (download) - annotate - [select for diffs], Mon Mar 27 00:28:04 2017 UTC (7 years, 2 months ago) by deraadt
Branch: MAIN
CVS Tags: OPENBSD_6_2_BASE, OPENBSD_6_2, OPENBSD_6_1_BASE, OPENBSD_6_1
Changes since 1.25: +3 -3 lines
Diff to previous 1.25 (colored)

die whitespace die die die

Revision 1.25 / (download) - annotate - [select for diffs], Sat Mar 25 16:28:25 2017 UTC (7 years, 2 months ago) by reyk
Branch: MAIN
Changes since 1.24: +9 -7 lines
Diff to previous 1.24 (colored)

Boot using BIOS from /etc/firmware/vmm-bios by default.

Instead of using the internal "vmboot", VMs will now be booted using
the external BIOS firmware in /etc/firmware/vmm-bios (which is subject
to a LGPLv3 license).  Direct booting of OpenBSD kernels or
non-default BIOS images is still supported for now using the -b/boot
option that is replacing the -k/kernel option.

As requested by Theo, vmd(8) fails if neither the default BIOS is
found nor a kernel has been specified in the VM configuration.  The
"vmm" BIOS has to be installed using fw_update(1), which will be done
automatically in most cases where the OpenBSD can fetch it after
install/upgrade.

OK mlarkin@

Revision 1.24 / (download) - annotate - [select for diffs], Sat Feb 4 07:23:25 2017 UTC (7 years, 4 months ago) by mlarkin
Branch: MAIN
Changes since 1.23: +2 -1 lines
Diff to previous 1.23 (colored)

missing function prototype

Revision 1.23 / (download) - annotate - [select for diffs], Tue Jan 17 21:51:01 2017 UTC (7 years, 4 months ago) by krw
Branch: MAIN
Changes since 1.22: +2 -2 lines
Diff to previous 1.22 (colored)

Nuke some whitespace that keeps poking me in the eye as I try to
steal code.

Revision 1.22 / (download) - annotate - [select for diffs], Sat Nov 26 20:03:42 2016 UTC (7 years, 6 months ago) by reyk
Branch: MAIN
Changes since 1.21: +15 -7 lines
Diff to previous 1.21 (colored)

Implement basic support for boot.conf(8) on the disk image.

Like the real boot loader, load and parse hd0a:/etc/boot.conf from the
first disk and fall back to /bsd.  Not all boot loader options are
supported, but it at least does set device, set image, and boot -acds
(eg. for booting single-user).

For example, it can now boot install60.fs that includes a boot.conf
with "set image /6.0/amd64/bsd.rd":
	vmctl start install -c -d install60.fs -d OpenBSD.img

This pseudo-bootloader is only needed without BIOS and could
potentially be replaced in the future.

OK mlarkin@

Revision 1.21 / (download) - annotate - [select for diffs], Thu Nov 24 07:58:55 2016 UTC (7 years, 6 months ago) by reyk
Branch: MAIN
Changes since 1.20: +38 -38 lines
Diff to previous 1.20 (colored)

Add support for booting the kernel from the disk image.

This make the kernel/-k argument optional and, if not specified, tries
to find the /bsd kernel in the primary hd0a partition of the first
disk image itself.  It doesn't support hd0a:/etc/boot.conf yet, and it
is no BIOS or full boot loader, but it makes booting and handling of
VMs a bit easier - booting an external kernel is still supported.

The UFS file system code ufs.c is directly from libsa which is also
used by the real boot loader.  The code compiles with a few signedness
warning which will be fixed separately.

OK mlarkin@

Revision 1.20 / (download) - annotate - [select for diffs], Wed Oct 26 05:26:36 2016 UTC (7 years, 7 months ago) by mlarkin
Branch: MAIN
Changes since 1.19: +39 -1 lines
Diff to previous 1.19 (colored)


vmd(8)/vmctl(8) for i386. Some ugliness in #ifdef __i386__ areas will be
fixed in tree, but the changes required were pretty minimal.

Note that i386 hosts are still presently limited to running i386 guests.

ok deraadt, stefan, jca

Revision 1.19 / (download) - annotate - [select for diffs], Sat Sep 17 17:39:34 2016 UTC (7 years, 8 months ago) by jasper
Branch: MAIN
Changes since 1.18: +2 -2 lines
Diff to previous 1.18 (colored)

move the .SUNW_ctf section name definition to exec_elf.h and document it in elf(5)

feedback from guenther@
ok guenther@ kettenis@

Revision 1.18 / (download) - annotate - [select for diffs], Tue Sep 13 19:07:47 2016 UTC (7 years, 8 months ago) by jasper
Branch: MAIN
Changes since 1.17: +3 -2 lines
Diff to previous 1.17 (colored)

sync with sys/lib/libsa/loadfile_elf.c -r1.12 and load the .SUNW_ctf section

pointed out by mlarkin@

Revision 1.17 / (download) - annotate - [select for diffs], Thu Sep 1 16:04:47 2016 UTC (7 years, 9 months ago) by stefan
Branch: MAIN
Changes since 1.16: +6 -6 lines
Diff to previous 1.16 (colored)

Make vcpu_reset_regs use new writeregs code

Makes reset code a little simpler. ok mlarkin@

Revision 1.16 / (download) - annotate - [select for diffs], Wed Aug 17 05:07:13 2016 UTC (7 years, 9 months ago) by deraadt
Branch: MAIN
Changes since 1.15: +7 -7 lines
Diff to previous 1.15 (colored)

small bits of header cleanup; ok mlarkin

Revision 1.15 / (download) - annotate - [select for diffs], Thu May 26 17:10:15 2016 UTC (8 years ago) by stefan
Branch: MAIN
CVS Tags: OPENBSD_6_0_BASE, OPENBSD_6_0
Changes since 1.14: +10 -12 lines
Diff to previous 1.14 (colored)

Copy ELF headers into guest VM memory

This gives ddb access to the symbols of the kernel running inside the VM.
ok mlarkin@

Revision 1.14 / (download) - annotate - [select for diffs], Thu Apr 7 07:02:57 2016 UTC (8 years, 2 months ago) by mlarkin
Branch: MAIN
Changes since 1.13: +4 -1 lines
Diff to previous 1.13 (colored)


Place a BOOTARG_END section at the end of the boot arguments list pushed
to the VM during boot. i386 guest kernels need this marker to boot, and
with this diff, it is possible to install and run an OpenBSD i386 guest
VM using vmm(4). Note that i386 guests require a host CPU that supports
unrestricted guest mode (eg, post-Nehalem) for the time being, hopefully
this can be addressed later.

Revision 1.13 / (download) - annotate - [select for diffs], Tue Apr 5 09:33:05 2016 UTC (8 years, 2 months ago) by mlarkin
Branch: MAIN
Changes since 1.12: +34 -5 lines
Diff to previous 1.12 (colored)


Support processors without unrestricted guest capability.

ok stefan

Revision 1.12 / (download) - annotate - [select for diffs], Mon Apr 4 17:13:54 2016 UTC (8 years, 2 months ago) by stefan
Branch: MAIN
Changes since 1.11: +12 -14 lines
Diff to previous 1.11 (colored)

Directly use physical addresses from ELF header for kernel loading.

This allows us to remove the 'do_mask' parameters in read_mem and
write_mem as well as the address mask operaton itself.

ok mlarkin@

Revision 1.11 / (download) - annotate - [select for diffs], Sun Mar 13 13:11:47 2016 UTC (8 years, 2 months ago) by stefan
Branch: MAIN
Changes since 1.10: +104 -71 lines
Diff to previous 1.10 (colored)

Introduce memory ranges to support VMs with >= 4G RAM

Kernel bits:
- When creating a VM, a list of memory ranges has to be specified,
  similar to the BIOS memory map. This is necessary for VMs with
  RAM sizes approaching 4G because we'll need PCI MMIO space in
  the higher parts of the 32 bit address space.

vmctl and vmd bits:
- Construct appropriate memory ranges to create a VM with a given
  RAM size
- Construct a corresponding BIOS memory map from the memory ranges
  and update the boot params page accordingly.
- Make sure that all variables that represent guest physical addresses
  match the address width of the target CPU instead of using uint32_t.
- Fix some integer promotion glitches that actually restricted VM
  RAM size to 2G.

This changes the VM create ioctl interface, so update your kernel,
vmd, and vmctl.

ok mlarkin@

Revision 1.10 / (download) - annotate - [select for diffs], Fri Mar 4 15:34:14 2016 UTC (8 years, 3 months ago) by stefan
Branch: MAIN
Changes since 1.9: +3 -2 lines
Diff to previous 1.9 (colored)

Set root device to sd0a, instead of wd0a. Virtio devices show up
as sd. Original diff from Patrick Wildt.

In addition, using the MAKEBOOTDEV macro no longer makes bsd
ask for the root disk on VM boot.

ok mlarkin@

Revision 1.9 / (download) - annotate - [select for diffs], Sat Jan 16 08:55:40 2016 UTC (8 years, 4 months ago) by stefan
Branch: MAIN
CVS Tags: OPENBSD_5_9_BASE, OPENBSD_5_9
Changes since 1.8: +13 -13 lines
Diff to previous 1.8 (colored)

vmd(8) sometimes attempts page-crossing data copies between the host
and guest. The readpage/writepage ioctls of vmm(4) do not support this
and they return EINVAL on such attempts since recently.

Avoid page-crossing guest memory accesses by changing read_page() and
write_page() into read_mem() and write_mem() that can copy arbitrary
lengths of data between host<->guest without page-crossing accesses.

This also allows us to remove page-wise copy-loops in a few places.

ok mlarkin@

Revision 1.8 / (download) - annotate - [select for diffs], Tue Jan 5 06:55:28 2016 UTC (8 years, 5 months ago) by mlarkin
Branch: MAIN
Changes since 1.7: +5 -5 lines
Diff to previous 1.7 (colored)


Make some things static that are only used in loadfile_elf.c

diff from Michal Mazurek, thanks!

Revision 1.7 / (download) - annotate - [select for diffs], Tue Jan 5 06:54:03 2016 UTC (8 years, 5 months ago) by mlarkin
Branch: MAIN
Changes since 1.6: +5 -2 lines
Diff to previous 1.6 (colored)


Fail fast if elf64_exec fails. No need to populate the bootargs/stack
and gdt pages if we couldn't load the kernel.

diff from Michal Mazurek, thanks!

Revision 1.6 / (download) - annotate - [select for diffs], Tue Jan 5 06:51:54 2016 UTC (8 years, 5 months ago) by mlarkin
Branch: MAIN
Changes since 1.5: +10 -10 lines
Diff to previous 1.5 (colored)


more bzero -> memset conversions

from Michal Mazurek, thanks!

Revision 1.5 / (download) - annotate - [select for diffs], Thu Dec 17 09:29:28 2015 UTC (8 years, 5 months ago) by mlarkin
Branch: MAIN
Changes since 1.4: +17 -9 lines
Diff to previous 1.4 (colored)


Move vcpu register state init to vmd. Allows vmd bootloader to make the
decision as to how the vcpu should be set up for initial start and
reset. Also removes some hardcoded register constants from vmm(4).

ok jsing@, mpi@

Revision 1.4 / (download) - annotate - [select for diffs], Sun Dec 6 17:42:15 2015 UTC (8 years, 6 months ago) by mlarkin
Branch: MAIN
Changes since 1.3: +1 -2 lines
Diff to previous 1.3 (colored)


un-needed extern which was removed a while back

Revision 1.3 / (download) - annotate - [select for diffs], Thu Dec 3 08:42:11 2015 UTC (8 years, 6 months ago) by reyk
Branch: MAIN
Changes since 1.2: +11 -7 lines
Diff to previous 1.2 (colored)

spacing

Revision 1.2 / (download) - annotate - [select for diffs], Mon Nov 23 13:04:49 2015 UTC (8 years, 6 months ago) by reyk
Branch: MAIN
Changes since 1.1: +4 -7 lines
Diff to previous 1.1 (colored)

Add support for logging to stderr or syslog, and to run vmd in
foreground with -d.

OK mlarkin@ jung@

Revision 1.1 / (download) - annotate - [select for diffs], Sun Nov 22 20:20:32 2015 UTC (8 years, 6 months ago) by mlarkin
Branch: MAIN


vmd(8) - virtual machine daemon.

There is still a lot to be done, and fixed, in these userland components
but I have received enough "it works, commit it" emails that it's time
to finish those things in tree.

discussed with many, tested by many.

This form allows you to request diff's between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.