From 187777e402789499900faa7778ed006cbdfaf937 Mon Sep 17 00:00:00 2001 From: Hans van Kranenburg Date: Wed, 13 Jul 2022 15:28:39 +0100 Subject: [PATCH] Import xen_4.14.5+24-g87d90d511c.orig.tar.xz [dgit import orig xen_4.14.5+24-g87d90d511c.orig.tar.xz] --- .gitarchive-info | 2 + .gitattributes | 1 + .gitignore | 418 + .gitlab-ci.yml | 7 + .hgignore | 329 + .hgsigs | 11 + .hgtags | 59 + .travis.yml | 88 + CHANGELOG.md | 36 + CODING_STYLE | 237 + CONTRIBUTING | 231 + COPYING | 416 + CREDITS | 16 + Config.mk | 268 + INSTALL | 369 + MAINTAINERS | 539 + Makefile | 330 + README | 209 + SUPPORT.md | 990 ++ autogen.sh | 12 + automation/build/Makefile | 19 + automation/build/README.md | 95 + automation/build/archlinux/current.dockerfile | 54 + automation/build/centos/6.dockerfile | 51 + automation/build/centos/7.2.dockerfile | 50 + automation/build/centos/7.dockerfile | 49 + automation/build/centos/CentOS-7.2.repo | 35 + .../build/debian/jessie-i386.dockerfile | 50 + automation/build/debian/jessie.dockerfile | 48 + .../build/debian/stretch-i386.dockerfile | 52 + automation/build/debian/stretch-llvm-8.list | 3 + automation/build/debian/stretch.dockerfile | 63 + .../build/debian/unstable-arm64v8.dockerfile | 49 + .../build/debian/unstable-i386.dockerfile | 52 + automation/build/debian/unstable-llvm-8.list | 3 + automation/build/debian/unstable.dockerfile | 64 + automation/build/fedora/29.dockerfile | 45 + .../build/suse/opensuse-leap.dockerfile | 69 + .../build/suse/opensuse-tumbleweed.dockerfile | 70 + automation/build/suse/sles11sp4.dockerfile | 20 + automation/build/ubuntu/bionic.dockerfile | 49 + automation/build/ubuntu/trusty.dockerfile | 49 + automation/build/ubuntu/xenial.dockerfile | 49 + automation/configs/x86/hvm_only_config | 3 + automation/configs/x86/no_hvm_pv_config | 3 + automation/configs/x86/pv_only_config | 3 + automation/gitlab-ci/build-each-commit.sh | 18 + automation/gitlab-ci/build.yaml | 446 + automation/gitlab-ci/test.yaml | 111 + automation/scripts/build | 65 + automation/scripts/build-test.sh | 76 + automation/scripts/containerize | 105 + automation/scripts/qemu-smoke-x86-64.sh | 32 + config.guess | 1658 ++ config.sub | 1798 +++ config/Docs.mk.in | 9 + config/FreeBSD.mk | 9 + config/Linux.mk | 3 + config/MiniOS.mk | 10 + config/NetBSD.mk | 3 + config/NetBSDRump.mk | 8 + config/OpenBSD.mk | 1 + config/Paths.mk.in | 61 + config/StdGNU.mk | 37 + config/Stubdom.mk.in | 39 + config/SunOS.mk | 35 + config/Tools.mk.in | 79 + config/Toplevel.mk.in | 2 + config/arm32.mk | 15 + config/arm64.mk | 14 + config/x86_32.mk | 15 + config/x86_64.mk | 27 + configure | 3618 +++++ configure.ac | 46 + docs/INDEX | 28 + docs/Makefile | 244 + docs/README.colo | 9 + docs/README.remus | 20 + docs/README.source | 32 + docs/admin-guide/index.rst | 8 + docs/admin-guide/introduction.rst | 40 + docs/admin-guide/microcode-loading.rst | 152 + docs/admin-guide/xen-overview.drawio.svg | 97 + docs/conf.py | 194 + docs/configure | 3427 +++++ docs/configure.ac | 32 + docs/designs/argo.pandoc | 448 + docs/designs/dmop.pandoc | 175 + docs/designs/non-cooperative-migration.md | 280 + docs/designs/qemu-deprivilege.md | 322 + docs/designs/xenstore-migration.md | 411 + docs/features/dom0less.pandoc | 135 + docs/features/feature-levelling.pandoc | 216 + docs/features/hypervisorfs.pandoc | 92 + docs/features/intel_psr_cat_cdp.pandoc | 512 + docs/features/intel_psr_mba.pandoc | 297 + docs/features/livepatch.pandoc | 106 + docs/features/migration.pandoc | 124 + docs/features/qemu-deprivilege.pandoc | 136 + docs/features/sched_credit.pandoc | 100 + docs/features/sched_credit2.pandoc | 108 + docs/features/sched_rtds.pandoc | 122 + docs/features/template.pandoc | 75 + docs/figs/Makefile | 15 + docs/figs/network-basic.fig | 73 + docs/figs/network-bridge.fig | 125 + docs/figs/xenlogo.eps | 1479 ++ docs/gen-html-index | 177 + docs/glossary.rst | 52 + docs/guest-guide/index.rst | 9 + docs/guest-guide/x86/hypercall-abi.rst | 129 + docs/guest-guide/x86/index.rst | 9 + docs/hypervisor-guide/code-coverage.rst | 103 + docs/hypervisor-guide/index.rst | 11 + docs/hypervisor-guide/x86/how-xen-boots.rst | 101 + docs/hypervisor-guide/x86/index.rst | 9 + docs/index.rst | 61 + docs/man/xen-pci-device-reservations.7.pod | 89 + docs/man/xen-pv-channel.7.pod | 189 + docs/man/xen-tscmode.7.pod | 284 + docs/man/xen-vbd-interface.7.pandoc | 135 + docs/man/xen-vtpm.7.pod | 383 + docs/man/xen-vtpmmgr.7.pod | 383 + docs/man/xenhypfs.1.pod | 60 + docs/man/xenstore-chmod.1.pod | 62 + docs/man/xenstore-ls.1.pod | 62 + docs/man/xenstore-read.1.pod | 32 + docs/man/xenstore-write.1.pod | 29 + docs/man/xenstore.1.pod | 52 + docs/man/xentop.1.pod | 111 + docs/man/xentrace.8.pod | 166 + docs/man/xentrace_format.1.pod | 46 + docs/man/xl-disk-configuration.5.pod | 529 + docs/man/xl-network-configuration.5.pod | 251 + docs/man/xl-numa-placement.7.pod | 293 + docs/man/xl.1.pod.in | 1972 +++ docs/man/xl.cfg.5.pod.in | 2933 ++++ docs/man/xl.conf.5.pod | 229 + docs/man/xlcpupool.cfg.5.pod | 133 + docs/misc/9pfs.pandoc | 419 + docs/misc/amd-ucode-container.txt | 90 + docs/misc/arm/big.LITTLE.txt | 46 + docs/misc/arm/booting.txt | 41 + docs/misc/arm/device-tree/acpi.txt | 24 + docs/misc/arm/device-tree/booting.txt | 270 + docs/misc/arm/device-tree/guest.txt | 60 + docs/misc/arm/device-tree/passthrough.txt | 9 + docs/misc/arm/early-printk.txt | 39 + docs/misc/arm/passthrough.txt | 192 + docs/misc/arm/silicon-errata.txt | 59 + docs/misc/block-scripts.txt | 125 + docs/misc/console.txt | 154 + docs/misc/crashdb.txt | 63 + docs/misc/distro_mapping.txt | 26 + docs/misc/dump-core-format.txt | 252 + docs/misc/efi.pandoc | 118 + docs/misc/grant-tables.txt | 383 + docs/misc/hvm-emulated-unplug.pandoc | 97 + docs/misc/hypfs-paths.pandoc | 185 + docs/misc/kconfig-language.rst | 701 + docs/misc/kconfig-macro-language.rst | 247 + docs/misc/kconfig.rst | 304 + docs/misc/kexec_and_kdump.txt | 216 + docs/misc/libxl_memory.txt | 70 + docs/misc/livepatch.pandoc | 1302 ++ docs/misc/netif-staging-grants.pandoc | 587 + docs/misc/printk-formats.txt | 50 + docs/misc/pv-drivers-lifecycle.pandoc | 57 + docs/misc/pvcalls.pandoc | 1084 ++ docs/misc/pvh.pandoc | 112 + docs/misc/qemu-backends.txt | 21 + docs/misc/status-override-table-spec.fodt | 707 + docs/misc/stubdom.txt | 198 + docs/misc/support-matrix-head.html | 41 + docs/misc/vtd-pi.txt | 336 + docs/misc/vtd.txt | 315 + docs/misc/vtpm-platforms.txt | 141 + docs/misc/x86-xenpv-bootloader.pandoc | 49 + docs/misc/xen-command-line.pandoc | 2573 ++++ docs/misc/xen-env-table-spec.fodt | 852 ++ docs/misc/xen-error-handling.txt | 88 + docs/misc/xen-makefiles/makefiles.rst | 185 + docs/misc/xen_config.html | 161 + docs/misc/xenmon.txt | 114 + docs/misc/xenpaging.txt | 45 + docs/misc/xenstore-paths.pandoc | 654 + docs/misc/xenstore-ring.txt | 116 + docs/misc/xenstore.txt | 337 + docs/misc/xl-psr.pandoc | 254 + docs/misc/xsm-flask.txt | 288 + docs/parse-support-md | 549 + docs/process/RUBRIC | 15 + docs/process/branching-checklist.txt | 94 + docs/process/release-technician-checklist.txt | 160 + docs/process/tags.pandoc | 55 + docs/process/xen-release-management.pandoc | 603 + docs/specs/libxc-migration-stream.pandoc | 806 + docs/specs/libxl-migration-stream.pandoc | 319 + docs/support-matrix-generate | 190 + docs/xen-headers | 399 + install.sh | 35 + m4/README.source | 43 + m4/ax_compare_version.m4 | 179 + m4/checkpolicy.m4 | 12 + m4/curses.m4 | 20 + m4/depends.m4 | 15 + m4/docs_tool.m4 | 17 + m4/extfs.m4 | 20 + m4/features.m4 | 21 + m4/fetcher.m4 | 16 + m4/golang.m4 | 8 + m4/ocaml.m4 | 241 + m4/path_or_fail.m4 | 6 + m4/paths.m4 | 170 + m4/pkg.m4 | 232 + m4/pthread.m4 | 41 + m4/ptyfuncs.m4 | 35 + m4/python_devel.m4 | 45 + m4/python_fortify_noopt.m4 | 31 + m4/python_version.m4 | 12 + m4/savevar.m4 | 6 + m4/set_cflags_ldflags.m4 | 24 + m4/stubdom.m4 | 98 + m4/subsystem.m4 | 71 + m4/systemd.m4 | 126 + m4/uuid.m4 | 9 + m4/xenstored.m4 | 56 + misc/coverity/model.c | 151 + scripts/add_maintainers.pl | 555 + scripts/get_maintainer.pl | 2228 +++ scripts/git-checkout.sh | 27 + scripts/travis-build | 27 + stubdom/COPYING | 31 + stubdom/Makefile | 736 + stubdom/c/Makefile | 13 + stubdom/c/main.c | 8 + stubdom/c/minios.cfg | 0 stubdom/caml/Makefile | 24 + stubdom/caml/hello.ml | 4 + stubdom/caml/main-caml.c | 42 + stubdom/caml/minios.cfg | 0 stubdom/configure | 4870 ++++++ stubdom/configure.ac | 82 + stubdom/grub.patches/00cvs | 1022 ++ stubdom/grub.patches/10graphics.diff | 2297 +++ stubdom/grub.patches/11graphics-keyboard.diff | 13 + stubdom/grub.patches/20print_func.diff | 52 + stubdom/grub.patches/30savedefault.diff | 186 + .../grub.patches/40ext3_256byte_inode.diff | 114 + stubdom/grub.patches/50fs_fulldisk.diff | 72 + stubdom/grub.patches/60ext4.diff | 474 + stubdom/grub.patches/61btrfs.diff | 3499 +++++ stubdom/grub.patches/70compiler_warnings.diff | 45 + stubdom/grub.patches/99minios | 1570 ++ stubdom/grub/Makefile | 86 + stubdom/grub/boot-x86_32.S | 112 + stubdom/grub/boot-x86_64.S | 108 + stubdom/grub/config.h | 12 + stubdom/grub/kexec.c | 432 + stubdom/grub/mini-os.c | 771 + stubdom/grub/mini-os.h | 7 + stubdom/grub/minios.cfg | 3 + stubdom/grub/osdep.h | 30 + stubdom/ioemu-minios.cfg | 4 + stubdom/libpci.config.h | 5 + stubdom/libpci.config.mak | 7 + .../lwip.dhcp_create_request-hwaddr_len.patch | 13 + stubdom/lwip.patch-cvs | 2398 +++ stubdom/newlib-chk.patch | 155 + stubdom/newlib-disable-texinfo.patch | 13 + ...wlib-stdint-size_max-fix-from-1.17.0.patch | 16 + stubdom/newlib.patch | 727 + stubdom/ocaml.patch | 19 + stubdom/pciutils.patch | 298 + stubdom/polarssl.patch | 64 + stubdom/stubdom-dm | 182 + stubdom/tpmemu-0.7.4.patch | 12 + stubdom/vtpm-bufsize.patch | 13 + stubdom/vtpm-cmake-Wextra.patch | 21 + stubdom/vtpm-deepquote-anyloc.patch | 127 + stubdom/vtpm-deepquote.patch | 187 + stubdom/vtpm-implicit-fallthrough.patch | 10 + stubdom/vtpm-locality.patch | 50 + stubdom/vtpm-parent-sign-ek.patch | 196 + stubdom/vtpm/COPYING | 26 + stubdom/vtpm/Makefile | 34 + stubdom/vtpm/minios.cfg | 14 + stubdom/vtpm/vtpm.c | 504 + stubdom/vtpm/vtpm.h | 36 + stubdom/vtpm/vtpm_cmd.c | 302 + stubdom/vtpm/vtpm_cmd.h | 31 + stubdom/vtpm/vtpm_pcrs.c | 43 + stubdom/vtpm/vtpm_pcrs.h | 53 + stubdom/vtpm/vtpmblk.c | 354 + stubdom/vtpm/vtpmblk.h | 31 + stubdom/vtpm_TPM_ChangeAuthAsymFinish.patch | 12 + stubdom/vtpm_extern.patch | 48 + stubdom/vtpmmgr/Makefile | 36 + stubdom/vtpmmgr/README.source | 27 + stubdom/vtpmmgr/calc.pl | 97 + stubdom/vtpmmgr/common_types.h | 9 + stubdom/vtpmmgr/disk_crypto.c | 231 + stubdom/vtpmmgr/disk_crypto.h | 17 + stubdom/vtpmmgr/disk_format.h | 193 + stubdom/vtpmmgr/disk_io.c | 125 + stubdom/vtpmmgr/disk_io.h | 25 + stubdom/vtpmmgr/disk_read.c | 619 + stubdom/vtpmmgr/disk_tpm.c | 297 + stubdom/vtpmmgr/disk_tpm.h | 29 + stubdom/vtpmmgr/disk_write.c | 419 + stubdom/vtpmmgr/endian_int.h | 72 + stubdom/vtpmmgr/init.c | 790 + stubdom/vtpmmgr/log.c | 151 + stubdom/vtpmmgr/log.h | 87 + stubdom/vtpmmgr/manage-vtpmmgr.pl | 160 + stubdom/vtpmmgr/marshal.h | 927 ++ stubdom/vtpmmgr/mgmt_authority.c | 396 + stubdom/vtpmmgr/mgmt_authority.h | 11 + stubdom/vtpmmgr/minios.cfg | 14 + stubdom/vtpmmgr/tcg.h | 765 + stubdom/vtpmmgr/tpm.c | 904 ++ stubdom/vtpmmgr/tpm.h | 184 + stubdom/vtpmmgr/tpm2.c | 455 + stubdom/vtpmmgr/tpm2.h | 104 + stubdom/vtpmmgr/tpm2_marshal.h | 731 + stubdom/vtpmmgr/tpm2_types.h | 969 ++ stubdom/vtpmmgr/tpmrsa.c | 199 + stubdom/vtpmmgr/tpmrsa.h | 70 + stubdom/vtpmmgr/uuid.h | 50 + stubdom/vtpmmgr/vtpm_cmd_handler.c | 882 ++ stubdom/vtpmmgr/vtpm_disk.c | 237 + stubdom/vtpmmgr/vtpm_disk.h | 233 + stubdom/vtpmmgr/vtpm_manager.h | 470 + stubdom/vtpmmgr/vtpmmgr.c | 127 + stubdom/vtpmmgr/vtpmmgr.h | 116 + stubdom/xenstore-minios.cfg | 9 + tools/Makefile | 342 + tools/Rules.mk | 276 + tools/config.h.in | 138 + tools/configure | 11329 ++++++++++++++ tools/configure.ac | 519 + tools/console/Makefile | 58 + tools/console/client/main.c | 503 + tools/console/daemon/io.c | 1479 ++ tools/console/daemon/io.h | 25 + tools/console/daemon/main.c | 225 + tools/console/daemon/utils.c | 139 + tools/console/daemon/utils.h | 47 + tools/console/testsuite/Makefile | 17 + tools/console/testsuite/README | 29 + tools/console/testsuite/console-dom0.c | 117 + tools/console/testsuite/console-domU.c | 76 + tools/console/testsuite/procpipe.c | 133 + tools/cross-install | 8 + tools/debugger/gdbsx/Makefile | 34 + tools/debugger/gdbsx/README | 130 + tools/debugger/gdbsx/Rules.mk | 6 + tools/debugger/gdbsx/gx/Makefile | 22 + tools/debugger/gdbsx/gx/gx.h | 38 + tools/debugger/gdbsx/gx/gx_comm.c | 332 + tools/debugger/gdbsx/gx/gx_local.c | 145 + tools/debugger/gdbsx/gx/gx_main.c | 695 + tools/debugger/gdbsx/gx/gx_utils.c | 143 + tools/debugger/gdbsx/gx/xg_dummy.c | 120 + tools/debugger/gdbsx/xg/Makefile | 38 + tools/debugger/gdbsx/xg/xg_main.c | 836 + tools/debugger/gdbsx/xg/xg_public.h | 100 + tools/debugger/kdd/Makefile | 31 + tools/debugger/kdd/kdd-xen.c | 624 + tools/debugger/kdd/kdd.c | 1385 ++ tools/debugger/kdd/kdd.h | 519 + tools/examples/Makefile | 59 + tools/examples/README | 33 + tools/examples/README.incompatibilities | 38 + tools/examples/cpupool | 17 + tools/examples/vnc/Xservers | 5 + tools/examples/vnc/Xvnc-xen | 53 + tools/examples/xeninfo.pl | 284 + tools/examples/xl.conf | 48 + tools/examples/xlexample.hvm | 47 + tools/examples/xlexample.pvhlinux | 42 + tools/examples/xlexample.pvlinux | 44 + tools/firmware/Makefile | 138 + tools/firmware/Rules.mk | 25 + tools/firmware/etherboot/Config | 9 + tools/firmware/etherboot/Makefile | 61 + tools/firmware/etherboot/README | 28 + .../patches/boot_prompt_option.patch | 34 + tools/firmware/etherboot/patches/series | 1 + tools/firmware/hvmloader/32bitbios_support.c | 159 + tools/firmware/hvmloader/Makefile | 115 + tools/firmware/hvmloader/apic_regs.h | 118 + tools/firmware/hvmloader/cacheattr.c | 144 + tools/firmware/hvmloader/config-seabios.h | 16 + tools/firmware/hvmloader/config.h | 102 + tools/firmware/hvmloader/ctype.c | 27 + tools/firmware/hvmloader/ctype.h | 29 + tools/firmware/hvmloader/e820.c | 312 + tools/firmware/hvmloader/e820.h | 35 + tools/firmware/hvmloader/hvm_param.c | 36 + tools/firmware/hvmloader/hvmloader.c | 451 + tools/firmware/hvmloader/hvmloader.lds | 15 + tools/firmware/hvmloader/hypercall.h | 192 + tools/firmware/hvmloader/mp_tables.c | 348 + tools/firmware/hvmloader/option_rom.h | 67 + tools/firmware/hvmloader/optionroms.c | 188 + tools/firmware/hvmloader/ovmf.c | 176 + tools/firmware/hvmloader/pci.c | 565 + tools/firmware/hvmloader/pci_regs.h | 120 + tools/firmware/hvmloader/pir.c | 76 + tools/firmware/hvmloader/pir_types.h | 70 + tools/firmware/hvmloader/rombios.c | 249 + tools/firmware/hvmloader/seabios.c | 171 + tools/firmware/hvmloader/smbios.c | 1022 ++ tools/firmware/hvmloader/smbios_types.h | 275 + tools/firmware/hvmloader/smp.c | 141 + tools/firmware/hvmloader/tests.c | 392 + tools/firmware/hvmloader/util.c | 1033 ++ tools/firmware/hvmloader/util.h | 301 + tools/firmware/hvmloader/vnuma.c | 79 + tools/firmware/hvmloader/vnuma.h | 52 + tools/firmware/hvmloader/xenbus.c | 319 + tools/firmware/ovmf-makefile | 31 + tools/firmware/rombios/32bit/32bitbios.c | 33 + tools/firmware/rombios/32bit/Makefile | 35 + tools/firmware/rombios/32bit/mkhex | 25 + tools/firmware/rombios/32bit/pmm.c | 534 + tools/firmware/rombios/32bit/rombios_compat.h | 99 + tools/firmware/rombios/32bit/tcgbios/Makefile | 23 + .../firmware/rombios/32bit/tcgbios/tcgbios.c | 1527 ++ .../firmware/rombios/32bit/tcgbios/tcgbios.h | 249 + .../rombios/32bit/tcgbios/tpm_drivers.c | 195 + .../rombios/32bit/tcgbios/tpm_drivers.h | 18 + tools/firmware/rombios/32bit/util.c | 465 + tools/firmware/rombios/32bit/util.h | 46 + tools/firmware/rombios/32bitgateway.c | 176 + tools/firmware/rombios/32bitprotos.h | 16 + tools/firmware/rombios/Makefile | 34 + tools/firmware/rombios/apmbios.S | 366 + tools/firmware/rombios/biossums.c | 478 + tools/firmware/rombios/config.h | 36 + tools/firmware/rombios/e820.h | 18 + tools/firmware/rombios/makesym.perl | 31 + tools/firmware/rombios/rombios.c | 11860 +++++++++++++++ tools/firmware/rombios/rombios.h | 70 + tools/firmware/rombios/tcgbios.c | 101 + tools/firmware/seabios-config | 108 + tools/firmware/vgabios/BUGS | 3 + tools/firmware/vgabios/COPYING | 503 + tools/firmware/vgabios/ChangeLog | 1264 ++ tools/firmware/vgabios/Makefile | 89 + tools/firmware/vgabios/Notes | 11 + tools/firmware/vgabios/README | 219 + tools/firmware/vgabios/TODO | 26 + tools/firmware/vgabios/biossums.c | 281 + tools/firmware/vgabios/clext.c | 1716 +++ tools/firmware/vgabios/dataseghack | 23 + tools/firmware/vgabios/vbe.c | 1472 ++ tools/firmware/vgabios/vbe.h | 315 + tools/firmware/vgabios/vbe_display_api.txt | 237 + tools/firmware/vgabios/vbetables-gen.c | 261 + tools/firmware/vgabios/vgabios.c | 3852 +++++ tools/firmware/vgabios/vgabios.h | 47 + tools/firmware/vgabios/vgafonts.h | 784 + tools/firmware/vgabios/vgatables.h | 623 + tools/firmware/xen-dir/Makefile | 76 + tools/flask/Makefile | 9 + tools/flask/policy/Makefile | 6 + tools/flask/policy/Makefile.common | 135 + tools/flask/policy/modules/all_system_role.te | 3 + tools/flask/policy/modules/dom0.te | 77 + tools/flask/policy/modules/domU.te | 28 + tools/flask/policy/modules/guest_features.te | 35 + tools/flask/policy/modules/isolated_domU.te | 7 + tools/flask/policy/modules/modules.conf | 49 + tools/flask/policy/modules/nic_dev.te | 14 + tools/flask/policy/modules/nomigrate.te | 8 + tools/flask/policy/modules/prot_domU.te | 13 + tools/flask/policy/modules/vm_role.cons | 40 + tools/flask/policy/modules/vm_role.te | 16 + tools/flask/policy/modules/xen.if | 213 + tools/flask/policy/modules/xen.te | 92 + tools/flask/policy/modules/xenstore.te | 24 + tools/flask/policy/policy/access_vectors | 5 + tools/flask/policy/policy/device_contexts | 32 + tools/flask/policy/policy/global_tunables | 5 + tools/flask/policy/policy/initial_sids | 18 + tools/flask/policy/policy/mls | 83 + tools/flask/policy/policy/security_classes | 7 + .../policy/policy/support/misc_macros.spt | 72 + .../policy/policy/support/mls_macros.spt | 55 + tools/flask/policy/policy/users | 1 + tools/flask/utils/Makefile | 62 + tools/flask/utils/get-bool.c | 89 + tools/flask/utils/getenforce.c | 65 + tools/flask/utils/label-pci.c | 123 + tools/flask/utils/loadpolicy.c | 127 + tools/flask/utils/set-bool.c | 71 + tools/flask/utils/setenforce.c | 72 + tools/fuzz/Makefile | 9 + tools/fuzz/README.afl | 64 + tools/fuzz/README.oss-fuzz | 39 + tools/fuzz/cpu-policy/.gitignore | 1 + tools/fuzz/cpu-policy/Makefile | 28 + tools/fuzz/cpu-policy/afl-policy-fuzzer.c | 189 + tools/fuzz/libelf/Makefile | 42 + tools/fuzz/libelf/afl-libelf-fuzzer.c | 57 + tools/fuzz/libelf/libelf-fuzzer.c | 34 + tools/fuzz/x86_instruction_emulator/Makefile | 69 + .../x86_instruction_emulator/afl-harness.c | 132 + .../fuzz/x86_instruction_emulator/fuzz-emul.c | 955 ++ .../fuzz/x86_instruction_emulator/fuzz-emul.h | 10 + tools/golang/Makefile | 20 + tools/golang/xenlight/LICENSE | 502 + tools/golang/xenlight/Makefile | 55 + tools/golang/xenlight/README.md | 28 + tools/golang/xenlight/gengotypes.py | 738 + tools/golang/xenlight/go.mod | 3 + tools/golang/xenlight/helpers.gen.go | 4182 +++++ tools/golang/xenlight/types.gen.go | 1194 ++ tools/golang/xenlight/xenlight.go | 1273 ++ tools/helpers/Makefile | 59 + tools/helpers/init-dom-json.c | 72 + tools/helpers/init-dom-json.h | 19 + tools/helpers/init-xenstore-domain.c | 485 + tools/helpers/xen-init-dom0.c | 133 + tools/hotplug/FreeBSD/Makefile | 58 + tools/hotplug/FreeBSD/block | 25 + tools/hotplug/FreeBSD/rc.d/xencommons.in | 125 + tools/hotplug/FreeBSD/rc.d/xendriverdomain.in | 45 + tools/hotplug/FreeBSD/vif-bridge | 43 + tools/hotplug/Linux/Makefile | 88 + tools/hotplug/Linux/block | 372 + tools/hotplug/Linux/block-common.sh | 128 + tools/hotplug/Linux/block-drbd-probe | 86 + tools/hotplug/Linux/block-dummy | 107 + tools/hotplug/Linux/block-enbd | 27 + tools/hotplug/Linux/block-iscsi | 154 + tools/hotplug/Linux/block-nbd | 27 + tools/hotplug/Linux/block-tap | 123 + tools/hotplug/Linux/colo-proxy-setup | 149 + tools/hotplug/Linux/external-device-migrate | 97 + .../Linux/init.d/sysconfig.xencommons.in | 100 + .../Linux/init.d/sysconfig.xendomains.in | 137 + tools/hotplug/Linux/init.d/xen-watchdog.in | 90 + tools/hotplug/Linux/init.d/xencommons.in | 119 + tools/hotplug/Linux/init.d/xendomains.in | 50 + tools/hotplug/Linux/init.d/xendriverdomain.in | 84 + tools/hotplug/Linux/launch-xenstore.in | 87 + tools/hotplug/Linux/locking.sh | 137 + tools/hotplug/Linux/logging.sh | 21 + tools/hotplug/Linux/remus-netbuf-setup | 230 + tools/hotplug/Linux/systemd/Makefile | 52 + tools/hotplug/Linux/systemd/proc-xen.mount.in | 10 + .../systemd/show_service_dependencies.sh | 31 + .../Linux/systemd/var-lib-xenstored.mount.in | 12 + .../Linux/systemd/xen-init-dom0.service.in | 15 + .../xen-qemu-dom0-disk-backend.service.in | 21 + .../Linux/systemd/xen-watchdog.service.in | 13 + .../Linux/systemd/xenconsoled.service.in | 18 + .../Linux/systemd/xendomains.service.in | 19 + .../Linux/systemd/xendriverdomain.service.in | 12 + .../Linux/systemd/xenstored.service.in | 19 + tools/hotplug/Linux/vif-bridge | 110 + tools/hotplug/Linux/vif-common.sh | 246 + tools/hotplug/Linux/vif-nat | 190 + tools/hotplug/Linux/vif-openvswitch | 109 + .../Linux/vif-post.d/00-vif-local.hook | 18 + tools/hotplug/Linux/vif-route | 68 + tools/hotplug/Linux/vif-setup.in | 9 + tools/hotplug/Linux/vif2 | 54 + tools/hotplug/Linux/vscsi | 22 + tools/hotplug/Linux/xen-hotplug-common.sh.in | 112 + tools/hotplug/Linux/xen-network-common.sh | 151 + tools/hotplug/Linux/xen-script-common.sh | 43 + tools/hotplug/Linux/xendomains.in | 596 + tools/hotplug/Makefile | 10 + tools/hotplug/NetBSD/Makefile | 60 + tools/hotplug/NetBSD/block | 97 + tools/hotplug/NetBSD/rc.d/xen-watchdog | 23 + tools/hotplug/NetBSD/rc.d/xencommons.in | 124 + tools/hotplug/NetBSD/rc.d/xendomains | 133 + tools/hotplug/NetBSD/rc.d/xendriverdomain.in | 49 + tools/hotplug/NetBSD/vif-bridge | 35 + tools/hotplug/NetBSD/vif-ip | 34 + tools/hotplug/common/Makefile | 50 + tools/include/Makefile | 89 + tools/include/xen-external/README | 24 + tools/include/xen-external/bsd-COPYRIGHT | 126 + tools/include/xen-external/bsd-queue.3 | 1044 ++ .../xen-external/bsd-sys-queue-h-seddery | 74 + tools/include/xen-external/bsd-sys-queue.h | 637 + tools/include/xen-foreign/Makefile | 56 + tools/include/xen-foreign/mkchecker.py | 70 + tools/include/xen-foreign/mkheader.py | 215 + tools/include/xen-foreign/reference.size | 14 + tools/include/xen-foreign/structs.py | 65 + tools/include/xen-sys/FreeBSD/evtchn.h | 87 + tools/include/xen-sys/FreeBSD/gntdev.h | 191 + tools/include/xen-sys/FreeBSD/privcmd.h | 64 + tools/include/xen-sys/Linux/evtchn.h | 103 + tools/include/xen-sys/Linux/gntalloc.h | 82 + tools/include/xen-sys/Linux/gntdev.h | 277 + tools/include/xen-sys/Linux/privcmd.h | 120 + tools/include/xen-sys/Linux/xenbus_dev.h | 44 + tools/include/xen-sys/MiniOS/privcmd.h | 36 + tools/include/xen-sys/NetBSD/evtchn.h | 86 + tools/include/xen-sys/NetBSD/privcmd.h | 106 + tools/include/xen-sys/NetBSDRump/evtchn.h | 86 + tools/include/xen-sys/NetBSDRump/privcmd.h | 106 + tools/include/xen-sys/SunOS/evtchn.h | 94 + tools/include/xen-sys/SunOS/privcmd.h | 85 + tools/include/xen-sys/SunOS/xenbus.h | 42 + tools/include/xen-tools/libs.h | 62 + tools/libacpi/COPYING | 468 + tools/libacpi/Makefile | 105 + tools/libacpi/README | 32 + tools/libacpi/acpi2_0.h | 465 + tools/libacpi/build.c | 694 + tools/libacpi/dsdt.asl | 456 + tools/libacpi/dsdt_acpi_info.asl | 26 + tools/libacpi/libacpi.h | 113 + tools/libacpi/mk_dsdt.c | 548 + tools/libacpi/ssdt_laptop_slate.asl | 38 + tools/libacpi/ssdt_pm.asl | 418 + tools/libacpi/ssdt_s3.asl | 28 + tools/libacpi/ssdt_s4.asl | 28 + tools/libacpi/ssdt_tpm.asl | 28 + tools/libacpi/static_tables.c | 169 + tools/libfsimage/Makefile | 16 + tools/libfsimage/Rules.mk | 34 + tools/libfsimage/common/Makefile | 55 + tools/libfsimage/common/fsimage.c | 169 + tools/libfsimage/common/fsimage_grub.c | 340 + tools/libfsimage/common/fsimage_plugin.c | 196 + tools/libfsimage/common/fsimage_priv.h | 63 + tools/libfsimage/common/mapfile-GNU | 40 + tools/libfsimage/common/mapfile-SunOS | 38 + tools/libfsimage/common/xenfsimage.h | 56 + tools/libfsimage/common/xenfsimage_grub.h | 102 + tools/libfsimage/common/xenfsimage_plugin.h | 64 + tools/libfsimage/ext2fs-lib/Makefile | 21 + tools/libfsimage/ext2fs-lib/ext2fs-lib.c | 174 + tools/libfsimage/ext2fs/Makefile | 16 + tools/libfsimage/ext2fs/fsys_ext2fs.c | 916 ++ tools/libfsimage/fat/Makefile | 16 + tools/libfsimage/fat/fat.h | 99 + tools/libfsimage/fat/fsys_fat.c | 484 + tools/libfsimage/iso9660/Makefile | 18 + tools/libfsimage/iso9660/fsys_iso9660.c | 462 + tools/libfsimage/iso9660/iso9660.h | 218 + tools/libfsimage/reiserfs/Makefile | 16 + tools/libfsimage/reiserfs/fsys_reiserfs.c | 1240 ++ tools/libfsimage/ufs/Makefile | 16 + tools/libfsimage/ufs/fsys_ufs.c | 277 + tools/libfsimage/ufs/ufs.h | 228 + tools/libfsimage/xfs/Makefile | 16 + tools/libfsimage/xfs/fsys_xfs.c | 636 + tools/libfsimage/xfs/xfs.h | 543 + tools/libfsimage/zfs/Makefile | 40 + tools/libfsimage/zfs/filesys.h | 32 + tools/libfsimage/zfs/fsi_zfs.c | 157 + tools/libfsimage/zfs/fsi_zfs.h | 102 + tools/libfsimage/zfs/fsys_zfs.c | 1544 ++ tools/libfsimage/zfs/fsys_zfs.h | 204 + tools/libfsimage/zfs/mb_info.h | 216 + tools/libfsimage/zfs/shared.h | 32 + tools/libfsimage/zfs/zfs-include/dmu.h | 119 + tools/libfsimage/zfs/zfs-include/dmu_objset.h | 37 + tools/libfsimage/zfs/zfs-include/dnode.h | 78 + .../libfsimage/zfs/zfs-include/dsl_dataset.h | 54 + tools/libfsimage/zfs/zfs-include/dsl_dir.h | 50 + tools/libfsimage/zfs/zfs-include/sa_impl.h | 34 + tools/libfsimage/zfs/zfs-include/spa.h | 313 + .../zfs/zfs-include/uberblock_impl.h | 50 + tools/libfsimage/zfs/zfs-include/vdev_impl.h | 58 + tools/libfsimage/zfs/zfs-include/zap_impl.h | 110 + tools/libfsimage/zfs/zfs-include/zap_leaf.h | 101 + tools/libfsimage/zfs/zfs-include/zfs.h | 107 + tools/libfsimage/zfs/zfs-include/zfs_acl.h | 61 + tools/libfsimage/zfs/zfs-include/zfs_znode.h | 68 + tools/libfsimage/zfs/zfs-include/zil.h | 56 + tools/libfsimage/zfs/zfs-include/zio.h | 78 + .../libfsimage/zfs/zfs-include/zio_checksum.h | 41 + tools/libfsimage/zfs/zfs_fletcher.c | 94 + tools/libfsimage/zfs/zfs_lzjb.c | 60 + tools/libfsimage/zfs/zfs_sha256.c | 125 + tools/libs/Makefile | 18 + tools/libs/call/Makefile | 19 + tools/libs/call/buffer.c | 193 + tools/libs/call/core.c | 173 + tools/libs/call/freebsd.c | 123 + tools/libs/call/include/xencall.h | 143 + tools/libs/call/libxencall.map | 29 + tools/libs/call/linux.c | 189 + tools/libs/call/minios.c | 86 + tools/libs/call/netbsd.c | 126 + tools/libs/call/private.h | 75 + tools/libs/call/solaris.c | 102 + tools/libs/call/xencall.pc.in | 10 + tools/libs/devicemodel/Makefile | 19 + tools/libs/devicemodel/compat.c | 54 + tools/libs/devicemodel/core.c | 628 + .../libs/devicemodel/include/xendevicemodel.h | 378 + tools/libs/devicemodel/libxendevicemodel.map | 40 + tools/libs/devicemodel/linux.c | 138 + tools/libs/devicemodel/private.h | 51 + tools/libs/devicemodel/xendevicemodel.pc.in | 10 + tools/libs/evtchn/Makefile | 18 + tools/libs/evtchn/core.c | 92 + tools/libs/evtchn/freebsd.c | 145 + tools/libs/evtchn/include/xenevtchn.h | 174 + tools/libs/evtchn/libxenevtchn.map | 23 + tools/libs/evtchn/linux.c | 149 + tools/libs/evtchn/minios.c | 273 + tools/libs/evtchn/netbsd.c | 154 + tools/libs/evtchn/private.h | 31 + tools/libs/evtchn/solaris.c | 142 + tools/libs/evtchn/xenevtchn.pc.in | 10 + tools/libs/foreignmemory/Makefile | 19 + tools/libs/foreignmemory/compat.c | 72 + tools/libs/foreignmemory/core.c | 199 + tools/libs/foreignmemory/freebsd.c | 106 + .../foreignmemory/include/xenforeignmemory.h | 192 + .../foreignmemory/libxenforeignmemory.map | 21 + tools/libs/foreignmemory/linux.c | 351 + tools/libs/foreignmemory/minios.c | 69 + tools/libs/foreignmemory/netbsd.c | 111 + tools/libs/foreignmemory/private.h | 99 + tools/libs/foreignmemory/solaris.c | 108 + .../libs/foreignmemory/xenforeignmemory.pc.in | 10 + tools/libs/gnttab/Makefile | 21 + tools/libs/gnttab/freebsd.c | 347 + tools/libs/gnttab/gntshr_core.c | 101 + tools/libs/gnttab/gntshr_unimp.c | 62 + tools/libs/gnttab/gnttab_core.c | 171 + tools/libs/gnttab/gnttab_unimp.c | 121 + tools/libs/gnttab/include/xengnttab.h | 470 + tools/libs/gnttab/libxengnttab.map | 38 + tools/libs/gnttab/linux.c | 524 + tools/libs/gnttab/minios.c | 149 + tools/libs/gnttab/private.h | 72 + tools/libs/gnttab/xengnttab.pc.in | 10 + tools/libs/hypfs/Makefile | 16 + tools/libs/hypfs/core.c | 534 + tools/libs/hypfs/include/xenhypfs.h | 95 + tools/libs/hypfs/libxenhypfs.map | 10 + tools/libs/hypfs/xenhypfs.pc.in | 10 + tools/libs/libs.mk | 95 + tools/libs/toolcore/Makefile | 20 + tools/libs/toolcore/handlereg.c | 103 + tools/libs/toolcore/include/xentoolcore.h | 88 + .../toolcore/include/xentoolcore_internal.h | 158 + tools/libs/toolcore/libxentoolcore.map | 8 + tools/libs/toolcore/xentoolcore.pc.in | 9 + tools/libs/toollog/Makefile | 13 + tools/libs/toollog/include/xentoollog.h | 146 + tools/libs/toollog/libxentoollog.map | 12 + tools/libs/toollog/xentoollog.pc.in | 9 + tools/libs/toollog/xtl_core.c | 93 + tools/libs/toollog/xtl_logger_stdio.c | 202 + tools/libvchan/Makefile | 95 + tools/libvchan/init.c | 461 + tools/libvchan/io.c | 388 + tools/libvchan/libxenvchan.h | 176 + tools/libvchan/node-select.c | 186 + tools/libvchan/node.c | 168 + tools/libvchan/vchan-socket-proxy.c | 533 + tools/libvchan/xenvchan.pc.in | 10 + tools/libxc/COPYING | 467 + tools/libxc/Makefile | 280 + tools/libxc/include/xc_dom.h | 449 + tools/libxc/include/xenctrl.h | 2668 ++++ tools/libxc/include/xenctrl_compat.h | 183 + tools/libxc/include/xenguest.h | 331 + tools/libxc/xc_altp2m.c | 436 + tools/libxc/xc_arinc653.c | 87 + tools/libxc/xc_bitops.h | 79 + tools/libxc/xc_core.c | 1007 ++ tools/libxc/xc_core.h | 176 + tools/libxc/xc_core_arm.c | 122 + tools/libxc/xc_core_arm.h | 59 + tools/libxc/xc_core_x86.c | 225 + tools/libxc/xc_core_x86.h | 60 + tools/libxc/xc_cpu_hotplug.c | 74 + tools/libxc/xc_cpuid_x86.c | 681 + tools/libxc/xc_cpupool.c | 219 + tools/libxc/xc_csched.c | 109 + tools/libxc/xc_csched2.c | 109 + tools/libxc/xc_devicemodel_compat.c | 147 + tools/libxc/xc_dom_arm.c | 552 + tools/libxc/xc_dom_armzimageloader.c | 271 + tools/libxc/xc_dom_binloader.c | 329 + tools/libxc/xc_dom_boot.c | 451 + tools/libxc/xc_dom_bzimageloader.c | 812 + tools/libxc/xc_dom_compat_linux.c | 97 + tools/libxc/xc_dom_core.c | 1272 ++ tools/libxc/xc_dom_decompress.h | 8 + tools/libxc/xc_dom_decompress_lz4.c | 141 + tools/libxc/xc_dom_decompress_unsafe.c | 48 + tools/libxc/xc_dom_decompress_unsafe.h | 20 + tools/libxc/xc_dom_decompress_unsafe_bzip2.c | 14 + tools/libxc/xc_dom_decompress_unsafe_lzma.c | 14 + tools/libxc/xc_dom_decompress_unsafe_lzo1x.c | 50 + tools/libxc/xc_dom_decompress_unsafe_xz.c | 46 + tools/libxc/xc_dom_elfloader.c | 249 + tools/libxc/xc_dom_hvmloader.c | 264 + tools/libxc/xc_dom_x86.c | 1945 +++ tools/libxc/xc_domain.c | 2332 +++ tools/libxc/xc_efi.h | 158 + tools/libxc/xc_elf.h | 16 + tools/libxc/xc_evtchn.c | 85 + tools/libxc/xc_evtchn_compat.c | 75 + tools/libxc/xc_flask.c | 450 + tools/libxc/xc_foreign_memory.c | 98 + tools/libxc/xc_freebsd.c | 71 + tools/libxc/xc_gnttab.c | 161 + tools/libxc/xc_gnttab_compat.c | 111 + tools/libxc/xc_hcall_buf.c | 191 + tools/libxc/xc_kexec.c | 152 + tools/libxc/xc_linux.c | 77 + tools/libxc/xc_mem_access.c | 110 + tools/libxc/xc_mem_paging.c | 130 + tools/libxc/xc_memshr.c | 289 + tools/libxc/xc_minios.c | 67 + tools/libxc/xc_misc.c | 999 ++ tools/libxc/xc_monitor.c | 257 + tools/libxc/xc_msr_x86.h | 37 + tools/libxc/xc_netbsd.c | 74 + tools/libxc/xc_nomigrate.c | 50 + tools/libxc/xc_offline_page.c | 708 + tools/libxc/xc_pagetab.c | 113 + tools/libxc/xc_physdev.c | 113 + tools/libxc/xc_pm.c | 455 + tools/libxc/xc_private.c | 783 + tools/libxc/xc_private.h | 443 + tools/libxc/xc_psr.c | 395 + tools/libxc/xc_resource.c | 151 + tools/libxc/xc_resume.c | 290 + tools/libxc/xc_rt.c | 132 + tools/libxc/xc_solaris.c | 43 + tools/libxc/xc_sr_common.c | 167 + tools/libxc/xc_sr_common.h | 468 + tools/libxc/xc_sr_common_x86.c | 173 + tools/libxc/xc_sr_common_x86.h | 51 + tools/libxc/xc_sr_common_x86_pv.c | 193 + tools/libxc/xc_sr_common_x86_pv.h | 109 + tools/libxc/xc_sr_restore.c | 986 ++ tools/libxc/xc_sr_restore_x86_hvm.c | 274 + tools/libxc/xc_sr_restore_x86_pv.c | 1210 ++ tools/libxc/xc_sr_save.c | 1059 ++ tools/libxc/xc_sr_save_x86_hvm.c | 251 + tools/libxc/xc_sr_save_x86_pv.c | 1156 ++ tools/libxc/xc_sr_stream_format.h | 150 + tools/libxc/xc_suspend.c | 202 + tools/libxc/xc_tbuf.c | 172 + tools/libxc/xc_vm_event.c | 183 + tools/libxc/xencontrol.pc.in | 10 + tools/libxc/xenguest.pc.in | 10 + tools/libxc/xg_private.c | 198 + tools/libxc/xg_private.h | 147 + tools/libxc/xg_save_restore.h | 147 + tools/libxl/CODING_STYLE | 330 + tools/libxl/Makefile | 375 + tools/libxl/check-libxl-api-rules | 23 + tools/libxl/check-xl-disk-parse | 181 + tools/libxl/check-xl-vcpupin-parse | 294 + .../libxl/check-xl-vcpupin-parse.data-example | 53 + tools/libxl/check-xl-vif-parse | 213 + tools/libxl/flexarray.c | 124 + tools/libxl/flexarray.h | 54 + tools/libxl/gentest.py | 374 + tools/libxl/gentypes.py | 797 + tools/libxl/idl.py | 377 + tools/libxl/idl.txt | 214 + tools/libxl/libxl.c | 831 + tools/libxl/libxl.h | 2715 ++++ tools/libxl/libxl_9pfs.c | 52 + tools/libxl/libxl_aoutils.c | 667 + tools/libxl/libxl_arch.h | 96 + tools/libxl/libxl_arm.c | 1230 ++ tools/libxl/libxl_arm.h | 48 + tools/libxl/libxl_arm_acpi.c | 413 + tools/libxl/libxl_arm_no_acpi.c | 40 + tools/libxl/libxl_bootloader.c | 680 + tools/libxl/libxl_checkpoint_device.c | 278 + tools/libxl/libxl_colo.h | 148 + tools/libxl/libxl_colo_nic.c | 316 + tools/libxl/libxl_colo_proxy.c | 438 + tools/libxl/libxl_colo_qdisk.c | 230 + tools/libxl/libxl_colo_restore.c | 1093 ++ tools/libxl/libxl_colo_save.c | 714 + tools/libxl/libxl_console.c | 802 + tools/libxl/libxl_convert_callout.c | 173 + tools/libxl/libxl_cpuid.c | 624 + tools/libxl/libxl_cpupool.c | 452 + tools/libxl/libxl_create.c | 2317 +++ tools/libxl/libxl_device.c | 2089 +++ tools/libxl/libxl_disk.c | 1388 ++ tools/libxl/libxl_dm.c | 3795 +++++ tools/libxl/libxl_dom.c | 1475 ++ tools/libxl/libxl_dom_save.c | 564 + tools/libxl/libxl_dom_suspend.c | 684 + tools/libxl/libxl_domain.c | 2462 +++ tools/libxl/libxl_event.c | 2467 +++ tools/libxl/libxl_event.h | 632 + tools/libxl/libxl_exec.c | 473 + tools/libxl/libxl_flask.c | 79 + tools/libxl/libxl_fork.c | 734 + tools/libxl/libxl_freebsd.c | 252 + tools/libxl/libxl_genid.c | 117 + tools/libxl/libxl_internal.c | 806 + tools/libxl/libxl_internal.h | 4848 ++++++ tools/libxl/libxl_json.c | 1191 ++ tools/libxl/libxl_json.h | 96 + tools/libxl/libxl_libfdt_compat.c | 94 + tools/libxl/libxl_libfdt_compat.h | 90 + tools/libxl/libxl_linux.c | 375 + tools/libxl/libxl_mem.c | 651 + tools/libxl/libxl_netbsd.c | 131 + tools/libxl/libxl_netbuffer.c | 532 + tools/libxl/libxl_nic.c | 521 + tools/libxl/libxl_no_colo.c | 62 + tools/libxl/libxl_no_convert_callout.c | 35 + tools/libxl/libxl_nocpuid.c | 67 + tools/libxl/libxl_nonetbuffer.c | 54 + tools/libxl/libxl_numa.c | 535 + tools/libxl/libxl_osdeps.h | 130 + tools/libxl/libxl_paths.c | 71 + tools/libxl/libxl_pci.c | 2508 +++ tools/libxl/libxl_psr.c | 562 + tools/libxl/libxl_pvcalls.c | 37 + tools/libxl/libxl_qmp.c | 1934 +++ tools/libxl/libxl_remus.c | 425 + tools/libxl/libxl_remus_disk_drbd.c | 232 + tools/libxl/libxl_save_callout.c | 430 + tools/libxl/libxl_save_helper.c | 303 + tools/libxl/libxl_save_msgs_gen.pl | 396 + tools/libxl/libxl_sched.c | 986 ++ tools/libxl/libxl_sr_stream_format.h | 69 + tools/libxl/libxl_stream_read.c | 977 ++ tools/libxl/libxl_stream_write.c | 727 + tools/libxl/libxl_test_fdevent.c | 79 + tools/libxl/libxl_test_fdevent.h | 12 + tools/libxl/libxl_test_timedereg.c | 100 + tools/libxl/libxl_test_timedereg.h | 9 + tools/libxl/libxl_tmem.c | 76 + tools/libxl/libxl_types.idl | 1224 ++ tools/libxl/libxl_types_internal.idl | 57 + tools/libxl/libxl_usb.c | 2158 +++ tools/libxl/libxl_utils.c | 1272 ++ tools/libxl/libxl_utils.h | 194 + tools/libxl/libxl_uuid.c | 163 + tools/libxl/libxl_uuid.h | 80 + tools/libxl/libxl_vdispl.c | 222 + tools/libxl/libxl_vkb.c | 353 + tools/libxl/libxl_vnuma.c | 327 + tools/libxl/libxl_vsnd.c | 686 + tools/libxl/libxl_vtpm.c | 248 + tools/libxl/libxl_x86.c | 862 ++ tools/libxl/libxl_x86_acpi.c | 241 + tools/libxl/libxl_x86_acpi.h | 35 + tools/libxl/libxl_xshelp.c | 329 + tools/libxl/libxlu_cfg.c | 713 + tools/libxl/libxlu_cfg_i.h | 60 + tools/libxl/libxlu_cfg_l.c | 2375 +++ tools/libxl/libxlu_cfg_l.h | 734 + tools/libxl/libxlu_cfg_l.l | 104 + tools/libxl/libxlu_cfg_y.c | 1705 +++ tools/libxl/libxlu_cfg_y.h | 96 + tools/libxl/libxlu_cfg_y.y | 79 + tools/libxl/libxlu_disk.c | 103 + tools/libxl/libxlu_disk_i.h | 29 + tools/libxl/libxlu_disk_l.c | 2944 ++++ tools/libxl/libxlu_disk_l.h | 701 + tools/libxl/libxlu_disk_l.l | 289 + tools/libxl/libxlu_internal.h | 84 + tools/libxl/libxlu_pci.c | 263 + tools/libxl/libxlu_vif.c | 148 + tools/libxl/libxlutil.h | 136 + tools/libxl/osdeps.c | 76 + tools/libxl/test_common.c | 57 + tools/libxl/test_common.h | 29 + tools/libxl/test_fdderegrace.c | 56 + tools/libxl/test_timedereg.c | 11 + tools/libxl/xenlight.pc.in | 12 + tools/libxl/xlutil.pc.in | 10 + tools/misc/.gitignore | 1 + tools/misc/Makefile | 126 + tools/misc/mkdeb | 65 + tools/misc/mkhex | 26 + tools/misc/mkrpm | 75 + tools/misc/mktarball | 54 + tools/misc/xen-cpuid.c | 609 + tools/misc/xen-detect.c | 291 + tools/misc/xen-diag.c | 127 + tools/misc/xen-hptool.c | 408 + tools/misc/xen-hvmcrash.c | 143 + tools/misc/xen-hvmctx.c | 481 + tools/misc/xen-livepatch.c | 638 + tools/misc/xen-lowmemd.c | 149 + tools/misc/xen-mfndump.c | 437 + tools/misc/xen-ucode.c | 81 + tools/misc/xencons | 92 + tools/misc/xencov.c | 148 + tools/misc/xencov_split | 97 + tools/misc/xenhypfs.c | 198 + tools/misc/xenlockprof.c | 120 + tools/misc/xenperf.c | 205 + tools/misc/xenpm.c | 1300 ++ tools/misc/xenpvnetboot | 291 + tools/misc/xensymoops | 118 + tools/misc/xenwatchdogd.c | 99 + tools/ocaml/LICENSE | 198 + tools/ocaml/Makefile | 28 + tools/ocaml/Makefile.rules | 108 + tools/ocaml/common.make | 22 + tools/ocaml/libs/Makefile | 23 + tools/ocaml/libs/eventchn/META.in | 5 + tools/ocaml/libs/eventchn/Makefile | 35 + tools/ocaml/libs/eventchn/xeneventchn.ml | 49 + tools/ocaml/libs/eventchn/xeneventchn.mli | 83 + tools/ocaml/libs/eventchn/xeneventchn_stubs.c | 168 + tools/ocaml/libs/mmap/META.in | 4 + tools/ocaml/libs/mmap/Makefile | 30 + tools/ocaml/libs/mmap/mmap_stubs.h | 33 + tools/ocaml/libs/mmap/xenmmap.ml | 31 + tools/ocaml/libs/mmap/xenmmap.mli | 28 + tools/ocaml/libs/mmap/xenmmap_stubs.c | 130 + tools/ocaml/libs/xb/META.in | 5 + tools/ocaml/libs/xb/Makefile | 52 + tools/ocaml/libs/xb/op.ml | 72 + tools/ocaml/libs/xb/op.mli | 29 + tools/ocaml/libs/xb/packet.ml | 50 + tools/ocaml/libs/xb/packet.mli | 13 + tools/ocaml/libs/xb/partial.ml | 53 + tools/ocaml/libs/xb/partial.mli | 15 + tools/ocaml/libs/xb/xb.ml | 212 + tools/ocaml/libs/xb/xb.mli | 103 + tools/ocaml/libs/xb/xenbus_stubs.c | 71 + tools/ocaml/libs/xb/xs_ring.ml | 48 + tools/ocaml/libs/xb/xs_ring_stubs.c | 201 + tools/ocaml/libs/xc/META.in | 5 + tools/ocaml/libs/xc/Makefile | 41 + tools/ocaml/libs/xc/abi-check | 115 + tools/ocaml/libs/xc/xenctrl.ml | 291 + tools/ocaml/libs/xc/xenctrl.mli | 221 + tools/ocaml/libs/xc/xenctrl_stubs.c | 1216 ++ tools/ocaml/libs/xentoollog/META.in | 4 + tools/ocaml/libs/xentoollog/Makefile | 65 + tools/ocaml/libs/xentoollog/caml_xentoollog.h | 24 + tools/ocaml/libs/xentoollog/genlevels.py | 130 + tools/ocaml/libs/xentoollog/xentoollog.ml.in | 48 + tools/ocaml/libs/xentoollog/xentoollog.mli.in | 43 + .../ocaml/libs/xentoollog/xentoollog_stubs.c | 201 + tools/ocaml/libs/xl/META.in | 5 + tools/ocaml/libs/xl/Makefile | 71 + tools/ocaml/libs/xl/genwrap.py | 582 + tools/ocaml/libs/xl/xenlight.ml.in | 94 + tools/ocaml/libs/xl/xenlight.mli.in | 93 + tools/ocaml/libs/xl/xenlight_stubs.c | 1660 ++ tools/ocaml/libs/xs/META.in | 5 + tools/ocaml/libs/xs/Makefile | 51 + tools/ocaml/libs/xs/queueop.ml | 74 + tools/ocaml/libs/xs/xs.ml | 176 + tools/ocaml/libs/xs/xs.mli | 90 + tools/ocaml/libs/xs/xsraw.ml | 267 + tools/ocaml/libs/xs/xsraw.mli | 60 + tools/ocaml/libs/xs/xst.ml | 61 + tools/ocaml/libs/xs/xst.mli | 30 + tools/ocaml/test/Makefile | 55 + tools/ocaml/test/dmesg.ml | 17 + tools/ocaml/test/list_domains.ml | 26 + tools/ocaml/test/raise_exception.ml | 9 + tools/ocaml/test/send_debug_keys.ml | 13 + tools/ocaml/test/xtl.ml | 39 + tools/ocaml/xenstored/Makefile | 107 + tools/ocaml/xenstored/config.ml | 112 + tools/ocaml/xenstored/connection.ml | 323 + tools/ocaml/xenstored/connections.ml | 198 + tools/ocaml/xenstored/define.ml | 44 + tools/ocaml/xenstored/disk.ml | 157 + tools/ocaml/xenstored/domain.ml | 107 + tools/ocaml/xenstored/domains.ml | 222 + tools/ocaml/xenstored/event.ml | 30 + tools/ocaml/xenstored/history.ml | 77 + tools/ocaml/xenstored/logging.ml | 341 + tools/ocaml/xenstored/oxenstored.conf.in | 85 + tools/ocaml/xenstored/packet.ml | 16 + tools/ocaml/xenstored/parse_arg.ml | 72 + tools/ocaml/xenstored/perms.ml | 186 + tools/ocaml/xenstored/process.ml | 611 + tools/ocaml/xenstored/quota.ml | 88 + tools/ocaml/xenstored/select.ml | 77 + tools/ocaml/xenstored/select.mli | 27 + tools/ocaml/xenstored/select_stubs.c | 80 + tools/ocaml/xenstored/stdext.ml | 130 + tools/ocaml/xenstored/store.ml | 506 + tools/ocaml/xenstored/symbol.ml | 76 + tools/ocaml/xenstored/symbol.mli | 52 + tools/ocaml/xenstored/syslog.ml | 46 + tools/ocaml/xenstored/syslog.mli | 41 + tools/ocaml/xenstored/syslog_stubs.c | 48 + tools/ocaml/xenstored/systemd.ml | 15 + tools/ocaml/xenstored/systemd.mli | 16 + tools/ocaml/xenstored/systemd_stubs.c | 49 + tools/ocaml/xenstored/transaction.ml | 254 + tools/ocaml/xenstored/trie.ml | 182 + tools/ocaml/xenstored/trie.mli | 60 + tools/ocaml/xenstored/utils.ml | 117 + tools/ocaml/xenstored/xenstored.ml | 494 + tools/pygrub/Makefile | 41 + tools/pygrub/README | 15 + .../examples/alpine-linux-2.3.2.extlinux | 11 + tools/pygrub/examples/debian-wheezy-hvm.grub2 | 104 + .../pygrub/examples/fedora-16-with-xen.grub2 | 112 + tools/pygrub/examples/fedora-19.grub2 | 117 + tools/pygrub/examples/rhel-7-beta.grub2 | 118 + tools/pygrub/examples/ubuntu-14.04-lts.grub2 | 234 + tools/pygrub/setup.py | 29 + tools/pygrub/src/ExtLinuxConf.py | 217 + tools/pygrub/src/GrubConf.py | 480 + tools/pygrub/src/LiloConf.py | 180 + tools/pygrub/src/__init__.py | 0 tools/pygrub/src/fsimage/fsimage.c | 331 + tools/pygrub/src/pygrub | 970 ++ tools/python/Makefile | 47 + tools/python/install-wrap | 60 + tools/python/pylintrc | 307 + tools/python/scripts/convert-legacy-stream | 710 + tools/python/scripts/verify-stream-v2 | 148 + tools/python/setup.py | 49 + tools/python/xen/__init__.py | 0 tools/python/xen/lowlevel/__init__.py | 0 tools/python/xen/lowlevel/xc/xc.c | 2569 ++++ tools/python/xen/lowlevel/xs/xs.c | 1085 ++ tools/python/xen/migration/__init__.py | 0 tools/python/xen/migration/legacy.py | 315 + tools/python/xen/migration/libxc.py | 529 + tools/python/xen/migration/libxl.py | 237 + tools/python/xen/migration/public.py | 21 + tools/python/xen/migration/tests.py | 54 + tools/python/xen/migration/verify.py | 37 + tools/python/xen/migration/xl.py | 12 + tools/python/xen/util.py | 23 + tools/tests/Makefile | 20 + tools/tests/cpu-policy/.gitignore | 1 + tools/tests/cpu-policy/Makefile | 45 + tools/tests/cpu-policy/test-cpu-policy.c | 684 + tools/tests/depriv/Makefile | 54 + tools/tests/depriv/depriv-fd-checker.c | 436 + tools/tests/mce-test/Makefile | 12 + tools/tests/mce-test/README | 75 + .../mce-test/cases/srao_llc/dom0/cases.sh | 73 + .../mce-test/cases/srao_llc/guest/cases.sh | 94 + .../mce-test/cases/srao_llc/xen/cases.sh | 69 + .../mce-test/cases/srao_mem/dom0/cases.sh | 73 + .../mce-test/cases/srao_mem/guest/cases.sh | 94 + .../mce-test/cases/srao_mem/xen/cases.sh | 69 + .../mce-test/cases/ucna_llc/dom0/cases.sh | 72 + .../mce-test/cases/ucna_llc/guest/cases.sh | 92 + .../mce-test/cases/ucna_llc/xen/cases.sh | 68 + tools/tests/mce-test/config/setup.conf | 24 + tools/tests/mce-test/lib/xen-mceinj-tool.sh | 260 + tools/tests/mce-test/tools/Makefile | 24 + tools/tests/mce-test/tools/README | 24 + tools/tests/mce-test/tools/xen-mceinj.c | 545 + tools/tests/mem-sharing/Makefile | 31 + tools/tests/mem-sharing/memshrtool.c | 207 + tools/tests/run_tests.sh | 61 + tools/tests/utests/run_all_tests.py | 23 + tools/tests/vhpet/.gitignore | 4 + tools/tests/vhpet/Makefile | 39 + tools/tests/vhpet/emul.h | 414 + tools/tests/vhpet/main.c | 776 + tools/tests/vpci/Makefile | 33 + tools/tests/vpci/emul.h | 137 + tools/tests/vpci/main.c | 309 + tools/tests/x86_emulator/32/Makefile | 5 + tools/tests/x86_emulator/Makefile | 298 + tools/tests/x86_emulator/blowfish.c | 440 + tools/tests/x86_emulator/evex-disp8.c | 1007 ++ tools/tests/x86_emulator/opmask.S | 159 + tools/tests/x86_emulator/predicates.c | 675 + tools/tests/x86_emulator/simd-aes.c | 102 + tools/tests/x86_emulator/simd-clmul.c | 150 + tools/tests/x86_emulator/simd-fma.c | 136 + tools/tests/x86_emulator/simd-gf.c | 80 + tools/tests/x86_emulator/simd-sg.c | 330 + tools/tests/x86_emulator/simd-sha.c | 392 + tools/tests/x86_emulator/simd.c | 1832 +++ tools/tests/x86_emulator/simd.h | 475 + tools/tests/x86_emulator/test_x86_emulator.c | 5171 +++++++ tools/tests/x86_emulator/testcase.mk | 22 + tools/tests/x86_emulator/wrappers.c | 78 + tools/tests/x86_emulator/x86-emulate.c | 266 + tools/tests/x86_emulator/x86-emulate.h | 205 + tools/tests/xen-access/Makefile | 33 + tools/tests/xen-access/xen-access.c | 946 ++ tools/tests/xenstore/Makefile | 29 + tools/tests/xenstore/xs-test.c | 537 + tools/xcutils/Makefile | 51 + tools/xcutils/lsevtchn.c | 64 + tools/xcutils/readnotes.c | 314 + tools/xenbackendd/Makefile | 45 + tools/xenbackendd/xenbackendd.c | 326 + tools/xenmon/COPYING | 339 + tools/xenmon/Makefile | 58 + tools/xenmon/setmask.c | 88 + tools/xenmon/xenbaked.c | 1196 ++ tools/xenmon/xenbaked.h | 103 + tools/xenmon/xenmon.py | 713 + tools/xenpaging/Makefile | 45 + tools/xenpaging/file_ops.c | 71 + tools/xenpaging/file_ops.h | 41 + tools/xenpaging/pagein.c | 79 + tools/xenpaging/policy.h | 48 + tools/xenpaging/policy_default.c | 186 + tools/xenpaging/xenpaging.c | 1083 ++ tools/xenpaging/xenpaging.h | 84 + tools/xenpmd/Makefile | 31 + tools/xenpmd/xenpmd.c | 524 + tools/xenstat/Makefile | 10 + tools/xenstat/libxenstat/COPYING | 509 + tools/xenstat/libxenstat/Makefile | 190 + .../libxenstat/bindings/swig/perl/.empty | 1 + .../libxenstat/bindings/swig/python/.empty | 1 + .../libxenstat/bindings/swig/xenstat.i | 8 + tools/xenstat/libxenstat/src/xenstat.c | 735 + tools/xenstat/libxenstat/src/xenstat.h | 194 + .../xenstat/libxenstat/src/xenstat_freebsd.c | 47 + tools/xenstat/libxenstat/src/xenstat_linux.c | 503 + tools/xenstat/libxenstat/src/xenstat_netbsd.c | 97 + tools/xenstat/libxenstat/src/xenstat_priv.h | 108 + tools/xenstat/libxenstat/src/xenstat_qmp.c | 446 + .../xenstat/libxenstat/src/xenstat_solaris.c | 405 + tools/xenstat/libxenstat/xenstat.pc.in | 10 + tools/xenstat/xentop/Makefile | 50 + tools/xenstat/xentop/TODO | 34 + tools/xenstat/xentop/xentop.c | 1346 ++ tools/xenstore/.gdbinit | 4 + tools/xenstore/COPYING | 514 + tools/xenstore/Makefile | 226 + tools/xenstore/README | 5 + tools/xenstore/TODO | 10 + tools/xenstore/hashtable.c | 285 + tools/xenstore/hashtable.h | 199 + tools/xenstore/hashtable_private.h | 85 + tools/xenstore/include/compat/xs.h | 2 + tools/xenstore/include/compat/xs_lib.h | 2 + tools/xenstore/include/xenstore.h | 290 + tools/xenstore/include/xenstore_lib.h | 95 + tools/xenstore/list.h | 512 + tools/xenstore/talloc.c | 1316 ++ tools/xenstore/talloc.h | 145 + tools/xenstore/talloc_guide.txt | 569 + tools/xenstore/tdb.c | 1748 +++ tools/xenstore/tdb.h | 134 + tools/xenstore/utils.c | 61 + tools/xenstore/utils.h | 61 + tools/xenstore/xenstore.pc.in | 11 + tools/xenstore/xenstore_client.c | 708 + tools/xenstore/xenstore_control.c | 67 + tools/xenstore/xenstored_control.c | 218 + tools/xenstore/xenstored_control.h | 19 + tools/xenstore/xenstored_core.c | 2241 +++ tools/xenstore/xenstored_core.h | 236 + tools/xenstore/xenstored_domain.c | 1165 ++ tools/xenstore/xenstored_domain.h | 103 + tools/xenstore/xenstored_minios.c | 60 + tools/xenstore/xenstored_osdep.h | 20 + tools/xenstore/xenstored_posix.c | 154 + tools/xenstore/xenstored_probes.d | 28 + tools/xenstore/xenstored_solaris.c | 168 + tools/xenstore/xenstored_transaction.c | 643 + tools/xenstore/xenstored_transaction.h | 52 + tools/xenstore/xenstored_watch.c | 302 + tools/xenstore/xenstored_watch.h | 33 + tools/xenstore/xs.c | 1473 ++ tools/xenstore/xs_lib.c | 187 + tools/xenstore/xs_tdb_dump.c | 86 + tools/xentrace/Makefile | 64 + tools/xentrace/analyze.h | 107 + tools/xentrace/formats | 225 + tools/xentrace/mread.c | 160 + tools/xentrace/mread.h | 18 + tools/xentrace/pv.h | 41 + tools/xentrace/setsize.c | 41 + tools/xentrace/xenalyze.c | 10890 +++++++++++++ tools/xentrace/xenctx.c | 1328 ++ tools/xentrace/xentrace.c | 1244 ++ tools/xentrace/xentrace_format | 256 + tools/xl/CODING_STYLE | 202 + tools/xl/Makefile | 61 + tools/xl/bash-completion | 20 + tools/xl/xl.c | 493 + tools/xl/xl.h | 318 + tools/xl/xl_block.c | 128 + tools/xl/xl_cdrom.c | 114 + tools/xl/xl_cmdtable.c | 659 + tools/xl/xl_console.c | 133 + tools/xl/xl_cpupool.c | 624 + tools/xl/xl_flask.c | 151 + tools/xl/xl_info.c | 935 ++ tools/xl/xl_mem.c | 167 + tools/xl/xl_migrate.c | 778 + tools/xl/xl_misc.c | 372 + tools/xl/xl_nic.c | 171 + tools/xl/xl_parse.c | 2885 ++++ tools/xl/xl_parse.h | 67 + tools/xl/xl_pci.c | 278 + tools/xl/xl_psr.c | 796 + tools/xl/xl_saverestore.c | 283 + tools/xl/xl_sched.c | 932 ++ tools/xl/xl_sxp.c | 239 + tools/xl/xl_usb.c | 222 + tools/xl/xl_utils.c | 325 + tools/xl/xl_utils.h | 155 + tools/xl/xl_vcpu.c | 411 + tools/xl/xl_vdispl.c | 164 + tools/xl/xl_vkb.c | 161 + tools/xl/xl_vmcontrol.c | 1271 ++ tools/xl/xl_vsnd.c | 207 + tools/xl/xl_vtpm.c | 152 + version.sh | 5 + xen/COPYING | 366 + xen/Kconfig | 62 + xen/Kconfig.debug | 135 + xen/Makefile | 499 + xen/Rules.mk | 243 + xen/arch/Kconfig | 11 + xen/arch/arm/Kconfig | 278 + xen/arch/arm/Kconfig.debug | 289 + xen/arch/arm/Makefile | 144 + xen/arch/arm/README.LinuxPrimitives | 132 + xen/arch/arm/Rules.mk | 0 xen/arch/arm/acpi/Makefile | 3 + xen/arch/arm/acpi/boot.c | 285 + xen/arch/arm/acpi/domain_build.c | 591 + xen/arch/arm/acpi/lib.c | 77 + xen/arch/arm/alternative.c | 254 + xen/arch/arm/arch.mk | 19 + xen/arch/arm/arm32/Makefile | 13 + xen/arch/arm/arm32/asm-offsets.c | 85 + xen/arch/arm/arm32/debug-8250.inc | 45 + xen/arch/arm/arm32/debug-exynos4210.inc | 47 + xen/arch/arm/arm32/debug-pl011.inc | 64 + xen/arch/arm/arm32/debug-scif.inc | 59 + xen/arch/arm/arm32/debug.S | 47 + xen/arch/arm/arm32/domain.c | 50 + xen/arch/arm/arm32/domctl.c | 34 + xen/arch/arm/arm32/entry.S | 451 + xen/arch/arm/arm32/head.S | 808 + xen/arch/arm/arm32/insn.c | 91 + xen/arch/arm/arm32/lib/Makefile | 5 + xen/arch/arm/arm32/lib/assembler.h | 325 + xen/arch/arm/arm32/lib/bitops.c | 171 + xen/arch/arm/arm32/lib/copy_template.S | 267 + xen/arch/arm/arm32/lib/div64.S | 209 + xen/arch/arm/arm32/lib/findbit.S | 195 + xen/arch/arm/arm32/lib/lib1funcs.S | 386 + xen/arch/arm/arm32/lib/lshrdi3.S | 51 + xen/arch/arm/arm32/lib/memchr.S | 25 + xen/arch/arm/arm32/lib/memcpy.S | 61 + xen/arch/arm/arm32/lib/memmove.S | 197 + xen/arch/arm/arm32/lib/memset.S | 122 + xen/arch/arm/arm32/lib/memzero.S | 124 + xen/arch/arm/arm32/lib/strchr.S | 28 + xen/arch/arm/arm32/lib/strrchr.S | 25 + xen/arch/arm/arm32/livepatch.c | 328 + xen/arch/arm/arm32/proc-caxx.c | 35 + xen/arch/arm/arm32/proc-v7.S | 65 + xen/arch/arm/arm32/smpboot.c | 31 + xen/arch/arm/arm32/traps.c | 92 + xen/arch/arm/arm32/vfp.c | 96 + xen/arch/arm/arm64/Makefile | 15 + xen/arch/arm/arm64/asm-offsets.c | 68 + xen/arch/arm/arm64/bpi.S | 103 + xen/arch/arm/arm64/cache.S | 54 + xen/arch/arm/arm64/debug-8250.inc | 49 + xen/arch/arm/arm64/debug-cadence.inc | 49 + xen/arch/arm/arm64/debug-meson.inc | 55 + xen/arch/arm/arm64/debug-mvebu.inc | 50 + xen/arch/arm/arm64/debug-pl011.inc | 63 + xen/arch/arm/arm64/debug-scif.inc | 53 + xen/arch/arm/arm64/debug.S | 47 + xen/arch/arm/arm64/domain.c | 65 + xen/arch/arm/arm64/domctl.c | 67 + xen/arch/arm/arm64/entry.S | 599 + xen/arch/arm/arm64/head.S | 967 ++ xen/arch/arm/arm64/insn.c | 279 + xen/arch/arm/arm64/lib/Makefile | 4 + xen/arch/arm/arm64/lib/assembler.h | 12 + xen/arch/arm/arm64/lib/bitops.c | 161 + xen/arch/arm/arm64/lib/clear_page.S | 34 + xen/arch/arm/arm64/lib/find_next_bit.c | 281 + xen/arch/arm/arm64/lib/memchr.S | 43 + xen/arch/arm/arm64/lib/memcmp.S | 257 + xen/arch/arm/arm64/lib/memcpy.S | 200 + xen/arch/arm/arm64/lib/memmove.S | 196 + xen/arch/arm/arm64/lib/memset.S | 215 + xen/arch/arm/arm64/lib/strchr.S | 40 + xen/arch/arm/arm64/lib/strcmp.S | 233 + xen/arch/arm/arm64/lib/strlen.S | 126 + xen/arch/arm/arm64/lib/strncmp.S | 310 + xen/arch/arm/arm64/lib/strnlen.S | 171 + xen/arch/arm/arm64/lib/strrchr.S | 40 + xen/arch/arm/arm64/livepatch.c | 503 + xen/arch/arm/arm64/smc.S | 32 + xen/arch/arm/arm64/smpboot.c | 122 + xen/arch/arm/arm64/traps.c | 54 + xen/arch/arm/arm64/vfp.c | 62 + xen/arch/arm/arm64/vsysreg.c | 306 + xen/arch/arm/bootfdt.c | 477 + xen/arch/arm/configs/arm32_defconfig | 0 xen/arch/arm/configs/arm64_defconfig | 0 xen/arch/arm/configs/tiny64_defconfig | 37 + xen/arch/arm/cpuerrata.c | 736 + xen/arch/arm/cpufeature.c | 150 + xen/arch/arm/decode.c | 171 + xen/arch/arm/decode.h | 49 + xen/arch/arm/device.c | 94 + xen/arch/arm/domain.c | 1123 ++ xen/arch/arm/domain_build.c | 2587 ++++ xen/arch/arm/domctl.c | 218 + xen/arch/arm/dtb.S | 2 + xen/arch/arm/early_printk.c | 35 + xen/arch/arm/efi/Makefile | 4 + xen/arch/arm/efi/efi-boot.h | 615 + xen/arch/arm/efi/efi-dom0.c | 184 + xen/arch/arm/efi/runtime.h | 1 + xen/arch/arm/gic-v2.c | 1412 ++ xen/arch/arm/gic-v3-its.c | 1107 ++ xen/arch/arm/gic-v3-lpi.c | 581 + xen/arch/arm/gic-v3.c | 1916 +++ xen/arch/arm/gic-vgic.c | 481 + xen/arch/arm/gic.c | 504 + xen/arch/arm/guest_atomics.c | 91 + xen/arch/arm/guest_walk.c | 638 + xen/arch/arm/guestcopy.c | 162 + xen/arch/arm/hvm.c | 157 + xen/arch/arm/io.c | 206 + xen/arch/arm/irq.c | 708 + xen/arch/arm/kernel.c | 532 + xen/arch/arm/livepatch.c | 193 + xen/arch/arm/mem_access.c | 473 + xen/arch/arm/mm.c | 1653 ++ xen/arch/arm/monitor.c | 76 + xen/arch/arm/p2m.c | 2146 +++ xen/arch/arm/percpu.c | 84 + xen/arch/arm/physdev.c | 27 + xen/arch/arm/platform.c | 170 + xen/arch/arm/platform_hypercall.c | 69 + xen/arch/arm/platforms/Kconfig | 58 + xen/arch/arm/platforms/Makefile | 13 + xen/arch/arm/platforms/brcm-raspberry-pi.c | 56 + xen/arch/arm/platforms/brcm.c | 294 + xen/arch/arm/platforms/exynos5.c | 329 + xen/arch/arm/platforms/midway.c | 63 + xen/arch/arm/platforms/omap5.c | 176 + xen/arch/arm/platforms/rcar2.c | 68 + xen/arch/arm/platforms/seattle.c | 57 + xen/arch/arm/platforms/sunxi.c | 154 + xen/arch/arm/platforms/thunderx.c | 39 + xen/arch/arm/platforms/vexpress.c | 153 + xen/arch/arm/platforms/xgene-storm.c | 132 + xen/arch/arm/platforms/xilinx-zynqmp-eemi.c | 218 + xen/arch/arm/platforms/xilinx-zynqmp.c | 58 + xen/arch/arm/processor.c | 49 + xen/arch/arm/psci.c | 247 + xen/arch/arm/setup.c | 1021 ++ xen/arch/arm/shutdown.c | 72 + xen/arch/arm/smp.c | 42 + xen/arch/arm/smpboot.c | 542 + xen/arch/arm/sysctl.c | 34 + xen/arch/arm/tee/Kconfig | 10 + xen/arch/arm/tee/Makefile | 2 + xen/arch/arm/tee/optee.c | 1758 +++ xen/arch/arm/tee/tee.c | 98 + xen/arch/arm/time.c | 401 + xen/arch/arm/traps.c | 2313 +++ xen/arch/arm/vcpreg.c | 624 + xen/arch/arm/vgic-v2.c | 755 + xen/arch/arm/vgic-v3-its.c | 1572 ++ xen/arch/arm/vgic-v3.c | 1836 +++ xen/arch/arm/vgic.c | 737 + xen/arch/arm/vgic/Makefile | 5 + xen/arch/arm/vgic/vgic-init.c | 258 + xen/arch/arm/vgic/vgic-mmio-v2.c | 321 + xen/arch/arm/vgic/vgic-mmio.c | 643 + xen/arch/arm/vgic/vgic-mmio.h | 138 + xen/arch/arm/vgic/vgic-v2.c | 331 + xen/arch/arm/vgic/vgic.c | 977 ++ xen/arch/arm/vgic/vgic.h | 83 + xen/arch/arm/vm_event.c | 57 + xen/arch/arm/vpl011.c | 718 + xen/arch/arm/vpsci.c | 370 + xen/arch/arm/vsmc.c | 354 + xen/arch/arm/vtimer.c | 405 + xen/arch/arm/vuart.c | 149 + xen/arch/arm/vuart.h | 35 + xen/arch/arm/xen.lds.S | 255 + xen/arch/x86/Kconfig | 281 + xen/arch/x86/Kconfig.debug | 0 xen/arch/x86/Makefile | 275 + xen/arch/x86/Rules.mk | 10 + xen/arch/x86/acpi/Makefile | 4 + xen/arch/x86/acpi/boot.c | 754 + xen/arch/x86/acpi/cpu_idle.c | 1672 ++ xen/arch/x86/acpi/cpufreq/Makefile | 2 + xen/arch/x86/acpi/cpufreq/cpufreq.c | 666 + xen/arch/x86/acpi/cpufreq/powernow.c | 377 + xen/arch/x86/acpi/cpuidle_menu.c | 301 + xen/arch/x86/acpi/lib.c | 125 + xen/arch/x86/acpi/power.c | 498 + xen/arch/x86/acpi/wakeup_prot.S | 146 + xen/arch/x86/alternative.c | 435 + xen/arch/x86/apic.c | 1554 ++ xen/arch/x86/arch.mk | 71 + xen/arch/x86/asm-macros.c | 1 + xen/arch/x86/bitops.c | 101 + xen/arch/x86/boot/Makefile | 23 + xen/arch/x86/boot/build32.lds | 74 + xen/arch/x86/boot/build32.mk | 40 + xen/arch/x86/boot/cmdline.c | 349 + xen/arch/x86/boot/defs.h | 62 + xen/arch/x86/boot/edd.S | 173 + xen/arch/x86/boot/head.S | 784 + xen/arch/x86/boot/mem.S | 77 + xen/arch/x86/boot/mkelf32.c | 479 + xen/arch/x86/boot/reloc.c | 298 + xen/arch/x86/boot/trampoline.S | 283 + xen/arch/x86/boot/video.S | 1001 ++ xen/arch/x86/boot/video.h | 31 + xen/arch/x86/boot/wakeup.S | 162 + xen/arch/x86/boot/x86_64.S | 218 + xen/arch/x86/bzimage.c | 150 + xen/arch/x86/clear_page.S | 18 + xen/arch/x86/compat.c | 86 + xen/arch/x86/configs/pvshim_defconfig | 30 + xen/arch/x86/configs/x86_32_defconfig | 0 xen/arch/x86/configs/x86_64_defconfig | 0 xen/arch/x86/copy_page.S | 43 + xen/arch/x86/cpu/Makefile | 13 + xen/arch/x86/cpu/amd.c | 1027 ++ xen/arch/x86/cpu/centaur.c | 59 + xen/arch/x86/cpu/common.c | 946 ++ xen/arch/x86/cpu/cpu.h | 25 + xen/arch/x86/cpu/hygon.c | 83 + xen/arch/x86/cpu/intel.c | 526 + xen/arch/x86/cpu/intel_cacheinfo.c | 265 + xen/arch/x86/cpu/mcheck/Makefile | 11 + xen/arch/x86/cpu/mcheck/amd_nonfatal.c | 246 + xen/arch/x86/cpu/mcheck/barrier.c | 59 + xen/arch/x86/cpu/mcheck/barrier.h | 61 + xen/arch/x86/cpu/mcheck/mcaction.c | 151 + xen/arch/x86/cpu/mcheck/mcaction.h | 20 + xen/arch/x86/cpu/mcheck/mce-apei.c | 129 + xen/arch/x86/cpu/mcheck/mce.c | 1913 +++ xen/arch/x86/cpu/mcheck/mce.h | 228 + xen/arch/x86/cpu/mcheck/mce_amd.c | 344 + xen/arch/x86/cpu/mcheck/mce_amd.h | 7 + xen/arch/x86/cpu/mcheck/mce_intel.c | 1018 ++ xen/arch/x86/cpu/mcheck/mctelem.c | 558 + xen/arch/x86/cpu/mcheck/mctelem.h | 76 + xen/arch/x86/cpu/mcheck/non-fatal.c | 119 + xen/arch/x86/cpu/mcheck/util.c | 14 + xen/arch/x86/cpu/mcheck/util.h | 6 + xen/arch/x86/cpu/mcheck/vmce.c | 562 + xen/arch/x86/cpu/mcheck/vmce.h | 25 + xen/arch/x86/cpu/mcheck/x86_mca.h | 165 + xen/arch/x86/cpu/microcode/Makefile | 3 + xen/arch/x86/cpu/microcode/amd.c | 403 + xen/arch/x86/cpu/microcode/core.c | 799 + xen/arch/x86/cpu/microcode/intel.c | 357 + xen/arch/x86/cpu/microcode/private.h | 58 + xen/arch/x86/cpu/mtrr/Makefile | 2 + xen/arch/x86/cpu/mtrr/generic.c | 621 + xen/arch/x86/cpu/mtrr/main.c | 643 + xen/arch/x86/cpu/mtrr/mtrr.h | 46 + xen/arch/x86/cpu/mwait-idle.c | 1313 ++ xen/arch/x86/cpu/shanghai.c | 20 + xen/arch/x86/cpu/vpmu.c | 915 ++ xen/arch/x86/cpu/vpmu_amd.c | 613 + xen/arch/x86/cpu/vpmu_intel.c | 979 ++ xen/arch/x86/cpuid.c | 1163 ++ xen/arch/x86/crash.c | 214 + xen/arch/x86/debug.c | 187 + xen/arch/x86/delay.c | 29 + xen/arch/x86/desc.c | 107 + xen/arch/x86/dmi_scan.c | 796 + xen/arch/x86/dom0_build.c | 596 + xen/arch/x86/domain.c | 2311 +++ xen/arch/x86/domain_page.c | 353 + xen/arch/x86/domctl.c | 1651 ++ xen/arch/x86/e820.c | 702 + xen/arch/x86/efi/Makefile | 19 + xen/arch/x86/efi/buildid.ihex | 3 + xen/arch/x86/efi/check.c | 4 + xen/arch/x86/efi/efi-boot.h | 761 + xen/arch/x86/efi/mkreloc.c | 384 + xen/arch/x86/efi/relocs-dummy.S | 11 + xen/arch/x86/efi/runtime.h | 12 + xen/arch/x86/efi/stub.c | 85 + xen/arch/x86/emul-i8254.c | 607 + xen/arch/x86/extable.c | 208 + xen/arch/x86/flushtlb.c | 361 + xen/arch/x86/gdbstub.c | 88 + xen/arch/x86/genapic/Makefile | 5 + xen/arch/x86/genapic/bigsmp.c | 48 + xen/arch/x86/genapic/default.c | 26 + xen/arch/x86/genapic/delivery.c | 60 + xen/arch/x86/genapic/probe.c | 116 + xen/arch/x86/genapic/x2apic.c | 284 + xen/arch/x86/guest/Makefile | 4 + xen/arch/x86/guest/hyperv/Makefile | 3 + xen/arch/x86/guest/hyperv/hyperv.c | 238 + xen/arch/x86/guest/hyperv/private.h | 44 + xen/arch/x86/guest/hyperv/tlb.c | 214 + xen/arch/x86/guest/hyperv/util.c | 75 + xen/arch/x86/guest/hypervisor.c | 98 + xen/arch/x86/guest/xen/Makefile | 4 + xen/arch/x86/guest/xen/hypercall_page.S | 78 + xen/arch/x86/guest/xen/pvh-boot.c | 151 + xen/arch/x86/guest/xen/xen.c | 367 + xen/arch/x86/hpet.c | 987 ++ xen/arch/x86/hvm/Makefile | 31 + xen/arch/x86/hvm/asid.c | 159 + xen/arch/x86/hvm/dm.c | 809 + xen/arch/x86/hvm/dom0_build.c | 1269 ++ xen/arch/x86/hvm/domain.c | 344 + xen/arch/x86/hvm/emulate.c | 3097 ++++ xen/arch/x86/hvm/grant_table.c | 89 + xen/arch/x86/hvm/hpet.c | 792 + xen/arch/x86/hvm/hvm.c | 5423 +++++++ xen/arch/x86/hvm/hypercall.c | 347 + xen/arch/x86/hvm/intercept.c | 364 + xen/arch/x86/hvm/io.c | 580 + xen/arch/x86/hvm/ioreq.c | 1546 ++ xen/arch/x86/hvm/irq.c | 802 + xen/arch/x86/hvm/monitor.c | 311 + xen/arch/x86/hvm/mtrr.c | 909 ++ xen/arch/x86/hvm/nestedhvm.c | 192 + xen/arch/x86/hvm/pmtimer.c | 399 + xen/arch/x86/hvm/quirks.c | 97 + xen/arch/x86/hvm/rtc.c | 906 ++ xen/arch/x86/hvm/save.c | 436 + xen/arch/x86/hvm/stdvga.c | 641 + xen/arch/x86/hvm/svm/Makefile | 8 + xen/arch/x86/hvm/svm/asid.c | 72 + xen/arch/x86/hvm/svm/emulate.c | 182 + xen/arch/x86/hvm/svm/entry.S | 146 + xen/arch/x86/hvm/svm/intr.c | 234 + xen/arch/x86/hvm/svm/nestedsvm.c | 1715 +++ xen/arch/x86/hvm/svm/svm.c | 3053 ++++ xen/arch/x86/hvm/svm/svmdebug.c | 183 + xen/arch/x86/hvm/svm/vmcb.c | 305 + xen/arch/x86/hvm/vioapic.c | 743 + xen/arch/x86/hvm/viridian/Makefile | 3 + xen/arch/x86/hvm/viridian/private.h | 70 + xen/arch/x86/hvm/viridian/synic.c | 461 + xen/arch/x86/hvm/viridian/time.c | 603 + xen/arch/x86/hvm/viridian/viridian.c | 904 ++ xen/arch/x86/hvm/vlapic.c | 1673 ++ xen/arch/x86/hvm/vm_event.c | 140 + xen/arch/x86/hvm/vmsi.c | 922 ++ xen/arch/x86/hvm/vmx/Makefile | 6 + xen/arch/x86/hvm/vmx/entry.S | 152 + xen/arch/x86/hvm/vmx/intr.c | 435 + xen/arch/x86/hvm/vmx/realmode.c | 243 + xen/arch/x86/hvm/vmx/vmcs.c | 2176 +++ xen/arch/x86/hvm/vmx/vmx.c | 4584 ++++++ xen/arch/x86/hvm/vmx/vvmx.c | 2830 ++++ xen/arch/x86/hvm/vpic.c | 510 + xen/arch/x86/hvm/vpt.c | 676 + xen/arch/x86/hypercall.c | 284 + xen/arch/x86/i387.c | 398 + xen/arch/x86/i8259.c | 362 + xen/arch/x86/indirect-thunk.S | 54 + xen/arch/x86/io_apic.c | 2669 ++++ xen/arch/x86/ioport_emulate.c | 120 + xen/arch/x86/irq.c | 2962 ++++ xen/arch/x86/livepatch.c | 397 + xen/arch/x86/machine_kexec.c | 220 + xen/arch/x86/mm.c | 6345 ++++++++ xen/arch/x86/mm/Makefile | 21 + xen/arch/x86/mm/altp2m.c | 134 + xen/arch/x86/mm/guest_walk.c | 546 + xen/arch/x86/mm/hap/Makefile | 15 + xen/arch/x86/mm/hap/guest_walk.c | 150 + xen/arch/x86/mm/hap/hap.c | 893 ++ xen/arch/x86/mm/hap/nested_ept.c | 287 + xen/arch/x86/mm/hap/nested_hap.c | 291 + xen/arch/x86/mm/hap/private.h | 50 + xen/arch/x86/mm/mem_access.c | 542 + xen/arch/x86/mm/mem_paging.c | 500 + xen/arch/x86/mm/mem_sharing.c | 2196 +++ xen/arch/x86/mm/mm-locks.h | 396 + xen/arch/x86/mm/p2m-ept.c | 1432 ++ xen/arch/x86/mm/p2m-pod.c | 1385 ++ xen/arch/x86/mm/p2m-pt.c | 1131 ++ xen/arch/x86/mm/p2m.c | 2913 ++++ xen/arch/x86/mm/paging.c | 983 ++ xen/arch/x86/mm/shadow/Makefile | 16 + xen/arch/x86/mm/shadow/common.c | 3563 +++++ xen/arch/x86/mm/shadow/hvm.c | 701 + xen/arch/x86/mm/shadow/multi.c | 4902 ++++++ xen/arch/x86/mm/shadow/multi.h | 116 + xen/arch/x86/mm/shadow/none.c | 84 + xen/arch/x86/mm/shadow/private.h | 826 + xen/arch/x86/mm/shadow/pv.c | 75 + xen/arch/x86/mm/shadow/types.h | 385 + xen/arch/x86/monitor.c | 353 + xen/arch/x86/mpparse.c | 1118 ++ xen/arch/x86/msi.c | 1505 ++ xen/arch/x86/msr.c | 618 + xen/arch/x86/nmi.c | 615 + xen/arch/x86/numa.c | 511 + xen/arch/x86/oprofile/Makefile | 6 + xen/arch/x86/oprofile/backtrace.c | 160 + xen/arch/x86/oprofile/nmi_int.c | 471 + xen/arch/x86/oprofile/op_counter.h | 41 + xen/arch/x86/oprofile/op_model_athlon.c | 547 + xen/arch/x86/oprofile/op_model_p4.c | 721 + xen/arch/x86/oprofile/op_model_ppro.c | 344 + xen/arch/x86/oprofile/op_x86_model.h | 58 + xen/arch/x86/oprofile/xenoprof.c | 104 + xen/arch/x86/pci.c | 100 + xen/arch/x86/percpu.c | 112 + xen/arch/x86/physdev.c | 681 + xen/arch/x86/platform_hypercall.c | 831 + xen/arch/x86/psr.c | 1705 +++ xen/arch/x86/pv/Makefile | 18 + xen/arch/x86/pv/callback.c | 491 + xen/arch/x86/pv/descriptor-tables.c | 255 + xen/arch/x86/pv/dom0_build.c | 936 ++ xen/arch/x86/pv/domain.c | 498 + xen/arch/x86/pv/emul-gate-op.c | 419 + xen/arch/x86/pv/emul-inv-op.c | 92 + xen/arch/x86/pv/emul-priv-op.c | 1328 ++ xen/arch/x86/pv/emulate.c | 141 + xen/arch/x86/pv/emulate.h | 32 + xen/arch/x86/pv/gpr_switch.S | 57 + xen/arch/x86/pv/grant_table.c | 343 + xen/arch/x86/pv/hypercall.c | 347 + xen/arch/x86/pv/iret.c | 235 + xen/arch/x86/pv/misc-hypercalls.c | 182 + xen/arch/x86/pv/mm.c | 139 + xen/arch/x86/pv/mm.h | 165 + xen/arch/x86/pv/ro-page-fault.c | 409 + xen/arch/x86/pv/shim.c | 1020 ++ xen/arch/x86/pv/traps.c | 199 + xen/arch/x86/setup.c | 2114 +++ xen/arch/x86/shutdown.c | 683 + xen/arch/x86/smp.c | 398 + xen/arch/x86/smpboot.c | 1429 ++ xen/arch/x86/spec_ctrl.c | 1527 ++ xen/arch/x86/srat.c | 534 + xen/arch/x86/string.c | 68 + xen/arch/x86/sysctl.c | 490 + xen/arch/x86/tboot.c | 558 + xen/arch/x86/time.c | 2528 ++++ xen/arch/x86/trace.c | 159 + xen/arch/x86/traps.c | 2203 +++ xen/arch/x86/tsx.c | 293 + xen/arch/x86/usercopy.c | 185 + xen/arch/x86/vm_event.c | 307 + xen/arch/x86/x86_64/Makefile | 16 + xen/arch/x86/x86_64/acpi_mmcfg.c | 116 + xen/arch/x86/x86_64/asm-offsets.c | 173 + xen/arch/x86/x86_64/compat.c | 32 + xen/arch/x86/x86_64/compat/Makefile | 2 + xen/arch/x86/x86_64/compat/entry.S | 392 + xen/arch/x86/x86_64/compat/mm.c | 329 + xen/arch/x86/x86_64/cpu_idle.c | 110 + xen/arch/x86/x86_64/cpufreq.c | 56 + xen/arch/x86/x86_64/domain.c | 73 + xen/arch/x86/x86_64/entry.S | 1046 ++ xen/arch/x86/x86_64/gdbstub.c | 150 + xen/arch/x86/x86_64/kexec_reloc.S | 201 + xen/arch/x86/x86_64/machine_kexec.c | 29 + xen/arch/x86/x86_64/mm.c | 1498 ++ xen/arch/x86/x86_64/mmconf-fam10h.c | 202 + xen/arch/x86/x86_64/mmconfig-shared.c | 467 + xen/arch/x86/x86_64/mmconfig.h | 85 + xen/arch/x86/x86_64/mmconfig_64.c | 231 + xen/arch/x86/x86_64/pci.c | 75 + xen/arch/x86/x86_64/physdev.c | 94 + xen/arch/x86/x86_64/platform_hypercall.c | 55 + xen/arch/x86/x86_64/traps.c | 376 + xen/arch/x86/x86_emulate.c | 195 + xen/arch/x86/x86_emulate/x86_emulate.c | 12592 ++++++++++++++++ xen/arch/x86/x86_emulate/x86_emulate.h | 853 ++ xen/arch/x86/xen.lds.S | 396 + xen/arch/x86/xstate.c | 837 + xen/common/COPYING | 16 + xen/common/Kconfig | 388 + xen/common/Makefile | 88 + xen/common/README.source | 50 + xen/common/argo.c | 2367 +++ xen/common/bitmap.c | 386 + xen/common/bsearch.c | 51 + xen/common/bunzip2.c | 733 + xen/common/compat/domain.c | 144 + xen/common/compat/grant_table.c | 350 + xen/common/compat/kernel.c | 53 + xen/common/compat/memory.c | 651 + xen/common/compat/multicall.c | 52 + xen/common/compat/xenoprof.c | 42 + xen/common/compat/xlat.c | 73 + xen/common/core_parking.c | 272 + xen/common/coverage/Makefile | 11 + xen/common/coverage/coverage.c | 73 + xen/common/coverage/coverage.h | 23 + xen/common/coverage/gcc_3_4.c | 367 + xen/common/coverage/gcc_4_7.c | 204 + xen/common/coverage/gcc_4_9.c | 33 + xen/common/coverage/gcc_5.c | 33 + xen/common/coverage/gcc_7.c | 30 + xen/common/coverage/gcov.c | 227 + xen/common/coverage/gcov.h | 40 + xen/common/coverage/gcov_base.c | 67 + xen/common/coverage/llvm.c | 154 + xen/common/cpu.c | 238 + xen/common/debugtrace.c | 305 + xen/common/decompress.c | 35 + xen/common/decompress.h | 29 + xen/common/device_tree.c | 2091 +++ xen/common/domain.c | 1682 +++ xen/common/domctl.c | 980 ++ xen/common/earlycpio.c | 151 + xen/common/efi/boot.c | 1687 +++ xen/common/efi/compat.c | 30 + xen/common/efi/efi.h | 43 + xen/common/efi/runtime.c | 713 + xen/common/event_2l.c | 120 + xen/common/event_channel.c | 1625 ++ xen/common/event_fifo.c | 704 + xen/common/gdbstub.c | 748 + xen/common/grant_table.c | 4252 ++++++ xen/common/guestcopy.c | 30 + xen/common/gunzip.c | 137 + xen/common/hypfs.c | 455 + xen/common/inflate.c | 1304 ++ xen/common/irq.c | 41 + xen/common/kernel.c | 663 + xen/common/kexec.c | 1285 ++ xen/common/keyhandler.c | 518 + xen/common/kimage.c | 949 ++ xen/common/lib.c | 515 + xen/common/libelf/COPYING | 467 + xen/common/libelf/Makefile | 16 + xen/common/libelf/README | 1 + xen/common/libelf/libelf-dominfo.c | 612 + xen/common/libelf/libelf-loader.c | 580 + xen/common/libelf/libelf-private.h | 117 + xen/common/libelf/libelf-tools.c | 391 + xen/common/libfdt/Makefile | 17 + xen/common/libfdt/Makefile.libfdt | 10 + xen/common/libfdt/TODO | 3 + xen/common/libfdt/fdt.c | 249 + xen/common/libfdt/fdt_empty_tree.c | 82 + xen/common/libfdt/fdt_ro.c | 571 + xen/common/libfdt/fdt_rw.c | 491 + xen/common/libfdt/fdt_strerror.c | 94 + xen/common/libfdt/fdt_sw.c | 254 + xen/common/libfdt/fdt_wip.c | 116 + xen/common/libfdt/libfdt_internal.h | 93 + xen/common/libfdt/version.lds | 60 + xen/common/list_sort.c | 157 + xen/common/livepatch.c | 2176 +++ xen/common/livepatch_elf.c | 550 + xen/common/lz4/decompress.c | 340 + xen/common/lz4/defs.h | 170 + xen/common/lzo.c | 362 + xen/common/mem_access.c | 129 + xen/common/memory.c | 1782 +++ xen/common/monitor.c | 156 + xen/common/multicall.c | 136 + xen/common/notifier.c | 91 + xen/common/page_alloc.c | 2640 ++++ xen/common/pdx.c | 125 + xen/common/perfc.c | 281 + xen/common/preempt.c | 40 + xen/common/radix-tree.c | 757 + xen/common/random.c | 39 + xen/common/rangeset.c | 601 + xen/common/rbtree.c | 577 + xen/common/rcupdate.c | 720 + xen/common/rwlock.c | 149 + xen/common/sched/Kconfig | 65 + xen/common/sched/Makefile | 7 + xen/common/sched/arinc653.c | 740 + xen/common/sched/compat.c | 55 + xen/common/sched/core.c | 3366 +++++ xen/common/sched/cpupool.c | 1027 ++ xen/common/sched/credit.c | 2272 +++ xen/common/sched/credit2.c | 4240 ++++++ xen/common/sched/null.c | 1057 ++ xen/common/sched/private.h | 608 + xen/common/sched/rt.c | 1559 ++ xen/common/shutdown.c | 76 + xen/common/smp.c | 113 + xen/common/softirq.c | 153 + xen/common/sort.c | 82 + xen/common/spinlock.c | 522 + xen/common/stop_machine.c | 212 + xen/common/string.c | 458 + xen/common/symbols-dummy.c | 24 + xen/common/symbols.c | 270 + xen/common/sysctl.c | 498 + xen/common/tasklet.c | 262 + xen/common/time.c | 180 + xen/common/timer.c | 704 + xen/common/trace.c | 886 ++ xen/common/ubsan/Makefile | 1 + xen/common/ubsan/ubsan.c | 543 + xen/common/ubsan/ubsan.h | 104 + xen/common/unlz4.c | 167 + xen/common/unlzma.c | 661 + xen/common/unlzo.c | 265 + xen/common/unxz.c | 304 + xen/common/version.c | 201 + xen/common/virtual_region.c | 161 + xen/common/vm_event.c | 800 + xen/common/vmap.c | 332 + xen/common/vsprintf.c | 905 ++ xen/common/wait.c | 261 + xen/common/warning.c | 56 + xen/common/xenoprof.c | 977 ++ xen/common/xmalloc_tlsf.c | 727 + xen/common/xz/crc32.c | 51 + xen/common/xz/dec_bcj.c | 574 + xen/common/xz/dec_lzma2.c | 1192 ++ xen/common/xz/dec_stream.c | 821 + xen/common/xz/lzma2.h | 204 + xen/common/xz/private.h | 274 + xen/common/xz/stream.h | 55 + xen/crypto/Makefile | 2 + xen/crypto/README.source | 17 + xen/crypto/rijndael.c | 1283 ++ xen/crypto/vmac.c | 1160 ++ xen/drivers/Kconfig | 18 + xen/drivers/Makefile | 7 + xen/drivers/acpi/Kconfig | 9 + xen/drivers/acpi/Makefile | 11 + xen/drivers/acpi/apei/Makefile | 4 + xen/drivers/acpi/apei/apei-base.c | 279 + xen/drivers/acpi/apei/apei-internal.h | 84 + xen/drivers/acpi/apei/apei-io.c | 326 + xen/drivers/acpi/apei/erst.c | 844 ++ xen/drivers/acpi/apei/hest.c | 200 + xen/drivers/acpi/hwregs.c | 689 + xen/drivers/acpi/numa.c | 235 + xen/drivers/acpi/osl.c | 248 + xen/drivers/acpi/pmstat.c | 524 + xen/drivers/acpi/reboot.c | 37 + xen/drivers/acpi/tables.c | 471 + xen/drivers/acpi/tables/Makefile | 5 + xen/drivers/acpi/tables/tbfadt.c | 478 + xen/drivers/acpi/tables/tbinstal.c | 150 + xen/drivers/acpi/tables/tbutils.c | 526 + xen/drivers/acpi/tables/tbxface.c | 254 + xen/drivers/acpi/tables/tbxfroot.c | 272 + xen/drivers/acpi/utilities/Makefile | 2 + xen/drivers/acpi/utilities/utglobal.c | 207 + xen/drivers/acpi/utilities/utmisc.c | 178 + xen/drivers/char/Kconfig | 68 + xen/drivers/char/Makefile | 14 + xen/drivers/char/arm-uart.c | 141 + xen/drivers/char/cadence-uart.c | 224 + xen/drivers/char/console.c | 1314 ++ xen/drivers/char/consoled.c | 145 + xen/drivers/char/ehci-dbgp.c | 1577 ++ xen/drivers/char/exynos4210-uart.c | 372 + xen/drivers/char/meson-uart.c | 276 + xen/drivers/char/mvebu-uart.c | 294 + xen/drivers/char/ns16550.c | 1711 +++ xen/drivers/char/omap-uart.c | 403 + xen/drivers/char/pl011.c | 366 + xen/drivers/char/scif-uart.c | 361 + xen/drivers/char/serial.c | 601 + xen/drivers/char/xen_pv_console.c | 209 + xen/drivers/cpufreq/Kconfig | 3 + xen/drivers/cpufreq/Makefile | 4 + xen/drivers/cpufreq/cpufreq.c | 680 + xen/drivers/cpufreq/cpufreq_misc_governors.c | 206 + xen/drivers/cpufreq/cpufreq_ondemand.c | 397 + xen/drivers/cpufreq/utility.c | 491 + xen/drivers/passthrough/Kconfig | 30 + xen/drivers/passthrough/Makefile | 11 + xen/drivers/passthrough/amd/Makefile | 8 + xen/drivers/passthrough/amd/iommu-defs.h | 500 + xen/drivers/passthrough/amd/iommu.h | 430 + xen/drivers/passthrough/amd/iommu_acpi.c | 1312 ++ xen/drivers/passthrough/amd/iommu_cmd.c | 405 + xen/drivers/passthrough/amd/iommu_detect.c | 205 + xen/drivers/passthrough/amd/iommu_guest.c | 849 ++ xen/drivers/passthrough/amd/iommu_init.c | 1610 ++ xen/drivers/passthrough/amd/iommu_intr.c | 919 ++ xen/drivers/passthrough/amd/iommu_map.c | 673 + xen/drivers/passthrough/amd/pci_amd_iommu.c | 793 + xen/drivers/passthrough/arm/Makefile | 3 + xen/drivers/passthrough/arm/iommu.c | 137 + xen/drivers/passthrough/arm/iommu_fwspec.c | 97 + xen/drivers/passthrough/arm/iommu_helpers.c | 84 + xen/drivers/passthrough/arm/ipmmu-vmsa.c | 1356 ++ xen/drivers/passthrough/arm/smmu.c | 2795 ++++ xen/drivers/passthrough/ats.h | 52 + xen/drivers/passthrough/device_tree.c | 306 + xen/drivers/passthrough/io.c | 1126 ++ xen/drivers/passthrough/iommu.c | 640 + xen/drivers/passthrough/pci.c | 1787 +++ xen/drivers/passthrough/vtd/Makefile | 8 + xen/drivers/passthrough/vtd/dmar.c | 1130 ++ xen/drivers/passthrough/vtd/dmar.h | 162 + xen/drivers/passthrough/vtd/extern.h | 118 + xen/drivers/passthrough/vtd/intremap.c | 983 ++ xen/drivers/passthrough/vtd/iommu.c | 3081 ++++ xen/drivers/passthrough/vtd/iommu.h | 557 + xen/drivers/passthrough/vtd/qinval.c | 532 + xen/drivers/passthrough/vtd/quirks.c | 585 + xen/drivers/passthrough/vtd/utils.c | 308 + xen/drivers/passthrough/vtd/vtd.h | 75 + xen/drivers/passthrough/vtd/x86/Makefile | 3 + xen/drivers/passthrough/vtd/x86/ats.c | 166 + xen/drivers/passthrough/vtd/x86/hvm.c | 67 + xen/drivers/passthrough/vtd/x86/vtd.c | 53 + xen/drivers/passthrough/x86/Makefile | 2 + xen/drivers/passthrough/x86/ats.c | 91 + xen/drivers/passthrough/x86/iommu.c | 432 + xen/drivers/pci/Kconfig | 3 + xen/drivers/pci/Makefile | 1 + xen/drivers/pci/pci.c | 178 + xen/drivers/video/Kconfig | 13 + xen/drivers/video/Makefile | 6 + xen/drivers/video/font.h | 22 + xen/drivers/video/font_8x14.c | 4118 +++++ xen/drivers/video/font_8x16.c | 4630 ++++++ xen/drivers/video/font_8x8.c | 2582 ++++ xen/drivers/video/lfb.c | 171 + xen/drivers/video/lfb.h | 46 + xen/drivers/video/modelines.h | 77 + xen/drivers/video/vesa.c | 202 + xen/drivers/video/vga.c | 208 + xen/drivers/vpci/Makefile | 1 + xen/drivers/vpci/header.c | 576 + xen/drivers/vpci/msi.c | 344 + xen/drivers/vpci/msix.c | 564 + xen/drivers/vpci/vpci.c | 491 + xen/include/Makefile | 152 + xen/include/acpi/acconfig.h | 206 + xen/include/acpi/acexcep.h | 303 + xen/include/acpi/acglobal.h | 113 + xen/include/acpi/achware.h | 62 + xen/include/acpi/aclocal.h | 207 + xen/include/acpi/acmacros.h | 644 + xen/include/acpi/acnames.h | 83 + xen/include/acpi/acoutput.h | 185 + xen/include/acpi/acpi.h | 69 + xen/include/acpi/acpiosxf.h | 89 + xen/include/acpi/acpixf.h | 128 + xen/include/acpi/actables.h | 107 + xen/include/acpi/actbl.h | 361 + xen/include/acpi/actbl1.h | 1014 ++ xen/include/acpi/actbl2.h | 1258 ++ xen/include/acpi/actbl3.h | 641 + xen/include/acpi/actypes.h | 728 + xen/include/acpi/acutils.h | 199 + xen/include/acpi/apei.h | 34 + xen/include/acpi/cpufreq/cpufreq.h | 245 + xen/include/acpi/cpufreq/processor_perf.h | 63 + xen/include/acpi/pdc_intel.h | 50 + xen/include/acpi/platform/acenv.h | 365 + xen/include/acpi/platform/acgcc.h | 65 + xen/include/acpi/platform/aclinux.h | 86 + xen/include/asm-arm/acpi.h | 75 + xen/include/asm-arm/alternative.h | 221 + xen/include/asm-arm/altp2m.h | 39 + xen/include/asm-arm/arm32/atomic.h | 175 + xen/include/asm-arm/arm32/bitops.h | 42 + xen/include/asm-arm/arm32/bug.h | 13 + xen/include/asm-arm/arm32/cmpxchg.h | 178 + xen/include/asm-arm/arm32/flushtlb.h | 63 + xen/include/asm-arm/arm32/insn.h | 71 + xen/include/asm-arm/arm32/io.h | 96 + xen/include/asm-arm/arm32/macros.h | 8 + xen/include/asm-arm/arm32/mm.h | 23 + xen/include/asm-arm/arm32/page.h | 118 + xen/include/asm-arm/arm32/processor.h | 69 + xen/include/asm-arm/arm32/sysregs.h | 75 + xen/include/asm-arm/arm32/system.h | 77 + xen/include/asm-arm/arm32/traps.h | 13 + xen/include/asm-arm/arm32/vfp.h | 41 + xen/include/asm-arm/arm64/atomic.h | 148 + xen/include/asm-arm/arm64/bitops.h | 98 + xen/include/asm-arm/arm64/brk.h | 39 + xen/include/asm-arm/arm64/bug.h | 9 + xen/include/asm-arm/arm64/cmpxchg.h | 198 + xen/include/asm-arm/arm64/efibind.h | 216 + xen/include/asm-arm/arm64/flushtlb.h | 65 + xen/include/asm-arm/arm64/hsr.h | 122 + xen/include/asm-arm/arm64/insn.h | 110 + xen/include/asm-arm/arm64/io.h | 148 + xen/include/asm-arm/arm64/macros.h | 35 + xen/include/asm-arm/arm64/mm.h | 23 + xen/include/asm-arm/arm64/page.h | 103 + xen/include/asm-arm/arm64/processor.h | 98 + xen/include/asm-arm/arm64/sysregs.h | 91 + xen/include/asm-arm/arm64/system.h | 91 + xen/include/asm-arm/arm64/traps.h | 18 + xen/include/asm-arm/arm64/vfp.h | 23 + xen/include/asm-arm/asm_defns.h | 44 + xen/include/asm-arm/atomic.h | 236 + xen/include/asm-arm/bitops.h | 192 + xen/include/asm-arm/bug.h | 86 + xen/include/asm-arm/byteorder.h | 16 + xen/include/asm-arm/cache.h | 19 + xen/include/asm-arm/cadence-uart.h | 55 + xen/include/asm-arm/config.h | 206 + xen/include/asm-arm/cpregs.h | 360 + xen/include/asm-arm/cpuerrata.h | 85 + xen/include/asm-arm/cpufeature.h | 275 + xen/include/asm-arm/current.h | 70 + xen/include/asm-arm/debugger.h | 15 + xen/include/asm-arm/delay.h | 14 + xen/include/asm-arm/desc.h | 12 + xen/include/asm-arm/device.h | 123 + xen/include/asm-arm/div64.h | 250 + xen/include/asm-arm/domain.h | 277 + xen/include/asm-arm/domain_build.h | 31 + xen/include/asm-arm/early_printk.h | 22 + xen/include/asm-arm/efibind.h | 2 + xen/include/asm-arm/elf.h | 33 + xen/include/asm-arm/event.h | 63 + xen/include/asm-arm/exynos4210-uart.h | 112 + xen/include/asm-arm/flushtlb.h | 77 + xen/include/asm-arm/gic.h | 453 + xen/include/asm-arm/gic_v3_defs.h | 218 + xen/include/asm-arm/gic_v3_its.h | 283 + xen/include/asm-arm/grant_table.h | 102 + xen/include/asm-arm/guest_access.h | 157 + xen/include/asm-arm/guest_atomics.h | 126 + xen/include/asm-arm/guest_walk.h | 19 + xen/include/asm-arm/hardirq.h | 27 + xen/include/asm-arm/hsr.h | 217 + xen/include/asm-arm/hypercall.h | 20 + xen/include/asm-arm/init.h | 20 + xen/include/asm-arm/insn.h | 29 + xen/include/asm-arm/io.h | 20 + xen/include/asm-arm/iocap.h | 16 + xen/include/asm-arm/iommu.h | 45 + xen/include/asm-arm/iommu_fwspec.h | 68 + xen/include/asm-arm/irq.h | 109 + xen/include/asm-arm/kernel.h | 89 + xen/include/asm-arm/livepatch.h | 37 + xen/include/asm-arm/lpae.h | 285 + xen/include/asm-arm/macros.h | 32 + xen/include/asm-arm/mem_access.h | 53 + xen/include/asm-arm/mm.h | 379 + xen/include/asm-arm/mmio.h | 85 + xen/include/asm-arm/monitor.h | 68 + xen/include/asm-arm/new_vgic.h | 198 + xen/include/asm-arm/nospec.h | 25 + xen/include/asm-arm/numa.h | 36 + xen/include/asm-arm/p2m.h | 430 + xen/include/asm-arm/page.h | 303 + xen/include/asm-arm/paging.h | 16 + xen/include/asm-arm/pci.h | 7 + xen/include/asm-arm/percpu.h | 33 + xen/include/asm-arm/perfc.h | 21 + xen/include/asm-arm/perfc_defn.h | 88 + xen/include/asm-arm/pl011-uart.h | 87 + xen/include/asm-arm/platform.h | 82 + xen/include/asm-arm/platforms/exynos5.h | 20 + xen/include/asm-arm/platforms/midway.h | 21 + xen/include/asm-arm/platforms/omap5.h | 32 + xen/include/asm-arm/platforms/vexpress.h | 37 + .../asm-arm/platforms/xilinx-zynqmp-eemi.h | 128 + xen/include/asm-arm/processor.h | 601 + xen/include/asm-arm/procinfo.h | 43 + xen/include/asm-arm/psci.h | 91 + xen/include/asm-arm/random.h | 9 + xen/include/asm-arm/regs.h | 73 + xen/include/asm-arm/scif-uart.h | 127 + xen/include/asm-arm/setup.h | 133 + xen/include/asm-arm/short-desc.h | 130 + xen/include/asm-arm/smccc.h | 362 + xen/include/asm-arm/smp.h | 46 + xen/include/asm-arm/softirq.h | 16 + xen/include/asm-arm/spinlock.h | 15 + xen/include/asm-arm/string.h | 73 + xen/include/asm-arm/sysregs.h | 22 + xen/include/asm-arm/system.h | 73 + xen/include/asm-arm/tee/optee_msg.h | 310 + xen/include/asm-arm/tee/optee_rpc_cmd.h | 318 + xen/include/asm-arm/tee/optee_smc.h | 564 + xen/include/asm-arm/tee/tee.h | 112 + xen/include/asm-arm/time.h | 79 + xen/include/asm-arm/trace.h | 12 + xen/include/asm-arm/traps.h | 95 + xen/include/asm-arm/types.h | 74 + xen/include/asm-arm/vfp.h | 25 + xen/include/asm-arm/vgic-emul.h | 33 + xen/include/asm-arm/vgic.h | 381 + xen/include/asm-arm/vm_event.h | 61 + xen/include/asm-arm/vpl011.h | 89 + xen/include/asm-arm/vpsci.h | 42 + xen/include/asm-arm/vreg.h | 220 + xen/include/asm-arm/vtimer.h | 41 + xen/include/asm-arm/xenoprof.h | 12 + xen/include/asm-x86/acpi.h | 162 + xen/include/asm-x86/alternative-asm.h | 125 + xen/include/asm-x86/alternative.h | 386 + xen/include/asm-x86/altp2m.h | 57 + xen/include/asm-x86/amd.h | 154 + xen/include/asm-x86/apic.h | 202 + xen/include/asm-x86/apicdef.h | 134 + xen/include/asm-x86/asm_defns.h | 382 + xen/include/asm-x86/atomic.h | 239 + xen/include/asm-x86/bitops.h | 483 + xen/include/asm-x86/bug.h | 125 + xen/include/asm-x86/byteorder.h | 36 + xen/include/asm-x86/bzimage.h | 11 + xen/include/asm-x86/cache.h | 21 + xen/include/asm-x86/compat.h | 8 + xen/include/asm-x86/config.h | 316 + xen/include/asm-x86/cpufeature.h | 212 + xen/include/asm-x86/cpufeatures.h | 53 + xen/include/asm-x86/cpufeatureset.h | 40 + xen/include/asm-x86/cpuid.h | 81 + xen/include/asm-x86/cpuidle.h | 31 + xen/include/asm-x86/current.h | 193 + xen/include/asm-x86/debugger.h | 101 + xen/include/asm-x86/debugreg.h | 83 + xen/include/asm-x86/delay.h | 13 + xen/include/asm-x86/desc.h | 241 + xen/include/asm-x86/device.h | 25 + xen/include/asm-x86/div64.h | 14 + xen/include/asm-x86/dom0_build.h | 42 + xen/include/asm-x86/domain.h | 755 + xen/include/asm-x86/e820.h | 43 + xen/include/asm-x86/edd.h | 164 + xen/include/asm-x86/efibind.h | 2 + xen/include/asm-x86/elf.h | 20 + xen/include/asm-x86/endbr.h | 55 + xen/include/asm-x86/event.h | 56 + xen/include/asm-x86/fixmap.h | 118 + xen/include/asm-x86/flushtlb.h | 203 + xen/include/asm-x86/genapic.h | 86 + xen/include/asm-x86/grant_table.h | 75 + xen/include/asm-x86/guest.h | 39 + xen/include/asm-x86/guest/hyperv-hcall.h | 97 + xen/include/asm-x86/guest/hyperv-tlfs.h | 934 ++ xen/include/asm-x86/guest/hyperv.h | 86 + xen/include/asm-x86/guest/hypervisor.h | 85 + xen/include/asm-x86/guest/pvh-boot.h | 58 + xen/include/asm-x86/guest/xen-hcall.h | 212 + xen/include/asm-x86/guest/xen.h | 61 + xen/include/asm-x86/guest_access.h | 162 + xen/include/asm-x86/guest_atomics.h | 32 + xen/include/asm-x86/guest_pt.h | 468 + xen/include/asm-x86/hap.h | 59 + xen/include/asm-x86/hardirq.h | 37 + xen/include/asm-x86/hpet.h | 101 + xen/include/asm-x86/hvm/asid.h | 52 + xen/include/asm-x86/hvm/cacheattr.h | 23 + xen/include/asm-x86/hvm/domain.h | 218 + xen/include/asm-x86/hvm/emulate.h | 157 + xen/include/asm-x86/hvm/grant_table.h | 61 + xen/include/asm-x86/hvm/guest_access.h | 8 + xen/include/asm-x86/hvm/hvm.h | 812 + xen/include/asm-x86/hvm/io.h | 197 + xen/include/asm-x86/hvm/ioreq.h | 68 + xen/include/asm-x86/hvm/irq.h | 231 + xen/include/asm-x86/hvm/monitor.h | 65 + xen/include/asm-x86/hvm/nestedhvm.h | 101 + xen/include/asm-x86/hvm/save.h | 144 + xen/include/asm-x86/hvm/support.h | 167 + xen/include/asm-x86/hvm/svm/asid.h | 49 + xen/include/asm-x86/hvm/svm/emulate.h | 66 + xen/include/asm-x86/hvm/svm/intr.h | 25 + xen/include/asm-x86/hvm/svm/nestedsvm.h | 149 + xen/include/asm-x86/hvm/svm/svm.h | 110 + xen/include/asm-x86/hvm/svm/svmdebug.h | 30 + xen/include/asm-x86/hvm/svm/vmcb.h | 653 + xen/include/asm-x86/hvm/trace.h | 122 + xen/include/asm-x86/hvm/vcpu.h | 228 + xen/include/asm-x86/hvm/vioapic.h | 73 + xen/include/asm-x86/hvm/viridian.h | 104 + xen/include/asm-x86/hvm/vlapic.h | 157 + xen/include/asm-x86/hvm/vm_event.h | 34 + xen/include/asm-x86/hvm/vmx/vmcs.h | 685 + xen/include/asm-x86/hvm/vmx/vmx.h | 692 + xen/include/asm-x86/hvm/vmx/vvmx.h | 214 + xen/include/asm-x86/hvm/vpic.h | 40 + xen/include/asm-x86/hvm/vpt.h | 205 + xen/include/asm-x86/hypercall.h | 192 + xen/include/asm-x86/i387.h | 40 + xen/include/asm-x86/indirect_thunk_asm.h | 59 + xen/include/asm-x86/init.h | 4 + xen/include/asm-x86/invpcid.h | 67 + xen/include/asm-x86/io.h | 56 + xen/include/asm-x86/io_apic.h | 208 + xen/include/asm-x86/iocap.h | 21 + xen/include/asm-x86/iommu.h | 145 + xen/include/asm-x86/irq.h | 221 + xen/include/asm-x86/ldt.h | 35 + xen/include/asm-x86/livepatch.h | 25 + xen/include/asm-x86/mach-default/bios_ebda.h | 15 + xen/include/asm-x86/mach-default/io_ports.h | 30 + .../asm-x86/mach-default/irq_vectors.h | 43 + .../asm-x86/mach-default/mach_mpparse.h | 17 + .../asm-x86/mach-default/mach_mpspec.h | 10 + xen/include/asm-x86/mach-generic/mach_apic.h | 81 + .../asm-x86/mach-generic/mach_mpparse.h | 7 + xen/include/asm-x86/machine_kexec.h | 16 + xen/include/asm-x86/mc146818rtc.h | 116 + xen/include/asm-x86/mce.h | 49 + xen/include/asm-x86/mem_access.h | 68 + xen/include/asm-x86/mem_paging.h | 36 + xen/include/asm-x86/mem_sharing.h | 153 + xen/include/asm-x86/microcode.h | 27 + xen/include/asm-x86/mm.h | 657 + xen/include/asm-x86/monitor.h | 126 + xen/include/asm-x86/mpspec.h | 73 + xen/include/asm-x86/mpspec_def.h | 188 + xen/include/asm-x86/msi.h | 255 + xen/include/asm-x86/msr-index.h | 692 + xen/include/asm-x86/msr.h | 358 + xen/include/asm-x86/mtrr.h | 106 + xen/include/asm-x86/mwait.h | 16 + xen/include/asm-x86/nmi.h | 37 + xen/include/asm-x86/nops.h | 70 + xen/include/asm-x86/nospec.h | 39 + xen/include/asm-x86/numa.h | 84 + xen/include/asm-x86/p2m.h | 1042 ++ xen/include/asm-x86/page.h | 430 + xen/include/asm-x86/paging.h | 424 + xen/include/asm-x86/pci.h | 54 + xen/include/asm-x86/percpu.h | 22 + xen/include/asm-x86/perfc.h | 12 + xen/include/asm-x86/perfc_defn.h | 120 + xen/include/asm-x86/processor.h | 650 + xen/include/asm-x86/psr.h | 99 + xen/include/asm-x86/pv/domain.h | 134 + xen/include/asm-x86/pv/grant_table.h | 60 + xen/include/asm-x86/pv/mm.h | 58 + xen/include/asm-x86/pv/shim.h | 119 + xen/include/asm-x86/pv/traps.h | 71 + xen/include/asm-x86/random.h | 16 + xen/include/asm-x86/regs.h | 18 + xen/include/asm-x86/setup.h | 71 + xen/include/asm-x86/shadow.h | 271 + xen/include/asm-x86/shared.h | 49 + xen/include/asm-x86/shstk.h | 46 + xen/include/asm-x86/smp.h | 92 + xen/include/asm-x86/softirq.h | 15 + xen/include/asm-x86/spec_ctrl.h | 182 + xen/include/asm-x86/spec_ctrl_asm.h | 367 + xen/include/asm-x86/spinlock.h | 27 + xen/include/asm-x86/string.h | 24 + xen/include/asm-x86/system.h | 308 + xen/include/asm-x86/tboot.h | 160 + xen/include/asm-x86/time.h | 76 + xen/include/asm-x86/trace.h | 46 + xen/include/asm-x86/traps.h | 34 + xen/include/asm-x86/types.h | 44 + xen/include/asm-x86/uaccess.h | 288 + xen/include/asm-x86/vm_event.h | 57 + xen/include/asm-x86/vpmu.h | 144 + xen/include/asm-x86/x86-defns.h | 156 + xen/include/asm-x86/x86-vendors.h | 39 + xen/include/asm-x86/x86_64/efibind.h | 280 + xen/include/asm-x86/x86_64/elf.h | 90 + xen/include/asm-x86/x86_64/page.h | 192 + xen/include/asm-x86/x86_64/regs.h | 28 + xen/include/asm-x86/x86_64/system.h | 105 + xen/include/asm-x86/x86_64/uaccess.h | 84 + xen/include/asm-x86/x86_emulate.h | 21 + xen/include/asm-x86/xenoprof.h | 100 + xen/include/asm-x86/xstate.h | 141 + xen/include/crypto/README.source | 17 + xen/include/crypto/rijndael.h | 58 + xen/include/crypto/vmac.h | 172 + xen/include/efi/efiapi.h | 926 ++ xen/include/efi/eficapsule.h | 89 + xen/include/efi/eficon.h | 302 + xen/include/efi/efidef.h | 200 + xen/include/efi/efidevp.h | 402 + xen/include/efi/efierr.h | 67 + xen/include/efi/efipciio.h | 219 + xen/include/efi/efiprot.h | 728 + xen/include/public/COPYING | 38 + xen/include/public/arch-arm.h | 484 + xen/include/public/arch-arm/hvm/save.h | 39 + xen/include/public/arch-arm/smccc.h | 66 + xen/include/public/arch-x86/cpufeatureset.h | 315 + xen/include/public/arch-x86/cpuid.h | 118 + xen/include/public/arch-x86/hvm/save.h | 661 + xen/include/public/arch-x86/hvm/start_info.h | 159 + xen/include/public/arch-x86/pmu.h | 159 + xen/include/public/arch-x86/xen-mca.h | 448 + xen/include/public/arch-x86/xen-x86_32.h | 194 + xen/include/public/arch-x86/xen-x86_64.h | 241 + xen/include/public/arch-x86/xen.h | 384 + xen/include/public/arch-x86_32.h | 27 + xen/include/public/arch-x86_64.h | 43 + xen/include/public/argo.h | 255 + xen/include/public/callback.h | 121 + xen/include/public/device_tree_defs.h | 42 + xen/include/public/dom0_ops.h | 120 + xen/include/public/domctl.h | 1298 ++ xen/include/public/elfnote.h | 283 + xen/include/public/errno.h | 126 + xen/include/public/event_channel.h | 388 + xen/include/public/features.h | 129 + xen/include/public/grant_table.h | 687 + xen/include/public/hvm/dm_op.h | 480 + xen/include/public/hvm/e820.h | 38 + xen/include/public/hvm/hvm_info_table.h | 82 + xen/include/public/hvm/hvm_op.h | 395 + xen/include/public/hvm/hvm_vcpu.h | 144 + xen/include/public/hvm/hvm_xs_strings.h | 89 + xen/include/public/hvm/ioreq.h | 143 + xen/include/public/hvm/params.h | 305 + xen/include/public/hvm/pvdrivers.h | 49 + xen/include/public/hvm/save.h | 113 + xen/include/public/hypfs.h | 129 + xen/include/public/io/9pfs.h | 49 + xen/include/public/io/blkif.h | 722 + xen/include/public/io/cameraif.h | 1374 ++ xen/include/public/io/console.h | 56 + xen/include/public/io/displif.h | 872 ++ xen/include/public/io/fbif.h | 176 + xen/include/public/io/fsif.h | 192 + xen/include/public/io/kbdif.h | 576 + xen/include/public/io/libxenvchan.h | 101 + xen/include/public/io/netif.h | 1090 ++ xen/include/public/io/pciif.h | 125 + xen/include/public/io/protocols.h | 42 + xen/include/public/io/pvcalls.h | 160 + xen/include/public/io/ring.h | 488 + xen/include/public/io/sndif.h | 1091 ++ xen/include/public/io/tpmif.h | 143 + xen/include/public/io/usbif.h | 254 + xen/include/public/io/vscsiif.h | 330 + xen/include/public/io/xenbus.h | 80 + xen/include/public/io/xs_wire.h | 153 + xen/include/public/kexec.h | 263 + xen/include/public/memory.h | 735 + xen/include/public/nmi.h | 85 + xen/include/public/physdev.h | 383 + xen/include/public/platform.h | 663 + xen/include/public/pmu.h | 143 + xen/include/public/sched.h | 202 + xen/include/public/sysctl.h | 1142 ++ xen/include/public/tmem.h | 122 + xen/include/public/trace.h | 341 + xen/include/public/vcpu.h | 248 + xen/include/public/version.h | 113 + xen/include/public/vm_event.h | 415 + xen/include/public/xen-compat.h | 46 + xen/include/public/xen.h | 1048 ++ xen/include/public/xencomm.h | 41 + xen/include/public/xenoprof.h | 152 + xen/include/public/xsm/flask_op.h | 216 + xen/include/xen/8250-uart.h | 137 + xen/include/xen/acpi.h | 206 + xen/include/xen/argo.h | 44 + xen/include/xen/atomic.h | 207 + xen/include/xen/bitmap.h | 278 + xen/include/xen/bitops.h | 250 + xen/include/xen/byteorder/big_endian.h | 102 + xen/include/xen/byteorder/generic.h | 68 + xen/include/xen/byteorder/little_endian.h | 102 + xen/include/xen/byteorder/swab.h | 183 + xen/include/xen/cache.h | 18 + xen/include/xen/compat.h | 239 + xen/include/xen/compile.h.in | 13 + xen/include/xen/compiler.h | 147 + xen/include/xen/config.h | 102 + xen/include/xen/console.h | 54 + xen/include/xen/consoled.h | 27 + xen/include/xen/const.h | 26 + xen/include/xen/coverage.h | 14 + xen/include/xen/cper.h | 192 + xen/include/xen/cpu.h | 76 + xen/include/xen/cpuidle.h | 99 + xen/include/xen/cpumask.h | 466 + xen/include/xen/ctype.h | 54 + xen/include/xen/decompress.h | 38 + xen/include/xen/delay.h | 10 + xen/include/xen/device_tree.h | 785 + xen/include/xen/dmi.h | 42 + xen/include/xen/domain.h | 133 + xen/include/xen/domain_page.h | 80 + xen/include/xen/early_printk.h | 21 + xen/include/xen/earlycpio.h | 15 + xen/include/xen/efi.h | 49 + xen/include/xen/elf.h | 37 + xen/include/xen/elfcore.h | 84 + xen/include/xen/elfstructs.h | 614 + xen/include/xen/err.h | 57 + xen/include/xen/errno.h | 18 + xen/include/xen/event.h | 314 + xen/include/xen/event_fifo.h | 47 + xen/include/xen/gdbstub.h | 101 + xen/include/xen/grant_table.h | 108 + xen/include/xen/guest_access.h | 35 + xen/include/xen/gunzip.h | 7 + xen/include/xen/hash.h | 58 + xen/include/xen/hypercall.h | 231 + xen/include/xen/hypfs.h | 123 + xen/include/xen/init.h | 84 + xen/include/xen/inttypes.h | 248 + xen/include/xen/iocap.h | 38 + xen/include/xen/iommu.h | 397 + xen/include/xen/irq.h | 177 + xen/include/xen/irq_cpustat.h | 29 + xen/include/xen/kconfig.h | 31 + xen/include/xen/kernel.h | 107 + xen/include/xen/kexec.h | 102 + xen/include/xen/keyhandler.h | 51 + xen/include/xen/kimage.h | 68 + xen/include/xen/lib.h | 201 + xen/include/xen/lib/x86/Makefile | 8 + xen/include/xen/lib/x86/cpu-policy.h | 50 + xen/include/xen/lib/x86/cpuid.h | 462 + xen/include/xen/lib/x86/msr.h | 104 + xen/include/xen/libelf.h | 498 + xen/include/xen/libfdt/fdt.h | 109 + xen/include/xen/libfdt/libfdt.h | 1512 ++ xen/include/xen/libfdt/libfdt_env.h | 22 + xen/include/xen/list.h | 980 ++ xen/include/xen/list_sort.h | 11 + xen/include/xen/livepatch.h | 188 + xen/include/xen/livepatch_elf.h | 64 + xen/include/xen/livepatch_payload.h | 132 + xen/include/xen/lz4.h | 88 + xen/include/xen/lzo.h | 45 + xen/include/xen/mem_access.h | 115 + xen/include/xen/mm.h | 702 + xen/include/xen/monitor.h | 35 + xen/include/xen/multiboot.h | 128 + xen/include/xen/multiboot2.h | 182 + xen/include/xen/multicall.h | 30 + xen/include/xen/nodemask.h | 293 + xen/include/xen/nospec.h | 82 + xen/include/xen/notifier.h | 70 + xen/include/xen/numa.h | 21 + xen/include/xen/p2m-common.h | 40 + xen/include/xen/page-defs.h | 24 + xen/include/xen/paging.h | 7 + xen/include/xen/param.h | 196 + xen/include/xen/pci.h | 215 + xen/include/xen/pci_ids.h | 11 + xen/include/xen/pci_regs.h | 605 + xen/include/xen/pdx.h | 53 + xen/include/xen/percpu.h | 36 + xen/include/xen/perfc.h | 119 + xen/include/xen/perfc_defn.h | 83 + xen/include/xen/pfn.h | 12 + xen/include/xen/pmstat.h | 17 + xen/include/xen/preempt.h | 37 + xen/include/xen/prefetch.h | 52 + xen/include/xen/pv_console.h | 38 + xen/include/xen/radix-tree.h | 227 + xen/include/xen/random.h | 9 + xen/include/xen/rangeset.h | 111 + xen/include/xen/rbtree.h | 143 + xen/include/xen/rcupdate.h | 183 + xen/include/xen/rwlock.h | 386 + xen/include/xen/sched.h | 1110 ++ xen/include/xen/serial.h | 193 + xen/include/xen/shared.h | 49 + xen/include/xen/shutdown.h | 14 + xen/include/xen/sizes.h | 48 + xen/include/xen/smp.h | 75 + xen/include/xen/softirq.h | 43 + xen/include/xen/sort.h | 10 + xen/include/xen/spinlock.h | 223 + xen/include/xen/stdarg.h | 10 + xen/include/xen/stdbool.h | 9 + xen/include/xen/stop_machine.h | 19 + xen/include/xen/string.h | 131 + xen/include/xen/stringify.h | 12 + xen/include/xen/symbols.h | 36 + xen/include/xen/tasklet.h | 66 + xen/include/xen/time.h | 88 + xen/include/xen/timer.h | 123 + xen/include/xen/trace.h | 114 + xen/include/xen/types.h | 61 + xen/include/xen/typesafe.h | 46 + xen/include/xen/version.h | 29 + xen/include/xen/vga.h | 18 + xen/include/xen/video.h | 24 + xen/include/xen/virtual_region.h | 48 + xen/include/xen/vm_event.h | 109 + xen/include/xen/vmap.h | 41 + xen/include/xen/vpci.h | 256 + xen/include/xen/wait.h | 59 + xen/include/xen/warning.h | 7 + xen/include/xen/watchdog.h | 35 + xen/include/xen/xenoprof.h | 49 + xen/include/xen/xmalloc.h | 170 + xen/include/xlat.lst | 159 + xen/include/xsm/dummy.h | 777 + xen/include/xsm/xsm.h | 804 + xen/lib/Makefile | 1 + xen/lib/x86/Makefile | 3 + xen/lib/x86/cpuid.c | 504 + xen/lib/x86/msr.c | 130 + xen/lib/x86/policy.c | 51 + xen/lib/x86/private.h | 78 + xen/scripts/Kbuild.include | 153 + xen/scripts/Kconfig.include | 43 + xen/scripts/Makefile.clean | 30 + xen/scripts/clang-version.sh | 19 + xen/scripts/gcc-version.sh | 25 + xen/test/Makefile | 18 + xen/test/livepatch/Makefile | 220 + xen/test/livepatch/xen_action_hooks.c | 102 + xen/test/livepatch/xen_action_hooks_marker.c | 112 + xen/test/livepatch/xen_action_hooks_noapply.c | 136 + xen/test/livepatch/xen_action_hooks_nofunc.c | 86 + .../livepatch/xen_action_hooks_norevert.c | 143 + xen/test/livepatch/xen_bye_world.c | 34 + xen/test/livepatch/xen_bye_world_func.c | 22 + xen/test/livepatch/xen_expectations.c | 41 + xen/test/livepatch/xen_expectations_fail.c | 42 + xen/test/livepatch/xen_hello_world.c | 67 + xen/test/livepatch/xen_hello_world_func.c | 47 + xen/test/livepatch/xen_nop.c | 45 + xen/test/livepatch/xen_prepost_hooks.c | 122 + xen/test/livepatch/xen_prepost_hooks_fail.c | 75 + xen/test/livepatch/xen_replace_world.c | 33 + xen/test/livepatch/xen_replace_world_func.c | 22 + xen/tools/Makefile | 13 + xen/tools/binfile | 43 + xen/tools/compat-build-header.py | 26 + xen/tools/compat-build-source.py | 29 + xen/tools/gen-cpuid.py | 521 + xen/tools/get-fields.sh | 505 + xen/tools/kconfig/.gitignore | 17 + xen/tools/kconfig/Makefile | 210 + xen/tools/kconfig/Makefile.host | 181 + xen/tools/kconfig/Makefile.kconfig | 106 + xen/tools/kconfig/README.source | 9 + xen/tools/kconfig/allrandom.config | 4 + xen/tools/kconfig/conf.c | 700 + xen/tools/kconfig/confdata.c | 1364 ++ xen/tools/kconfig/expr.c | 1297 ++ xen/tools/kconfig/expr.h | 332 + xen/tools/kconfig/gconf-cfg.sh | 30 + xen/tools/kconfig/gconf.c | 1516 ++ xen/tools/kconfig/gconf.glade | 661 + xen/tools/kconfig/images.c | 328 + xen/tools/kconfig/images.h | 33 + xen/tools/kconfig/lexer.l | 471 + xen/tools/kconfig/list.h | 132 + xen/tools/kconfig/lkc.h | 158 + xen/tools/kconfig/lkc_proto.h | 65 + xen/tools/kconfig/lxdialog/BIG.FAT.WARNING | 4 + xen/tools/kconfig/lxdialog/checklist.c | 319 + xen/tools/kconfig/lxdialog/dialog.h | 238 + xen/tools/kconfig/lxdialog/inputbox.c | 289 + xen/tools/kconfig/lxdialog/menubox.c | 424 + xen/tools/kconfig/lxdialog/textbox.c | 395 + xen/tools/kconfig/lxdialog/util.c | 700 + xen/tools/kconfig/lxdialog/yesno.c | 101 + xen/tools/kconfig/mconf-cfg.sh | 47 + xen/tools/kconfig/mconf.c | 1039 ++ xen/tools/kconfig/menu.c | 867 ++ xen/tools/kconfig/merge_config.sh | 189 + xen/tools/kconfig/nconf-cfg.sh | 47 + xen/tools/kconfig/nconf.c | 1555 ++ xen/tools/kconfig/nconf.gui.c | 664 + xen/tools/kconfig/nconf.h | 92 + xen/tools/kconfig/parser.y | 731 + xen/tools/kconfig/preprocess.c | 574 + xen/tools/kconfig/qconf-cfg.sh | 32 + xen/tools/kconfig/qconf.cc | 1896 +++ xen/tools/kconfig/qconf.h | 331 + xen/tools/kconfig/streamline_config.pl | 682 + xen/tools/kconfig/symbol.c | 1331 ++ xen/tools/kconfig/tests/auto_submenu/Kconfig | 52 + .../kconfig/tests/auto_submenu/__init__.py | 13 + .../tests/auto_submenu/expected_stdout | 10 + xen/tools/kconfig/tests/choice/Kconfig | 56 + xen/tools/kconfig/tests/choice/__init__.py | 41 + .../tests/choice/alldef_expected_config | 5 + .../tests/choice/allmod_expected_config | 9 + .../tests/choice/allno_expected_config | 5 + .../tests/choice/allyes_expected_config | 9 + .../tests/choice/oldask0_expected_stdout | 10 + xen/tools/kconfig/tests/choice/oldask1_config | 2 + .../tests/choice/oldask1_expected_stdout | 15 + .../tests/choice_value_with_m_dep/Kconfig | 21 + .../tests/choice_value_with_m_dep/__init__.py | 16 + .../tests/choice_value_with_m_dep/config | 2 + .../choice_value_with_m_dep/expected_config | 3 + .../choice_value_with_m_dep/expected_stdout | 4 + xen/tools/kconfig/tests/conftest.py | 291 + .../kconfig/tests/err_recursive_dep/Kconfig | 63 + .../tests/err_recursive_dep/__init__.py | 10 + .../tests/err_recursive_dep/expected_stderr | 38 + .../kconfig/tests/err_recursive_inc/Kconfig | 2 + .../tests/err_recursive_inc/Kconfig.inc1 | 5 + .../tests/err_recursive_inc/Kconfig.inc2 | 4 + .../tests/err_recursive_inc/Kconfig.inc3 | 2 + .../tests/err_recursive_inc/__init__.py | 11 + .../tests/err_recursive_inc/expected_stderr | 6 + xen/tools/kconfig/tests/inter_choice/Kconfig | 25 + .../kconfig/tests/inter_choice/__init__.py | 15 + .../kconfig/tests/inter_choice/defconfig | 1 + .../tests/inter_choice/expected_config | 4 + .../kconfig/tests/new_choice_with_dep/Kconfig | 39 + .../tests/new_choice_with_dep/__init__.py | 15 + .../kconfig/tests/new_choice_with_dep/config | 3 + .../tests/new_choice_with_dep/expected_stdout | 10 + .../tests/no_write_if_dep_unmet/Kconfig | 16 + .../tests/no_write_if_dep_unmet/__init__.py | 20 + .../tests/no_write_if_dep_unmet/config | 1 + .../no_write_if_dep_unmet/expected_config | 5 + .../tests/preprocess/builtin_func/Kconfig | 27 + .../tests/preprocess/builtin_func/__init__.py | 9 + .../preprocess/builtin_func/expected_stderr | 5 + .../preprocess/builtin_func/expected_stdout | 1 + .../preprocess/circular_expansion/Kconfig | 5 + .../preprocess/circular_expansion/__init__.py | 11 + .../circular_expansion/expected_stderr | 1 + .../kconfig/tests/preprocess/escape/Kconfig | 44 + .../tests/preprocess/escape/__init__.py | 8 + .../tests/preprocess/escape/expected_stderr | 10 + .../kconfig/tests/preprocess/variable/Kconfig | 53 + .../tests/preprocess/variable/__init__.py | 8 + .../tests/preprocess/variable/expected_stderr | 9 + xen/tools/kconfig/tests/pytest.ini | 7 + .../kconfig/tests/rand_nested_choice/Kconfig | 35 + .../tests/rand_nested_choice/__init__.py | 17 + .../tests/rand_nested_choice/expected_stdout0 | 2 + .../tests/rand_nested_choice/expected_stdout1 | 4 + .../tests/rand_nested_choice/expected_stdout2 | 5 + xen/tools/kconfig/util.c | 129 + xen/tools/process-banner.sed | 14 + xen/tools/scmversion | 89 + xen/tools/symbols.c | 659 + xen/tools/xen.flf | 2230 +++ xen/xsm/Makefile | 6 + xen/xsm/dummy.c | 161 + xen/xsm/flask/.gitignore | 1 + xen/xsm/flask/Makefile | 56 + xen/xsm/flask/avc.c | 795 + xen/xsm/flask/flask_op.c | 813 + xen/xsm/flask/hooks.c | 1937 +++ xen/xsm/flask/include/avc.h | 104 + xen/xsm/flask/include/avc_ss.h | 29 + xen/xsm/flask/include/conditional.h | 27 + xen/xsm/flask/include/objsec.h | 26 + xen/xsm/flask/include/security.h | 110 + xen/xsm/flask/policy/access_vectors | 544 + xen/xsm/flask/policy/initial_sids | 18 + xen/xsm/flask/policy/mkaccess_vector.sh | 138 + xen/xsm/flask/policy/mkflask.sh | 100 + xen/xsm/flask/policy/security_classes | 24 + xen/xsm/flask/ss/Makefile | 11 + xen/xsm/flask/ss/avtab.c | 536 + xen/xsm/flask/ss/avtab.h | 91 + xen/xsm/flask/ss/conditional.c | 543 + xen/xsm/flask/ss/conditional.h | 77 + xen/xsm/flask/ss/constraint.h | 61 + xen/xsm/flask/ss/context.h | 133 + xen/xsm/flask/ss/ebitmap.c | 334 + xen/xsm/flask/ss/ebitmap.h | 129 + xen/xsm/flask/ss/hashtab.c | 175 + xen/xsm/flask/ss/hashtab.h | 87 + xen/xsm/flask/ss/mls.c | 484 + xen/xsm/flask/ss/mls.h | 36 + xen/xsm/flask/ss/mls_types.h | 58 + xen/xsm/flask/ss/policydb.c | 2244 +++ xen/xsm/flask/ss/policydb.h | 296 + xen/xsm/flask/ss/services.c | 2301 +++ xen/xsm/flask/ss/services.h | 15 + xen/xsm/flask/ss/sidtab.c | 322 + xen/xsm/flask/ss/sidtab.h | 53 + xen/xsm/flask/ss/symtab.c | 47 + xen/xsm/flask/ss/symtab.h | 23 + xen/xsm/silo.c | 108 + xen/xsm/xsm_core.c | 226 + xen/xsm/xsm_policy.c | 116 + 2791 files changed, 891757 insertions(+) create mode 100644 .gitarchive-info create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 .hgignore create mode 100644 .hgsigs create mode 100644 .hgtags create mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 CODING_STYLE create mode 100644 CONTRIBUTING create mode 100644 COPYING create mode 100644 CREDITS create mode 100644 Config.mk create mode 100644 INSTALL create mode 100644 MAINTAINERS create mode 100644 Makefile create mode 100644 README create mode 100644 SUPPORT.md create mode 100755 autogen.sh create mode 100644 automation/build/Makefile create mode 100644 automation/build/README.md create mode 100644 automation/build/archlinux/current.dockerfile create mode 100644 automation/build/centos/6.dockerfile create mode 100644 automation/build/centos/7.2.dockerfile create mode 100644 automation/build/centos/7.dockerfile create mode 100644 automation/build/centos/CentOS-7.2.repo create mode 100644 automation/build/debian/jessie-i386.dockerfile create mode 100644 automation/build/debian/jessie.dockerfile create mode 100644 automation/build/debian/stretch-i386.dockerfile create mode 100644 automation/build/debian/stretch-llvm-8.list create mode 100644 automation/build/debian/stretch.dockerfile create mode 100644 automation/build/debian/unstable-arm64v8.dockerfile create mode 100644 automation/build/debian/unstable-i386.dockerfile create mode 100644 automation/build/debian/unstable-llvm-8.list create mode 100644 automation/build/debian/unstable.dockerfile create mode 100644 automation/build/fedora/29.dockerfile create mode 100644 automation/build/suse/opensuse-leap.dockerfile create mode 100644 automation/build/suse/opensuse-tumbleweed.dockerfile create mode 100644 automation/build/suse/sles11sp4.dockerfile create mode 100644 automation/build/ubuntu/bionic.dockerfile create mode 100644 automation/build/ubuntu/trusty.dockerfile create mode 100644 automation/build/ubuntu/xenial.dockerfile create mode 100644 automation/configs/x86/hvm_only_config create mode 100644 automation/configs/x86/no_hvm_pv_config create mode 100644 automation/configs/x86/pv_only_config create mode 100755 automation/gitlab-ci/build-each-commit.sh create mode 100644 automation/gitlab-ci/build.yaml create mode 100644 automation/gitlab-ci/test.yaml create mode 100755 automation/scripts/build create mode 100755 automation/scripts/build-test.sh create mode 100755 automation/scripts/containerize create mode 100755 automation/scripts/qemu-smoke-x86-64.sh create mode 100644 config.guess create mode 100644 config.sub create mode 100644 config/Docs.mk.in create mode 100644 config/FreeBSD.mk create mode 100644 config/Linux.mk create mode 100644 config/MiniOS.mk create mode 100644 config/NetBSD.mk create mode 100644 config/NetBSDRump.mk create mode 100644 config/OpenBSD.mk create mode 100644 config/Paths.mk.in create mode 100644 config/StdGNU.mk create mode 100644 config/Stubdom.mk.in create mode 100644 config/SunOS.mk create mode 100644 config/Tools.mk.in create mode 100644 config/Toplevel.mk.in create mode 100644 config/arm32.mk create mode 100644 config/arm64.mk create mode 100644 config/x86_32.mk create mode 100644 config/x86_64.mk create mode 100755 configure create mode 100644 configure.ac create mode 100644 docs/INDEX create mode 100644 docs/Makefile create mode 100644 docs/README.colo create mode 100644 docs/README.remus create mode 100644 docs/README.source create mode 100644 docs/admin-guide/index.rst create mode 100644 docs/admin-guide/introduction.rst create mode 100644 docs/admin-guide/microcode-loading.rst create mode 100644 docs/admin-guide/xen-overview.drawio.svg create mode 100644 docs/conf.py create mode 100755 docs/configure create mode 100644 docs/configure.ac create mode 100644 docs/designs/argo.pandoc create mode 100644 docs/designs/dmop.pandoc create mode 100644 docs/designs/non-cooperative-migration.md create mode 100644 docs/designs/qemu-deprivilege.md create mode 100644 docs/designs/xenstore-migration.md create mode 100644 docs/features/dom0less.pandoc create mode 100644 docs/features/feature-levelling.pandoc create mode 100644 docs/features/hypervisorfs.pandoc create mode 100644 docs/features/intel_psr_cat_cdp.pandoc create mode 100644 docs/features/intel_psr_mba.pandoc create mode 100644 docs/features/livepatch.pandoc create mode 100644 docs/features/migration.pandoc create mode 100644 docs/features/qemu-deprivilege.pandoc create mode 100644 docs/features/sched_credit.pandoc create mode 100644 docs/features/sched_credit2.pandoc create mode 100644 docs/features/sched_rtds.pandoc create mode 100644 docs/features/template.pandoc create mode 100644 docs/figs/Makefile create mode 100644 docs/figs/network-basic.fig create mode 100644 docs/figs/network-bridge.fig create mode 100644 docs/figs/xenlogo.eps create mode 100644 docs/gen-html-index create mode 100644 docs/glossary.rst create mode 100644 docs/guest-guide/index.rst create mode 100644 docs/guest-guide/x86/hypercall-abi.rst create mode 100644 docs/guest-guide/x86/index.rst create mode 100644 docs/hypervisor-guide/code-coverage.rst create mode 100644 docs/hypervisor-guide/index.rst create mode 100644 docs/hypervisor-guide/x86/how-xen-boots.rst create mode 100644 docs/hypervisor-guide/x86/index.rst create mode 100644 docs/index.rst create mode 100644 docs/man/xen-pci-device-reservations.7.pod create mode 100644 docs/man/xen-pv-channel.7.pod create mode 100644 docs/man/xen-tscmode.7.pod create mode 100644 docs/man/xen-vbd-interface.7.pandoc create mode 100644 docs/man/xen-vtpm.7.pod create mode 100644 docs/man/xen-vtpmmgr.7.pod create mode 100644 docs/man/xenhypfs.1.pod create mode 100644 docs/man/xenstore-chmod.1.pod create mode 100644 docs/man/xenstore-ls.1.pod create mode 100644 docs/man/xenstore-read.1.pod create mode 100644 docs/man/xenstore-write.1.pod create mode 100644 docs/man/xenstore.1.pod create mode 100644 docs/man/xentop.1.pod create mode 100644 docs/man/xentrace.8.pod create mode 100644 docs/man/xentrace_format.1.pod create mode 100644 docs/man/xl-disk-configuration.5.pod create mode 100644 docs/man/xl-network-configuration.5.pod create mode 100644 docs/man/xl-numa-placement.7.pod create mode 100644 docs/man/xl.1.pod.in create mode 100644 docs/man/xl.cfg.5.pod.in create mode 100644 docs/man/xl.conf.5.pod create mode 100644 docs/man/xlcpupool.cfg.5.pod create mode 100644 docs/misc/9pfs.pandoc create mode 100644 docs/misc/amd-ucode-container.txt create mode 100644 docs/misc/arm/big.LITTLE.txt create mode 100644 docs/misc/arm/booting.txt create mode 100644 docs/misc/arm/device-tree/acpi.txt create mode 100644 docs/misc/arm/device-tree/booting.txt create mode 100644 docs/misc/arm/device-tree/guest.txt create mode 100644 docs/misc/arm/device-tree/passthrough.txt create mode 100644 docs/misc/arm/early-printk.txt create mode 100644 docs/misc/arm/passthrough.txt create mode 100644 docs/misc/arm/silicon-errata.txt create mode 100644 docs/misc/block-scripts.txt create mode 100644 docs/misc/console.txt create mode 100644 docs/misc/crashdb.txt create mode 100644 docs/misc/distro_mapping.txt create mode 100644 docs/misc/dump-core-format.txt create mode 100644 docs/misc/efi.pandoc create mode 100644 docs/misc/grant-tables.txt create mode 100644 docs/misc/hvm-emulated-unplug.pandoc create mode 100644 docs/misc/hypfs-paths.pandoc create mode 100644 docs/misc/kconfig-language.rst create mode 100644 docs/misc/kconfig-macro-language.rst create mode 100644 docs/misc/kconfig.rst create mode 100644 docs/misc/kexec_and_kdump.txt create mode 100644 docs/misc/libxl_memory.txt create mode 100644 docs/misc/livepatch.pandoc create mode 100644 docs/misc/netif-staging-grants.pandoc create mode 100644 docs/misc/printk-formats.txt create mode 100644 docs/misc/pv-drivers-lifecycle.pandoc create mode 100644 docs/misc/pvcalls.pandoc create mode 100644 docs/misc/pvh.pandoc create mode 100644 docs/misc/qemu-backends.txt create mode 100644 docs/misc/status-override-table-spec.fodt create mode 100644 docs/misc/stubdom.txt create mode 100644 docs/misc/support-matrix-head.html create mode 100644 docs/misc/vtd-pi.txt create mode 100644 docs/misc/vtd.txt create mode 100644 docs/misc/vtpm-platforms.txt create mode 100644 docs/misc/x86-xenpv-bootloader.pandoc create mode 100644 docs/misc/xen-command-line.pandoc create mode 100644 docs/misc/xen-env-table-spec.fodt create mode 100644 docs/misc/xen-error-handling.txt create mode 100644 docs/misc/xen-makefiles/makefiles.rst create mode 100644 docs/misc/xen_config.html create mode 100644 docs/misc/xenmon.txt create mode 100644 docs/misc/xenpaging.txt create mode 100644 docs/misc/xenstore-paths.pandoc create mode 100644 docs/misc/xenstore-ring.txt create mode 100644 docs/misc/xenstore.txt create mode 100644 docs/misc/xl-psr.pandoc create mode 100644 docs/misc/xsm-flask.txt create mode 100755 docs/parse-support-md create mode 100644 docs/process/RUBRIC create mode 100644 docs/process/branching-checklist.txt create mode 100644 docs/process/release-technician-checklist.txt create mode 100644 docs/process/tags.pandoc create mode 100644 docs/process/xen-release-management.pandoc create mode 100644 docs/specs/libxc-migration-stream.pandoc create mode 100644 docs/specs/libxl-migration-stream.pandoc create mode 100755 docs/support-matrix-generate create mode 100755 docs/xen-headers create mode 100644 install.sh create mode 100644 m4/README.source create mode 100644 m4/ax_compare_version.m4 create mode 100644 m4/checkpolicy.m4 create mode 100644 m4/curses.m4 create mode 100644 m4/depends.m4 create mode 100644 m4/docs_tool.m4 create mode 100644 m4/extfs.m4 create mode 100644 m4/features.m4 create mode 100644 m4/fetcher.m4 create mode 100644 m4/golang.m4 create mode 100644 m4/ocaml.m4 create mode 100644 m4/path_or_fail.m4 create mode 100644 m4/paths.m4 create mode 100644 m4/pkg.m4 create mode 100644 m4/pthread.m4 create mode 100644 m4/ptyfuncs.m4 create mode 100644 m4/python_devel.m4 create mode 100644 m4/python_fortify_noopt.m4 create mode 100644 m4/python_version.m4 create mode 100644 m4/savevar.m4 create mode 100644 m4/set_cflags_ldflags.m4 create mode 100644 m4/stubdom.m4 create mode 100644 m4/subsystem.m4 create mode 100644 m4/systemd.m4 create mode 100644 m4/uuid.m4 create mode 100644 m4/xenstored.m4 create mode 100644 misc/coverity/model.c create mode 100755 scripts/add_maintainers.pl create mode 100755 scripts/get_maintainer.pl create mode 100755 scripts/git-checkout.sh create mode 100755 scripts/travis-build create mode 100644 stubdom/COPYING create mode 100644 stubdom/Makefile create mode 100644 stubdom/c/Makefile create mode 100644 stubdom/c/main.c create mode 100644 stubdom/c/minios.cfg create mode 100644 stubdom/caml/Makefile create mode 100644 stubdom/caml/hello.ml create mode 100644 stubdom/caml/main-caml.c create mode 100644 stubdom/caml/minios.cfg create mode 100755 stubdom/configure create mode 100644 stubdom/configure.ac create mode 100644 stubdom/grub.patches/00cvs create mode 100644 stubdom/grub.patches/10graphics.diff create mode 100644 stubdom/grub.patches/11graphics-keyboard.diff create mode 100644 stubdom/grub.patches/20print_func.diff create mode 100644 stubdom/grub.patches/30savedefault.diff create mode 100644 stubdom/grub.patches/40ext3_256byte_inode.diff create mode 100644 stubdom/grub.patches/50fs_fulldisk.diff create mode 100644 stubdom/grub.patches/60ext4.diff create mode 100644 stubdom/grub.patches/61btrfs.diff create mode 100644 stubdom/grub.patches/70compiler_warnings.diff create mode 100644 stubdom/grub.patches/99minios create mode 100644 stubdom/grub/Makefile create mode 100644 stubdom/grub/boot-x86_32.S create mode 100644 stubdom/grub/boot-x86_64.S create mode 100644 stubdom/grub/config.h create mode 100644 stubdom/grub/kexec.c create mode 100644 stubdom/grub/mini-os.c create mode 100644 stubdom/grub/mini-os.h create mode 100644 stubdom/grub/minios.cfg create mode 100644 stubdom/grub/osdep.h create mode 100644 stubdom/ioemu-minios.cfg create mode 100644 stubdom/libpci.config.h create mode 100644 stubdom/libpci.config.mak create mode 100644 stubdom/lwip.dhcp_create_request-hwaddr_len.patch create mode 100644 stubdom/lwip.patch-cvs create mode 100644 stubdom/newlib-chk.patch create mode 100644 stubdom/newlib-disable-texinfo.patch create mode 100644 stubdom/newlib-stdint-size_max-fix-from-1.17.0.patch create mode 100644 stubdom/newlib.patch create mode 100644 stubdom/ocaml.patch create mode 100644 stubdom/pciutils.patch create mode 100644 stubdom/polarssl.patch create mode 100644 stubdom/stubdom-dm create mode 100644 stubdom/tpmemu-0.7.4.patch create mode 100644 stubdom/vtpm-bufsize.patch create mode 100644 stubdom/vtpm-cmake-Wextra.patch create mode 100644 stubdom/vtpm-deepquote-anyloc.patch create mode 100644 stubdom/vtpm-deepquote.patch create mode 100644 stubdom/vtpm-implicit-fallthrough.patch create mode 100644 stubdom/vtpm-locality.patch create mode 100644 stubdom/vtpm-parent-sign-ek.patch create mode 100644 stubdom/vtpm/COPYING create mode 100644 stubdom/vtpm/Makefile create mode 100644 stubdom/vtpm/minios.cfg create mode 100644 stubdom/vtpm/vtpm.c create mode 100644 stubdom/vtpm/vtpm.h create mode 100644 stubdom/vtpm/vtpm_cmd.c create mode 100644 stubdom/vtpm/vtpm_cmd.h create mode 100644 stubdom/vtpm/vtpm_pcrs.c create mode 100644 stubdom/vtpm/vtpm_pcrs.h create mode 100644 stubdom/vtpm/vtpmblk.c create mode 100644 stubdom/vtpm/vtpmblk.h create mode 100644 stubdom/vtpm_TPM_ChangeAuthAsymFinish.patch create mode 100644 stubdom/vtpm_extern.patch create mode 100644 stubdom/vtpmmgr/Makefile create mode 100644 stubdom/vtpmmgr/README.source create mode 100755 stubdom/vtpmmgr/calc.pl create mode 100644 stubdom/vtpmmgr/common_types.h create mode 100644 stubdom/vtpmmgr/disk_crypto.c create mode 100644 stubdom/vtpmmgr/disk_crypto.h create mode 100644 stubdom/vtpmmgr/disk_format.h create mode 100644 stubdom/vtpmmgr/disk_io.c create mode 100644 stubdom/vtpmmgr/disk_io.h create mode 100644 stubdom/vtpmmgr/disk_read.c create mode 100644 stubdom/vtpmmgr/disk_tpm.c create mode 100644 stubdom/vtpmmgr/disk_tpm.h create mode 100644 stubdom/vtpmmgr/disk_write.c create mode 100644 stubdom/vtpmmgr/endian_int.h create mode 100644 stubdom/vtpmmgr/init.c create mode 100644 stubdom/vtpmmgr/log.c create mode 100644 stubdom/vtpmmgr/log.h create mode 100755 stubdom/vtpmmgr/manage-vtpmmgr.pl create mode 100644 stubdom/vtpmmgr/marshal.h create mode 100644 stubdom/vtpmmgr/mgmt_authority.c create mode 100644 stubdom/vtpmmgr/mgmt_authority.h create mode 100644 stubdom/vtpmmgr/minios.cfg create mode 100644 stubdom/vtpmmgr/tcg.h create mode 100644 stubdom/vtpmmgr/tpm.c create mode 100644 stubdom/vtpmmgr/tpm.h create mode 100644 stubdom/vtpmmgr/tpm2.c create mode 100644 stubdom/vtpmmgr/tpm2.h create mode 100644 stubdom/vtpmmgr/tpm2_marshal.h create mode 100644 stubdom/vtpmmgr/tpm2_types.h create mode 100644 stubdom/vtpmmgr/tpmrsa.c create mode 100644 stubdom/vtpmmgr/tpmrsa.h create mode 100644 stubdom/vtpmmgr/uuid.h create mode 100644 stubdom/vtpmmgr/vtpm_cmd_handler.c create mode 100644 stubdom/vtpmmgr/vtpm_disk.c create mode 100644 stubdom/vtpmmgr/vtpm_disk.h create mode 100644 stubdom/vtpmmgr/vtpm_manager.h create mode 100644 stubdom/vtpmmgr/vtpmmgr.c create mode 100644 stubdom/vtpmmgr/vtpmmgr.h create mode 100644 stubdom/xenstore-minios.cfg create mode 100644 tools/Makefile create mode 100644 tools/Rules.mk create mode 100644 tools/config.h.in create mode 100755 tools/configure create mode 100644 tools/configure.ac create mode 100644 tools/console/Makefile create mode 100644 tools/console/client/main.c create mode 100644 tools/console/daemon/io.c create mode 100644 tools/console/daemon/io.h create mode 100644 tools/console/daemon/main.c create mode 100644 tools/console/daemon/utils.c create mode 100644 tools/console/daemon/utils.h create mode 100644 tools/console/testsuite/Makefile create mode 100644 tools/console/testsuite/README create mode 100644 tools/console/testsuite/console-dom0.c create mode 100644 tools/console/testsuite/console-domU.c create mode 100644 tools/console/testsuite/procpipe.c create mode 100755 tools/cross-install create mode 100644 tools/debugger/gdbsx/Makefile create mode 100644 tools/debugger/gdbsx/README create mode 100644 tools/debugger/gdbsx/Rules.mk create mode 100644 tools/debugger/gdbsx/gx/Makefile create mode 100644 tools/debugger/gdbsx/gx/gx.h create mode 100644 tools/debugger/gdbsx/gx/gx_comm.c create mode 100644 tools/debugger/gdbsx/gx/gx_local.c create mode 100644 tools/debugger/gdbsx/gx/gx_main.c create mode 100644 tools/debugger/gdbsx/gx/gx_utils.c create mode 100644 tools/debugger/gdbsx/gx/xg_dummy.c create mode 100644 tools/debugger/gdbsx/xg/Makefile create mode 100644 tools/debugger/gdbsx/xg/xg_main.c create mode 100644 tools/debugger/gdbsx/xg/xg_public.h create mode 100644 tools/debugger/kdd/Makefile create mode 100644 tools/debugger/kdd/kdd-xen.c create mode 100644 tools/debugger/kdd/kdd.c create mode 100644 tools/debugger/kdd/kdd.h create mode 100644 tools/examples/Makefile create mode 100644 tools/examples/README create mode 100644 tools/examples/README.incompatibilities create mode 100644 tools/examples/cpupool create mode 100644 tools/examples/vnc/Xservers create mode 100755 tools/examples/vnc/Xvnc-xen create mode 100644 tools/examples/xeninfo.pl create mode 100644 tools/examples/xl.conf create mode 100644 tools/examples/xlexample.hvm create mode 100644 tools/examples/xlexample.pvhlinux create mode 100644 tools/examples/xlexample.pvlinux create mode 100644 tools/firmware/Makefile create mode 100644 tools/firmware/Rules.mk create mode 100644 tools/firmware/etherboot/Config create mode 100644 tools/firmware/etherboot/Makefile create mode 100644 tools/firmware/etherboot/README create mode 100644 tools/firmware/etherboot/patches/boot_prompt_option.patch create mode 100644 tools/firmware/etherboot/patches/series create mode 100644 tools/firmware/hvmloader/32bitbios_support.c create mode 100644 tools/firmware/hvmloader/Makefile create mode 100644 tools/firmware/hvmloader/apic_regs.h create mode 100644 tools/firmware/hvmloader/cacheattr.c create mode 100644 tools/firmware/hvmloader/config-seabios.h create mode 100644 tools/firmware/hvmloader/config.h create mode 100644 tools/firmware/hvmloader/ctype.c create mode 100644 tools/firmware/hvmloader/ctype.h create mode 100644 tools/firmware/hvmloader/e820.c create mode 100644 tools/firmware/hvmloader/e820.h create mode 100644 tools/firmware/hvmloader/hvm_param.c create mode 100644 tools/firmware/hvmloader/hvmloader.c create mode 100644 tools/firmware/hvmloader/hvmloader.lds create mode 100644 tools/firmware/hvmloader/hypercall.h create mode 100644 tools/firmware/hvmloader/mp_tables.c create mode 100644 tools/firmware/hvmloader/option_rom.h create mode 100644 tools/firmware/hvmloader/optionroms.c create mode 100644 tools/firmware/hvmloader/ovmf.c create mode 100644 tools/firmware/hvmloader/pci.c create mode 100644 tools/firmware/hvmloader/pci_regs.h create mode 100644 tools/firmware/hvmloader/pir.c create mode 100644 tools/firmware/hvmloader/pir_types.h create mode 100644 tools/firmware/hvmloader/rombios.c create mode 100644 tools/firmware/hvmloader/seabios.c create mode 100644 tools/firmware/hvmloader/smbios.c create mode 100644 tools/firmware/hvmloader/smbios_types.h create mode 100644 tools/firmware/hvmloader/smp.c create mode 100644 tools/firmware/hvmloader/tests.c create mode 100644 tools/firmware/hvmloader/util.c create mode 100644 tools/firmware/hvmloader/util.h create mode 100644 tools/firmware/hvmloader/vnuma.c create mode 100644 tools/firmware/hvmloader/vnuma.h create mode 100644 tools/firmware/hvmloader/xenbus.c create mode 100644 tools/firmware/ovmf-makefile create mode 100644 tools/firmware/rombios/32bit/32bitbios.c create mode 100644 tools/firmware/rombios/32bit/Makefile create mode 100644 tools/firmware/rombios/32bit/mkhex create mode 100644 tools/firmware/rombios/32bit/pmm.c create mode 100644 tools/firmware/rombios/32bit/rombios_compat.h create mode 100644 tools/firmware/rombios/32bit/tcgbios/Makefile create mode 100644 tools/firmware/rombios/32bit/tcgbios/tcgbios.c create mode 100644 tools/firmware/rombios/32bit/tcgbios/tcgbios.h create mode 100644 tools/firmware/rombios/32bit/tcgbios/tpm_drivers.c create mode 100644 tools/firmware/rombios/32bit/tcgbios/tpm_drivers.h create mode 100644 tools/firmware/rombios/32bit/util.c create mode 100644 tools/firmware/rombios/32bit/util.h create mode 100644 tools/firmware/rombios/32bitgateway.c create mode 100644 tools/firmware/rombios/32bitprotos.h create mode 100644 tools/firmware/rombios/Makefile create mode 100644 tools/firmware/rombios/apmbios.S create mode 100644 tools/firmware/rombios/biossums.c create mode 100644 tools/firmware/rombios/config.h create mode 100644 tools/firmware/rombios/e820.h create mode 100755 tools/firmware/rombios/makesym.perl create mode 100644 tools/firmware/rombios/rombios.c create mode 100644 tools/firmware/rombios/rombios.h create mode 100644 tools/firmware/rombios/tcgbios.c create mode 100644 tools/firmware/seabios-config create mode 100644 tools/firmware/vgabios/BUGS create mode 100644 tools/firmware/vgabios/COPYING create mode 100644 tools/firmware/vgabios/ChangeLog create mode 100644 tools/firmware/vgabios/Makefile create mode 100644 tools/firmware/vgabios/Notes create mode 100644 tools/firmware/vgabios/README create mode 100644 tools/firmware/vgabios/TODO create mode 100644 tools/firmware/vgabios/biossums.c create mode 100644 tools/firmware/vgabios/clext.c create mode 100755 tools/firmware/vgabios/dataseghack create mode 100644 tools/firmware/vgabios/vbe.c create mode 100644 tools/firmware/vgabios/vbe.h create mode 100644 tools/firmware/vgabios/vbe_display_api.txt create mode 100644 tools/firmware/vgabios/vbetables-gen.c create mode 100644 tools/firmware/vgabios/vgabios.c create mode 100644 tools/firmware/vgabios/vgabios.h create mode 100644 tools/firmware/vgabios/vgafonts.h create mode 100644 tools/firmware/vgabios/vgatables.h create mode 100644 tools/firmware/xen-dir/Makefile create mode 100644 tools/flask/Makefile create mode 100644 tools/flask/policy/Makefile create mode 100644 tools/flask/policy/Makefile.common create mode 100644 tools/flask/policy/modules/all_system_role.te create mode 100644 tools/flask/policy/modules/dom0.te create mode 100644 tools/flask/policy/modules/domU.te create mode 100644 tools/flask/policy/modules/guest_features.te create mode 100644 tools/flask/policy/modules/isolated_domU.te create mode 100644 tools/flask/policy/modules/modules.conf create mode 100644 tools/flask/policy/modules/nic_dev.te create mode 100644 tools/flask/policy/modules/nomigrate.te create mode 100644 tools/flask/policy/modules/prot_domU.te create mode 100644 tools/flask/policy/modules/vm_role.cons create mode 100644 tools/flask/policy/modules/vm_role.te create mode 100644 tools/flask/policy/modules/xen.if create mode 100644 tools/flask/policy/modules/xen.te create mode 100644 tools/flask/policy/modules/xenstore.te create mode 100644 tools/flask/policy/policy/access_vectors create mode 100644 tools/flask/policy/policy/device_contexts create mode 100644 tools/flask/policy/policy/global_tunables create mode 100644 tools/flask/policy/policy/initial_sids create mode 100644 tools/flask/policy/policy/mls create mode 100644 tools/flask/policy/policy/security_classes create mode 100644 tools/flask/policy/policy/support/misc_macros.spt create mode 100644 tools/flask/policy/policy/support/mls_macros.spt create mode 100644 tools/flask/policy/policy/users create mode 100644 tools/flask/utils/Makefile create mode 100644 tools/flask/utils/get-bool.c create mode 100644 tools/flask/utils/getenforce.c create mode 100644 tools/flask/utils/label-pci.c create mode 100644 tools/flask/utils/loadpolicy.c create mode 100644 tools/flask/utils/set-bool.c create mode 100644 tools/flask/utils/setenforce.c create mode 100644 tools/fuzz/Makefile create mode 100644 tools/fuzz/README.afl create mode 100644 tools/fuzz/README.oss-fuzz create mode 100644 tools/fuzz/cpu-policy/.gitignore create mode 100644 tools/fuzz/cpu-policy/Makefile create mode 100644 tools/fuzz/cpu-policy/afl-policy-fuzzer.c create mode 100644 tools/fuzz/libelf/Makefile create mode 100644 tools/fuzz/libelf/afl-libelf-fuzzer.c create mode 100644 tools/fuzz/libelf/libelf-fuzzer.c create mode 100644 tools/fuzz/x86_instruction_emulator/Makefile create mode 100644 tools/fuzz/x86_instruction_emulator/afl-harness.c create mode 100644 tools/fuzz/x86_instruction_emulator/fuzz-emul.c create mode 100644 tools/fuzz/x86_instruction_emulator/fuzz-emul.h create mode 100644 tools/golang/Makefile create mode 100644 tools/golang/xenlight/LICENSE create mode 100644 tools/golang/xenlight/Makefile create mode 100644 tools/golang/xenlight/README.md create mode 100644 tools/golang/xenlight/gengotypes.py create mode 100644 tools/golang/xenlight/go.mod create mode 100644 tools/golang/xenlight/helpers.gen.go create mode 100644 tools/golang/xenlight/types.gen.go create mode 100644 tools/golang/xenlight/xenlight.go create mode 100644 tools/helpers/Makefile create mode 100644 tools/helpers/init-dom-json.c create mode 100644 tools/helpers/init-dom-json.h create mode 100644 tools/helpers/init-xenstore-domain.c create mode 100644 tools/helpers/xen-init-dom0.c create mode 100644 tools/hotplug/FreeBSD/Makefile create mode 100644 tools/hotplug/FreeBSD/block create mode 100644 tools/hotplug/FreeBSD/rc.d/xencommons.in create mode 100644 tools/hotplug/FreeBSD/rc.d/xendriverdomain.in create mode 100644 tools/hotplug/FreeBSD/vif-bridge create mode 100644 tools/hotplug/Linux/Makefile create mode 100644 tools/hotplug/Linux/block create mode 100644 tools/hotplug/Linux/block-common.sh create mode 100755 tools/hotplug/Linux/block-drbd-probe create mode 100644 tools/hotplug/Linux/block-dummy create mode 100644 tools/hotplug/Linux/block-enbd create mode 100644 tools/hotplug/Linux/block-iscsi create mode 100644 tools/hotplug/Linux/block-nbd create mode 100755 tools/hotplug/Linux/block-tap create mode 100755 tools/hotplug/Linux/colo-proxy-setup create mode 100644 tools/hotplug/Linux/external-device-migrate create mode 100644 tools/hotplug/Linux/init.d/sysconfig.xencommons.in create mode 100644 tools/hotplug/Linux/init.d/sysconfig.xendomains.in create mode 100644 tools/hotplug/Linux/init.d/xen-watchdog.in create mode 100644 tools/hotplug/Linux/init.d/xencommons.in create mode 100644 tools/hotplug/Linux/init.d/xendomains.in create mode 100644 tools/hotplug/Linux/init.d/xendriverdomain.in create mode 100644 tools/hotplug/Linux/launch-xenstore.in create mode 100644 tools/hotplug/Linux/locking.sh create mode 100644 tools/hotplug/Linux/logging.sh create mode 100644 tools/hotplug/Linux/remus-netbuf-setup create mode 100644 tools/hotplug/Linux/systemd/Makefile create mode 100644 tools/hotplug/Linux/systemd/proc-xen.mount.in create mode 100644 tools/hotplug/Linux/systemd/show_service_dependencies.sh create mode 100644 tools/hotplug/Linux/systemd/var-lib-xenstored.mount.in create mode 100644 tools/hotplug/Linux/systemd/xen-init-dom0.service.in create mode 100644 tools/hotplug/Linux/systemd/xen-qemu-dom0-disk-backend.service.in create mode 100644 tools/hotplug/Linux/systemd/xen-watchdog.service.in create mode 100644 tools/hotplug/Linux/systemd/xenconsoled.service.in create mode 100644 tools/hotplug/Linux/systemd/xendomains.service.in create mode 100644 tools/hotplug/Linux/systemd/xendriverdomain.service.in create mode 100644 tools/hotplug/Linux/systemd/xenstored.service.in create mode 100644 tools/hotplug/Linux/vif-bridge create mode 100644 tools/hotplug/Linux/vif-common.sh create mode 100644 tools/hotplug/Linux/vif-nat create mode 100644 tools/hotplug/Linux/vif-openvswitch create mode 100644 tools/hotplug/Linux/vif-post.d/00-vif-local.hook create mode 100755 tools/hotplug/Linux/vif-route create mode 100644 tools/hotplug/Linux/vif-setup.in create mode 100644 tools/hotplug/Linux/vif2 create mode 100644 tools/hotplug/Linux/vscsi create mode 100644 tools/hotplug/Linux/xen-hotplug-common.sh.in create mode 100644 tools/hotplug/Linux/xen-network-common.sh create mode 100644 tools/hotplug/Linux/xen-script-common.sh create mode 100644 tools/hotplug/Linux/xendomains.in create mode 100644 tools/hotplug/Makefile create mode 100644 tools/hotplug/NetBSD/Makefile create mode 100644 tools/hotplug/NetBSD/block create mode 100644 tools/hotplug/NetBSD/rc.d/xen-watchdog create mode 100644 tools/hotplug/NetBSD/rc.d/xencommons.in create mode 100644 tools/hotplug/NetBSD/rc.d/xendomains create mode 100644 tools/hotplug/NetBSD/rc.d/xendriverdomain.in create mode 100644 tools/hotplug/NetBSD/vif-bridge create mode 100644 tools/hotplug/NetBSD/vif-ip create mode 100644 tools/hotplug/common/Makefile create mode 100644 tools/include/Makefile create mode 100644 tools/include/xen-external/README create mode 100644 tools/include/xen-external/bsd-COPYRIGHT create mode 100644 tools/include/xen-external/bsd-queue.3 create mode 100755 tools/include/xen-external/bsd-sys-queue-h-seddery create mode 100644 tools/include/xen-external/bsd-sys-queue.h create mode 100644 tools/include/xen-foreign/Makefile create mode 100644 tools/include/xen-foreign/mkchecker.py create mode 100644 tools/include/xen-foreign/mkheader.py create mode 100644 tools/include/xen-foreign/reference.size create mode 100644 tools/include/xen-foreign/structs.py create mode 100644 tools/include/xen-sys/FreeBSD/evtchn.h create mode 100644 tools/include/xen-sys/FreeBSD/gntdev.h create mode 100644 tools/include/xen-sys/FreeBSD/privcmd.h create mode 100644 tools/include/xen-sys/Linux/evtchn.h create mode 100644 tools/include/xen-sys/Linux/gntalloc.h create mode 100644 tools/include/xen-sys/Linux/gntdev.h create mode 100644 tools/include/xen-sys/Linux/privcmd.h create mode 100644 tools/include/xen-sys/Linux/xenbus_dev.h create mode 100644 tools/include/xen-sys/MiniOS/privcmd.h create mode 100644 tools/include/xen-sys/NetBSD/evtchn.h create mode 100644 tools/include/xen-sys/NetBSD/privcmd.h create mode 100644 tools/include/xen-sys/NetBSDRump/evtchn.h create mode 100644 tools/include/xen-sys/NetBSDRump/privcmd.h create mode 100644 tools/include/xen-sys/SunOS/evtchn.h create mode 100644 tools/include/xen-sys/SunOS/privcmd.h create mode 100644 tools/include/xen-sys/SunOS/xenbus.h create mode 100644 tools/include/xen-tools/libs.h create mode 100644 tools/libacpi/COPYING create mode 100644 tools/libacpi/Makefile create mode 100644 tools/libacpi/README create mode 100644 tools/libacpi/acpi2_0.h create mode 100644 tools/libacpi/build.c create mode 100644 tools/libacpi/dsdt.asl create mode 100644 tools/libacpi/dsdt_acpi_info.asl create mode 100644 tools/libacpi/libacpi.h create mode 100644 tools/libacpi/mk_dsdt.c create mode 100644 tools/libacpi/ssdt_laptop_slate.asl create mode 100644 tools/libacpi/ssdt_pm.asl create mode 100644 tools/libacpi/ssdt_s3.asl create mode 100644 tools/libacpi/ssdt_s4.asl create mode 100644 tools/libacpi/ssdt_tpm.asl create mode 100644 tools/libacpi/static_tables.c create mode 100644 tools/libfsimage/Makefile create mode 100644 tools/libfsimage/Rules.mk create mode 100644 tools/libfsimage/common/Makefile create mode 100644 tools/libfsimage/common/fsimage.c create mode 100644 tools/libfsimage/common/fsimage_grub.c create mode 100644 tools/libfsimage/common/fsimage_plugin.c create mode 100644 tools/libfsimage/common/fsimage_priv.h create mode 100644 tools/libfsimage/common/mapfile-GNU create mode 100644 tools/libfsimage/common/mapfile-SunOS create mode 100644 tools/libfsimage/common/xenfsimage.h create mode 100644 tools/libfsimage/common/xenfsimage_grub.h create mode 100644 tools/libfsimage/common/xenfsimage_plugin.h create mode 100644 tools/libfsimage/ext2fs-lib/Makefile create mode 100644 tools/libfsimage/ext2fs-lib/ext2fs-lib.c create mode 100644 tools/libfsimage/ext2fs/Makefile create mode 100644 tools/libfsimage/ext2fs/fsys_ext2fs.c create mode 100644 tools/libfsimage/fat/Makefile create mode 100644 tools/libfsimage/fat/fat.h create mode 100644 tools/libfsimage/fat/fsys_fat.c create mode 100644 tools/libfsimage/iso9660/Makefile create mode 100644 tools/libfsimage/iso9660/fsys_iso9660.c create mode 100644 tools/libfsimage/iso9660/iso9660.h create mode 100644 tools/libfsimage/reiserfs/Makefile create mode 100644 tools/libfsimage/reiserfs/fsys_reiserfs.c create mode 100644 tools/libfsimage/ufs/Makefile create mode 100644 tools/libfsimage/ufs/fsys_ufs.c create mode 100644 tools/libfsimage/ufs/ufs.h create mode 100644 tools/libfsimage/xfs/Makefile create mode 100644 tools/libfsimage/xfs/fsys_xfs.c create mode 100644 tools/libfsimage/xfs/xfs.h create mode 100644 tools/libfsimage/zfs/Makefile create mode 100644 tools/libfsimage/zfs/filesys.h create mode 100644 tools/libfsimage/zfs/fsi_zfs.c create mode 100644 tools/libfsimage/zfs/fsi_zfs.h create mode 100644 tools/libfsimage/zfs/fsys_zfs.c create mode 100644 tools/libfsimage/zfs/fsys_zfs.h create mode 100644 tools/libfsimage/zfs/mb_info.h create mode 100644 tools/libfsimage/zfs/shared.h create mode 100644 tools/libfsimage/zfs/zfs-include/dmu.h create mode 100644 tools/libfsimage/zfs/zfs-include/dmu_objset.h create mode 100644 tools/libfsimage/zfs/zfs-include/dnode.h create mode 100644 tools/libfsimage/zfs/zfs-include/dsl_dataset.h create mode 100644 tools/libfsimage/zfs/zfs-include/dsl_dir.h create mode 100644 tools/libfsimage/zfs/zfs-include/sa_impl.h create mode 100644 tools/libfsimage/zfs/zfs-include/spa.h create mode 100644 tools/libfsimage/zfs/zfs-include/uberblock_impl.h create mode 100644 tools/libfsimage/zfs/zfs-include/vdev_impl.h create mode 100644 tools/libfsimage/zfs/zfs-include/zap_impl.h create mode 100644 tools/libfsimage/zfs/zfs-include/zap_leaf.h create mode 100644 tools/libfsimage/zfs/zfs-include/zfs.h create mode 100644 tools/libfsimage/zfs/zfs-include/zfs_acl.h create mode 100644 tools/libfsimage/zfs/zfs-include/zfs_znode.h create mode 100644 tools/libfsimage/zfs/zfs-include/zil.h create mode 100644 tools/libfsimage/zfs/zfs-include/zio.h create mode 100644 tools/libfsimage/zfs/zfs-include/zio_checksum.h create mode 100644 tools/libfsimage/zfs/zfs_fletcher.c create mode 100644 tools/libfsimage/zfs/zfs_lzjb.c create mode 100644 tools/libfsimage/zfs/zfs_sha256.c create mode 100644 tools/libs/Makefile create mode 100644 tools/libs/call/Makefile create mode 100644 tools/libs/call/buffer.c create mode 100644 tools/libs/call/core.c create mode 100644 tools/libs/call/freebsd.c create mode 100644 tools/libs/call/include/xencall.h create mode 100644 tools/libs/call/libxencall.map create mode 100644 tools/libs/call/linux.c create mode 100644 tools/libs/call/minios.c create mode 100644 tools/libs/call/netbsd.c create mode 100644 tools/libs/call/private.h create mode 100644 tools/libs/call/solaris.c create mode 100644 tools/libs/call/xencall.pc.in create mode 100644 tools/libs/devicemodel/Makefile create mode 100644 tools/libs/devicemodel/compat.c create mode 100644 tools/libs/devicemodel/core.c create mode 100644 tools/libs/devicemodel/include/xendevicemodel.h create mode 100644 tools/libs/devicemodel/libxendevicemodel.map create mode 100644 tools/libs/devicemodel/linux.c create mode 100644 tools/libs/devicemodel/private.h create mode 100644 tools/libs/devicemodel/xendevicemodel.pc.in create mode 100644 tools/libs/evtchn/Makefile create mode 100644 tools/libs/evtchn/core.c create mode 100644 tools/libs/evtchn/freebsd.c create mode 100644 tools/libs/evtchn/include/xenevtchn.h create mode 100644 tools/libs/evtchn/libxenevtchn.map create mode 100644 tools/libs/evtchn/linux.c create mode 100644 tools/libs/evtchn/minios.c create mode 100644 tools/libs/evtchn/netbsd.c create mode 100644 tools/libs/evtchn/private.h create mode 100644 tools/libs/evtchn/solaris.c create mode 100644 tools/libs/evtchn/xenevtchn.pc.in create mode 100644 tools/libs/foreignmemory/Makefile create mode 100644 tools/libs/foreignmemory/compat.c create mode 100644 tools/libs/foreignmemory/core.c create mode 100644 tools/libs/foreignmemory/freebsd.c create mode 100644 tools/libs/foreignmemory/include/xenforeignmemory.h create mode 100644 tools/libs/foreignmemory/libxenforeignmemory.map create mode 100644 tools/libs/foreignmemory/linux.c create mode 100644 tools/libs/foreignmemory/minios.c create mode 100644 tools/libs/foreignmemory/netbsd.c create mode 100644 tools/libs/foreignmemory/private.h create mode 100644 tools/libs/foreignmemory/solaris.c create mode 100644 tools/libs/foreignmemory/xenforeignmemory.pc.in create mode 100644 tools/libs/gnttab/Makefile create mode 100644 tools/libs/gnttab/freebsd.c create mode 100644 tools/libs/gnttab/gntshr_core.c create mode 100644 tools/libs/gnttab/gntshr_unimp.c create mode 100644 tools/libs/gnttab/gnttab_core.c create mode 100644 tools/libs/gnttab/gnttab_unimp.c create mode 100644 tools/libs/gnttab/include/xengnttab.h create mode 100644 tools/libs/gnttab/libxengnttab.map create mode 100644 tools/libs/gnttab/linux.c create mode 100644 tools/libs/gnttab/minios.c create mode 100644 tools/libs/gnttab/private.h create mode 100644 tools/libs/gnttab/xengnttab.pc.in create mode 100644 tools/libs/hypfs/Makefile create mode 100644 tools/libs/hypfs/core.c create mode 100644 tools/libs/hypfs/include/xenhypfs.h create mode 100644 tools/libs/hypfs/libxenhypfs.map create mode 100644 tools/libs/hypfs/xenhypfs.pc.in create mode 100644 tools/libs/libs.mk create mode 100644 tools/libs/toolcore/Makefile create mode 100644 tools/libs/toolcore/handlereg.c create mode 100644 tools/libs/toolcore/include/xentoolcore.h create mode 100644 tools/libs/toolcore/include/xentoolcore_internal.h create mode 100644 tools/libs/toolcore/libxentoolcore.map create mode 100644 tools/libs/toolcore/xentoolcore.pc.in create mode 100644 tools/libs/toollog/Makefile create mode 100644 tools/libs/toollog/include/xentoollog.h create mode 100644 tools/libs/toollog/libxentoollog.map create mode 100644 tools/libs/toollog/xentoollog.pc.in create mode 100644 tools/libs/toollog/xtl_core.c create mode 100644 tools/libs/toollog/xtl_logger_stdio.c create mode 100644 tools/libvchan/Makefile create mode 100644 tools/libvchan/init.c create mode 100644 tools/libvchan/io.c create mode 100644 tools/libvchan/libxenvchan.h create mode 100644 tools/libvchan/node-select.c create mode 100644 tools/libvchan/node.c create mode 100644 tools/libvchan/vchan-socket-proxy.c create mode 100644 tools/libvchan/xenvchan.pc.in create mode 100644 tools/libxc/COPYING create mode 100644 tools/libxc/Makefile create mode 100644 tools/libxc/include/xc_dom.h create mode 100644 tools/libxc/include/xenctrl.h create mode 100644 tools/libxc/include/xenctrl_compat.h create mode 100644 tools/libxc/include/xenguest.h create mode 100644 tools/libxc/xc_altp2m.c create mode 100644 tools/libxc/xc_arinc653.c create mode 100644 tools/libxc/xc_bitops.h create mode 100644 tools/libxc/xc_core.c create mode 100644 tools/libxc/xc_core.h create mode 100644 tools/libxc/xc_core_arm.c create mode 100644 tools/libxc/xc_core_arm.h create mode 100644 tools/libxc/xc_core_x86.c create mode 100644 tools/libxc/xc_core_x86.h create mode 100644 tools/libxc/xc_cpu_hotplug.c create mode 100644 tools/libxc/xc_cpuid_x86.c create mode 100644 tools/libxc/xc_cpupool.c create mode 100644 tools/libxc/xc_csched.c create mode 100644 tools/libxc/xc_csched2.c create mode 100644 tools/libxc/xc_devicemodel_compat.c create mode 100644 tools/libxc/xc_dom_arm.c create mode 100644 tools/libxc/xc_dom_armzimageloader.c create mode 100644 tools/libxc/xc_dom_binloader.c create mode 100644 tools/libxc/xc_dom_boot.c create mode 100644 tools/libxc/xc_dom_bzimageloader.c create mode 100644 tools/libxc/xc_dom_compat_linux.c create mode 100644 tools/libxc/xc_dom_core.c create mode 100644 tools/libxc/xc_dom_decompress.h create mode 100644 tools/libxc/xc_dom_decompress_lz4.c create mode 100644 tools/libxc/xc_dom_decompress_unsafe.c create mode 100644 tools/libxc/xc_dom_decompress_unsafe.h create mode 100644 tools/libxc/xc_dom_decompress_unsafe_bzip2.c create mode 100644 tools/libxc/xc_dom_decompress_unsafe_lzma.c create mode 100644 tools/libxc/xc_dom_decompress_unsafe_lzo1x.c create mode 100644 tools/libxc/xc_dom_decompress_unsafe_xz.c create mode 100644 tools/libxc/xc_dom_elfloader.c create mode 100644 tools/libxc/xc_dom_hvmloader.c create mode 100644 tools/libxc/xc_dom_x86.c create mode 100644 tools/libxc/xc_domain.c create mode 100644 tools/libxc/xc_efi.h create mode 100644 tools/libxc/xc_elf.h create mode 100644 tools/libxc/xc_evtchn.c create mode 100644 tools/libxc/xc_evtchn_compat.c create mode 100644 tools/libxc/xc_flask.c create mode 100644 tools/libxc/xc_foreign_memory.c create mode 100644 tools/libxc/xc_freebsd.c create mode 100644 tools/libxc/xc_gnttab.c create mode 100644 tools/libxc/xc_gnttab_compat.c create mode 100644 tools/libxc/xc_hcall_buf.c create mode 100644 tools/libxc/xc_kexec.c create mode 100644 tools/libxc/xc_linux.c create mode 100644 tools/libxc/xc_mem_access.c create mode 100644 tools/libxc/xc_mem_paging.c create mode 100644 tools/libxc/xc_memshr.c create mode 100644 tools/libxc/xc_minios.c create mode 100644 tools/libxc/xc_misc.c create mode 100644 tools/libxc/xc_monitor.c create mode 100644 tools/libxc/xc_msr_x86.h create mode 100644 tools/libxc/xc_netbsd.c create mode 100644 tools/libxc/xc_nomigrate.c create mode 100644 tools/libxc/xc_offline_page.c create mode 100644 tools/libxc/xc_pagetab.c create mode 100644 tools/libxc/xc_physdev.c create mode 100644 tools/libxc/xc_pm.c create mode 100644 tools/libxc/xc_private.c create mode 100644 tools/libxc/xc_private.h create mode 100644 tools/libxc/xc_psr.c create mode 100644 tools/libxc/xc_resource.c create mode 100644 tools/libxc/xc_resume.c create mode 100644 tools/libxc/xc_rt.c create mode 100644 tools/libxc/xc_solaris.c create mode 100644 tools/libxc/xc_sr_common.c create mode 100644 tools/libxc/xc_sr_common.h create mode 100644 tools/libxc/xc_sr_common_x86.c create mode 100644 tools/libxc/xc_sr_common_x86.h create mode 100644 tools/libxc/xc_sr_common_x86_pv.c create mode 100644 tools/libxc/xc_sr_common_x86_pv.h create mode 100644 tools/libxc/xc_sr_restore.c create mode 100644 tools/libxc/xc_sr_restore_x86_hvm.c create mode 100644 tools/libxc/xc_sr_restore_x86_pv.c create mode 100644 tools/libxc/xc_sr_save.c create mode 100644 tools/libxc/xc_sr_save_x86_hvm.c create mode 100644 tools/libxc/xc_sr_save_x86_pv.c create mode 100644 tools/libxc/xc_sr_stream_format.h create mode 100644 tools/libxc/xc_suspend.c create mode 100644 tools/libxc/xc_tbuf.c create mode 100644 tools/libxc/xc_vm_event.c create mode 100644 tools/libxc/xencontrol.pc.in create mode 100644 tools/libxc/xenguest.pc.in create mode 100644 tools/libxc/xg_private.c create mode 100644 tools/libxc/xg_private.h create mode 100644 tools/libxc/xg_save_restore.h create mode 100644 tools/libxl/CODING_STYLE create mode 100644 tools/libxl/Makefile create mode 100755 tools/libxl/check-libxl-api-rules create mode 100755 tools/libxl/check-xl-disk-parse create mode 100755 tools/libxl/check-xl-vcpupin-parse create mode 100644 tools/libxl/check-xl-vcpupin-parse.data-example create mode 100755 tools/libxl/check-xl-vif-parse create mode 100644 tools/libxl/flexarray.c create mode 100644 tools/libxl/flexarray.h create mode 100644 tools/libxl/gentest.py create mode 100644 tools/libxl/gentypes.py create mode 100644 tools/libxl/idl.py create mode 100644 tools/libxl/idl.txt create mode 100644 tools/libxl/libxl.c create mode 100644 tools/libxl/libxl.h create mode 100644 tools/libxl/libxl_9pfs.c create mode 100644 tools/libxl/libxl_aoutils.c create mode 100644 tools/libxl/libxl_arch.h create mode 100644 tools/libxl/libxl_arm.c create mode 100644 tools/libxl/libxl_arm.h create mode 100644 tools/libxl/libxl_arm_acpi.c create mode 100644 tools/libxl/libxl_arm_no_acpi.c create mode 100644 tools/libxl/libxl_bootloader.c create mode 100644 tools/libxl/libxl_checkpoint_device.c create mode 100644 tools/libxl/libxl_colo.h create mode 100644 tools/libxl/libxl_colo_nic.c create mode 100644 tools/libxl/libxl_colo_proxy.c create mode 100644 tools/libxl/libxl_colo_qdisk.c create mode 100644 tools/libxl/libxl_colo_restore.c create mode 100644 tools/libxl/libxl_colo_save.c create mode 100644 tools/libxl/libxl_console.c create mode 100644 tools/libxl/libxl_convert_callout.c create mode 100644 tools/libxl/libxl_cpuid.c create mode 100644 tools/libxl/libxl_cpupool.c create mode 100644 tools/libxl/libxl_create.c create mode 100644 tools/libxl/libxl_device.c create mode 100644 tools/libxl/libxl_disk.c create mode 100644 tools/libxl/libxl_dm.c create mode 100644 tools/libxl/libxl_dom.c create mode 100644 tools/libxl/libxl_dom_save.c create mode 100644 tools/libxl/libxl_dom_suspend.c create mode 100644 tools/libxl/libxl_domain.c create mode 100644 tools/libxl/libxl_event.c create mode 100644 tools/libxl/libxl_event.h create mode 100644 tools/libxl/libxl_exec.c create mode 100644 tools/libxl/libxl_flask.c create mode 100644 tools/libxl/libxl_fork.c create mode 100644 tools/libxl/libxl_freebsd.c create mode 100644 tools/libxl/libxl_genid.c create mode 100644 tools/libxl/libxl_internal.c create mode 100644 tools/libxl/libxl_internal.h create mode 100644 tools/libxl/libxl_json.c create mode 100644 tools/libxl/libxl_json.h create mode 100644 tools/libxl/libxl_libfdt_compat.c create mode 100644 tools/libxl/libxl_libfdt_compat.h create mode 100644 tools/libxl/libxl_linux.c create mode 100644 tools/libxl/libxl_mem.c create mode 100644 tools/libxl/libxl_netbsd.c create mode 100644 tools/libxl/libxl_netbuffer.c create mode 100644 tools/libxl/libxl_nic.c create mode 100644 tools/libxl/libxl_no_colo.c create mode 100644 tools/libxl/libxl_no_convert_callout.c create mode 100644 tools/libxl/libxl_nocpuid.c create mode 100644 tools/libxl/libxl_nonetbuffer.c create mode 100644 tools/libxl/libxl_numa.c create mode 100644 tools/libxl/libxl_osdeps.h create mode 100644 tools/libxl/libxl_paths.c create mode 100644 tools/libxl/libxl_pci.c create mode 100644 tools/libxl/libxl_psr.c create mode 100644 tools/libxl/libxl_pvcalls.c create mode 100644 tools/libxl/libxl_qmp.c create mode 100644 tools/libxl/libxl_remus.c create mode 100644 tools/libxl/libxl_remus_disk_drbd.c create mode 100644 tools/libxl/libxl_save_callout.c create mode 100644 tools/libxl/libxl_save_helper.c create mode 100755 tools/libxl/libxl_save_msgs_gen.pl create mode 100644 tools/libxl/libxl_sched.c create mode 100644 tools/libxl/libxl_sr_stream_format.h create mode 100644 tools/libxl/libxl_stream_read.c create mode 100644 tools/libxl/libxl_stream_write.c create mode 100644 tools/libxl/libxl_test_fdevent.c create mode 100644 tools/libxl/libxl_test_fdevent.h create mode 100644 tools/libxl/libxl_test_timedereg.c create mode 100644 tools/libxl/libxl_test_timedereg.h create mode 100644 tools/libxl/libxl_tmem.c create mode 100644 tools/libxl/libxl_types.idl create mode 100644 tools/libxl/libxl_types_internal.idl create mode 100644 tools/libxl/libxl_usb.c create mode 100644 tools/libxl/libxl_utils.c create mode 100644 tools/libxl/libxl_utils.h create mode 100644 tools/libxl/libxl_uuid.c create mode 100644 tools/libxl/libxl_uuid.h create mode 100644 tools/libxl/libxl_vdispl.c create mode 100644 tools/libxl/libxl_vkb.c create mode 100644 tools/libxl/libxl_vnuma.c create mode 100644 tools/libxl/libxl_vsnd.c create mode 100644 tools/libxl/libxl_vtpm.c create mode 100644 tools/libxl/libxl_x86.c create mode 100644 tools/libxl/libxl_x86_acpi.c create mode 100644 tools/libxl/libxl_x86_acpi.h create mode 100644 tools/libxl/libxl_xshelp.c create mode 100644 tools/libxl/libxlu_cfg.c create mode 100644 tools/libxl/libxlu_cfg_i.h create mode 100644 tools/libxl/libxlu_cfg_l.c create mode 100644 tools/libxl/libxlu_cfg_l.h create mode 100644 tools/libxl/libxlu_cfg_l.l create mode 100644 tools/libxl/libxlu_cfg_y.c create mode 100644 tools/libxl/libxlu_cfg_y.h create mode 100644 tools/libxl/libxlu_cfg_y.y create mode 100644 tools/libxl/libxlu_disk.c create mode 100644 tools/libxl/libxlu_disk_i.h create mode 100644 tools/libxl/libxlu_disk_l.c create mode 100644 tools/libxl/libxlu_disk_l.h create mode 100644 tools/libxl/libxlu_disk_l.l create mode 100644 tools/libxl/libxlu_internal.h create mode 100644 tools/libxl/libxlu_pci.c create mode 100644 tools/libxl/libxlu_vif.c create mode 100644 tools/libxl/libxlutil.h create mode 100644 tools/libxl/osdeps.c create mode 100644 tools/libxl/test_common.c create mode 100644 tools/libxl/test_common.h create mode 100644 tools/libxl/test_fdderegrace.c create mode 100644 tools/libxl/test_timedereg.c create mode 100644 tools/libxl/xenlight.pc.in create mode 100644 tools/libxl/xlutil.pc.in create mode 100644 tools/misc/.gitignore create mode 100644 tools/misc/Makefile create mode 100644 tools/misc/mkdeb create mode 100755 tools/misc/mkhex create mode 100644 tools/misc/mkrpm create mode 100755 tools/misc/mktarball create mode 100644 tools/misc/xen-cpuid.c create mode 100644 tools/misc/xen-detect.c create mode 100644 tools/misc/xen-diag.c create mode 100644 tools/misc/xen-hptool.c create mode 100644 tools/misc/xen-hvmcrash.c create mode 100644 tools/misc/xen-hvmctx.c create mode 100644 tools/misc/xen-livepatch.c create mode 100644 tools/misc/xen-lowmemd.c create mode 100644 tools/misc/xen-mfndump.c create mode 100644 tools/misc/xen-ucode.c create mode 100755 tools/misc/xencons create mode 100644 tools/misc/xencov.c create mode 100755 tools/misc/xencov_split create mode 100644 tools/misc/xenhypfs.c create mode 100644 tools/misc/xenlockprof.c create mode 100644 tools/misc/xenperf.c create mode 100644 tools/misc/xenpm.c create mode 100755 tools/misc/xenpvnetboot create mode 100755 tools/misc/xensymoops create mode 100644 tools/misc/xenwatchdogd.c create mode 100644 tools/ocaml/LICENSE create mode 100644 tools/ocaml/Makefile create mode 100644 tools/ocaml/Makefile.rules create mode 100644 tools/ocaml/common.make create mode 100644 tools/ocaml/libs/Makefile create mode 100644 tools/ocaml/libs/eventchn/META.in create mode 100644 tools/ocaml/libs/eventchn/Makefile create mode 100644 tools/ocaml/libs/eventchn/xeneventchn.ml create mode 100644 tools/ocaml/libs/eventchn/xeneventchn.mli create mode 100644 tools/ocaml/libs/eventchn/xeneventchn_stubs.c create mode 100644 tools/ocaml/libs/mmap/META.in create mode 100644 tools/ocaml/libs/mmap/Makefile create mode 100644 tools/ocaml/libs/mmap/mmap_stubs.h create mode 100644 tools/ocaml/libs/mmap/xenmmap.ml create mode 100644 tools/ocaml/libs/mmap/xenmmap.mli create mode 100644 tools/ocaml/libs/mmap/xenmmap_stubs.c create mode 100644 tools/ocaml/libs/xb/META.in create mode 100644 tools/ocaml/libs/xb/Makefile create mode 100644 tools/ocaml/libs/xb/op.ml create mode 100644 tools/ocaml/libs/xb/op.mli create mode 100644 tools/ocaml/libs/xb/packet.ml create mode 100644 tools/ocaml/libs/xb/packet.mli create mode 100644 tools/ocaml/libs/xb/partial.ml create mode 100644 tools/ocaml/libs/xb/partial.mli create mode 100644 tools/ocaml/libs/xb/xb.ml create mode 100644 tools/ocaml/libs/xb/xb.mli create mode 100644 tools/ocaml/libs/xb/xenbus_stubs.c create mode 100644 tools/ocaml/libs/xb/xs_ring.ml create mode 100644 tools/ocaml/libs/xb/xs_ring_stubs.c create mode 100644 tools/ocaml/libs/xc/META.in create mode 100644 tools/ocaml/libs/xc/Makefile create mode 100755 tools/ocaml/libs/xc/abi-check create mode 100644 tools/ocaml/libs/xc/xenctrl.ml create mode 100644 tools/ocaml/libs/xc/xenctrl.mli create mode 100644 tools/ocaml/libs/xc/xenctrl_stubs.c create mode 100644 tools/ocaml/libs/xentoollog/META.in create mode 100644 tools/ocaml/libs/xentoollog/Makefile create mode 100644 tools/ocaml/libs/xentoollog/caml_xentoollog.h create mode 100755 tools/ocaml/libs/xentoollog/genlevels.py create mode 100644 tools/ocaml/libs/xentoollog/xentoollog.ml.in create mode 100644 tools/ocaml/libs/xentoollog/xentoollog.mli.in create mode 100644 tools/ocaml/libs/xentoollog/xentoollog_stubs.c create mode 100644 tools/ocaml/libs/xl/META.in create mode 100644 tools/ocaml/libs/xl/Makefile create mode 100644 tools/ocaml/libs/xl/genwrap.py create mode 100644 tools/ocaml/libs/xl/xenlight.ml.in create mode 100644 tools/ocaml/libs/xl/xenlight.mli.in create mode 100644 tools/ocaml/libs/xl/xenlight_stubs.c create mode 100644 tools/ocaml/libs/xs/META.in create mode 100644 tools/ocaml/libs/xs/Makefile create mode 100644 tools/ocaml/libs/xs/queueop.ml create mode 100644 tools/ocaml/libs/xs/xs.ml create mode 100644 tools/ocaml/libs/xs/xs.mli create mode 100644 tools/ocaml/libs/xs/xsraw.ml create mode 100644 tools/ocaml/libs/xs/xsraw.mli create mode 100644 tools/ocaml/libs/xs/xst.ml create mode 100644 tools/ocaml/libs/xs/xst.mli create mode 100644 tools/ocaml/test/Makefile create mode 100644 tools/ocaml/test/dmesg.ml create mode 100644 tools/ocaml/test/list_domains.ml create mode 100644 tools/ocaml/test/raise_exception.ml create mode 100644 tools/ocaml/test/send_debug_keys.ml create mode 100644 tools/ocaml/test/xtl.ml create mode 100644 tools/ocaml/xenstored/Makefile create mode 100644 tools/ocaml/xenstored/config.ml create mode 100644 tools/ocaml/xenstored/connection.ml create mode 100644 tools/ocaml/xenstored/connections.ml create mode 100644 tools/ocaml/xenstored/define.ml create mode 100644 tools/ocaml/xenstored/disk.ml create mode 100644 tools/ocaml/xenstored/domain.ml create mode 100644 tools/ocaml/xenstored/domains.ml create mode 100644 tools/ocaml/xenstored/event.ml create mode 100644 tools/ocaml/xenstored/history.ml create mode 100644 tools/ocaml/xenstored/logging.ml create mode 100644 tools/ocaml/xenstored/oxenstored.conf.in create mode 100644 tools/ocaml/xenstored/packet.ml create mode 100644 tools/ocaml/xenstored/parse_arg.ml create mode 100644 tools/ocaml/xenstored/perms.ml create mode 100644 tools/ocaml/xenstored/process.ml create mode 100644 tools/ocaml/xenstored/quota.ml create mode 100644 tools/ocaml/xenstored/select.ml create mode 100644 tools/ocaml/xenstored/select.mli create mode 100644 tools/ocaml/xenstored/select_stubs.c create mode 100644 tools/ocaml/xenstored/stdext.ml create mode 100644 tools/ocaml/xenstored/store.ml create mode 100644 tools/ocaml/xenstored/symbol.ml create mode 100644 tools/ocaml/xenstored/symbol.mli create mode 100644 tools/ocaml/xenstored/syslog.ml create mode 100644 tools/ocaml/xenstored/syslog.mli create mode 100644 tools/ocaml/xenstored/syslog_stubs.c create mode 100644 tools/ocaml/xenstored/systemd.ml create mode 100644 tools/ocaml/xenstored/systemd.mli create mode 100644 tools/ocaml/xenstored/systemd_stubs.c create mode 100644 tools/ocaml/xenstored/transaction.ml create mode 100644 tools/ocaml/xenstored/trie.ml create mode 100644 tools/ocaml/xenstored/trie.mli create mode 100644 tools/ocaml/xenstored/utils.ml create mode 100644 tools/ocaml/xenstored/xenstored.ml create mode 100644 tools/pygrub/Makefile create mode 100644 tools/pygrub/README create mode 100644 tools/pygrub/examples/alpine-linux-2.3.2.extlinux create mode 100644 tools/pygrub/examples/debian-wheezy-hvm.grub2 create mode 100644 tools/pygrub/examples/fedora-16-with-xen.grub2 create mode 100644 tools/pygrub/examples/fedora-19.grub2 create mode 100644 tools/pygrub/examples/rhel-7-beta.grub2 create mode 100644 tools/pygrub/examples/ubuntu-14.04-lts.grub2 create mode 100644 tools/pygrub/setup.py create mode 100644 tools/pygrub/src/ExtLinuxConf.py create mode 100644 tools/pygrub/src/GrubConf.py create mode 100644 tools/pygrub/src/LiloConf.py create mode 100644 tools/pygrub/src/__init__.py create mode 100644 tools/pygrub/src/fsimage/fsimage.c create mode 100755 tools/pygrub/src/pygrub create mode 100644 tools/python/Makefile create mode 100755 tools/python/install-wrap create mode 100644 tools/python/pylintrc create mode 100755 tools/python/scripts/convert-legacy-stream create mode 100755 tools/python/scripts/verify-stream-v2 create mode 100644 tools/python/setup.py create mode 100644 tools/python/xen/__init__.py create mode 100644 tools/python/xen/lowlevel/__init__.py create mode 100644 tools/python/xen/lowlevel/xc/xc.c create mode 100644 tools/python/xen/lowlevel/xs/xs.c create mode 100644 tools/python/xen/migration/__init__.py create mode 100644 tools/python/xen/migration/legacy.py create mode 100644 tools/python/xen/migration/libxc.py create mode 100644 tools/python/xen/migration/libxl.py create mode 100644 tools/python/xen/migration/public.py create mode 100644 tools/python/xen/migration/tests.py create mode 100644 tools/python/xen/migration/verify.py create mode 100644 tools/python/xen/migration/xl.py create mode 100644 tools/python/xen/util.py create mode 100644 tools/tests/Makefile create mode 100644 tools/tests/cpu-policy/.gitignore create mode 100644 tools/tests/cpu-policy/Makefile create mode 100644 tools/tests/cpu-policy/test-cpu-policy.c create mode 100644 tools/tests/depriv/Makefile create mode 100644 tools/tests/depriv/depriv-fd-checker.c create mode 100644 tools/tests/mce-test/Makefile create mode 100644 tools/tests/mce-test/README create mode 100644 tools/tests/mce-test/cases/srao_llc/dom0/cases.sh create mode 100644 tools/tests/mce-test/cases/srao_llc/guest/cases.sh create mode 100644 tools/tests/mce-test/cases/srao_llc/xen/cases.sh create mode 100644 tools/tests/mce-test/cases/srao_mem/dom0/cases.sh create mode 100644 tools/tests/mce-test/cases/srao_mem/guest/cases.sh create mode 100644 tools/tests/mce-test/cases/srao_mem/xen/cases.sh create mode 100644 tools/tests/mce-test/cases/ucna_llc/dom0/cases.sh create mode 100644 tools/tests/mce-test/cases/ucna_llc/guest/cases.sh create mode 100644 tools/tests/mce-test/cases/ucna_llc/xen/cases.sh create mode 100644 tools/tests/mce-test/config/setup.conf create mode 100644 tools/tests/mce-test/lib/xen-mceinj-tool.sh create mode 100644 tools/tests/mce-test/tools/Makefile create mode 100644 tools/tests/mce-test/tools/README create mode 100644 tools/tests/mce-test/tools/xen-mceinj.c create mode 100644 tools/tests/mem-sharing/Makefile create mode 100644 tools/tests/mem-sharing/memshrtool.c create mode 100644 tools/tests/run_tests.sh create mode 100644 tools/tests/utests/run_all_tests.py create mode 100644 tools/tests/vhpet/.gitignore create mode 100644 tools/tests/vhpet/Makefile create mode 100644 tools/tests/vhpet/emul.h create mode 100644 tools/tests/vhpet/main.c create mode 100644 tools/tests/vpci/Makefile create mode 100644 tools/tests/vpci/emul.h create mode 100644 tools/tests/vpci/main.c create mode 100644 tools/tests/x86_emulator/32/Makefile create mode 100644 tools/tests/x86_emulator/Makefile create mode 100644 tools/tests/x86_emulator/blowfish.c create mode 100644 tools/tests/x86_emulator/evex-disp8.c create mode 100644 tools/tests/x86_emulator/opmask.S create mode 100644 tools/tests/x86_emulator/predicates.c create mode 100644 tools/tests/x86_emulator/simd-aes.c create mode 100644 tools/tests/x86_emulator/simd-clmul.c create mode 100644 tools/tests/x86_emulator/simd-fma.c create mode 100644 tools/tests/x86_emulator/simd-gf.c create mode 100644 tools/tests/x86_emulator/simd-sg.c create mode 100644 tools/tests/x86_emulator/simd-sha.c create mode 100644 tools/tests/x86_emulator/simd.c create mode 100644 tools/tests/x86_emulator/simd.h create mode 100644 tools/tests/x86_emulator/test_x86_emulator.c create mode 100644 tools/tests/x86_emulator/testcase.mk create mode 100644 tools/tests/x86_emulator/wrappers.c create mode 100644 tools/tests/x86_emulator/x86-emulate.c create mode 100644 tools/tests/x86_emulator/x86-emulate.h create mode 100644 tools/tests/xen-access/Makefile create mode 100644 tools/tests/xen-access/xen-access.c create mode 100644 tools/tests/xenstore/Makefile create mode 100644 tools/tests/xenstore/xs-test.c create mode 100644 tools/xcutils/Makefile create mode 100644 tools/xcutils/lsevtchn.c create mode 100644 tools/xcutils/readnotes.c create mode 100644 tools/xenbackendd/Makefile create mode 100644 tools/xenbackendd/xenbackendd.c create mode 100644 tools/xenmon/COPYING create mode 100644 tools/xenmon/Makefile create mode 100644 tools/xenmon/setmask.c create mode 100644 tools/xenmon/xenbaked.c create mode 100644 tools/xenmon/xenbaked.h create mode 100644 tools/xenmon/xenmon.py create mode 100644 tools/xenpaging/Makefile create mode 100644 tools/xenpaging/file_ops.c create mode 100644 tools/xenpaging/file_ops.h create mode 100644 tools/xenpaging/pagein.c create mode 100644 tools/xenpaging/policy.h create mode 100644 tools/xenpaging/policy_default.c create mode 100644 tools/xenpaging/xenpaging.c create mode 100644 tools/xenpaging/xenpaging.h create mode 100644 tools/xenpmd/Makefile create mode 100644 tools/xenpmd/xenpmd.c create mode 100644 tools/xenstat/Makefile create mode 100644 tools/xenstat/libxenstat/COPYING create mode 100644 tools/xenstat/libxenstat/Makefile create mode 100644 tools/xenstat/libxenstat/bindings/swig/perl/.empty create mode 100644 tools/xenstat/libxenstat/bindings/swig/python/.empty create mode 100644 tools/xenstat/libxenstat/bindings/swig/xenstat.i create mode 100644 tools/xenstat/libxenstat/src/xenstat.c create mode 100644 tools/xenstat/libxenstat/src/xenstat.h create mode 100644 tools/xenstat/libxenstat/src/xenstat_freebsd.c create mode 100644 tools/xenstat/libxenstat/src/xenstat_linux.c create mode 100644 tools/xenstat/libxenstat/src/xenstat_netbsd.c create mode 100644 tools/xenstat/libxenstat/src/xenstat_priv.h create mode 100644 tools/xenstat/libxenstat/src/xenstat_qmp.c create mode 100644 tools/xenstat/libxenstat/src/xenstat_solaris.c create mode 100644 tools/xenstat/libxenstat/xenstat.pc.in create mode 100644 tools/xenstat/xentop/Makefile create mode 100644 tools/xenstat/xentop/TODO create mode 100644 tools/xenstat/xentop/xentop.c create mode 100644 tools/xenstore/.gdbinit create mode 100644 tools/xenstore/COPYING create mode 100644 tools/xenstore/Makefile create mode 100644 tools/xenstore/README create mode 100644 tools/xenstore/TODO create mode 100644 tools/xenstore/hashtable.c create mode 100644 tools/xenstore/hashtable.h create mode 100644 tools/xenstore/hashtable_private.h create mode 100644 tools/xenstore/include/compat/xs.h create mode 100644 tools/xenstore/include/compat/xs_lib.h create mode 100644 tools/xenstore/include/xenstore.h create mode 100644 tools/xenstore/include/xenstore_lib.h create mode 100644 tools/xenstore/list.h create mode 100644 tools/xenstore/talloc.c create mode 100644 tools/xenstore/talloc.h create mode 100644 tools/xenstore/talloc_guide.txt create mode 100644 tools/xenstore/tdb.c create mode 100644 tools/xenstore/tdb.h create mode 100644 tools/xenstore/utils.c create mode 100644 tools/xenstore/utils.h create mode 100644 tools/xenstore/xenstore.pc.in create mode 100644 tools/xenstore/xenstore_client.c create mode 100644 tools/xenstore/xenstore_control.c create mode 100644 tools/xenstore/xenstored_control.c create mode 100644 tools/xenstore/xenstored_control.h create mode 100644 tools/xenstore/xenstored_core.c create mode 100644 tools/xenstore/xenstored_core.h create mode 100644 tools/xenstore/xenstored_domain.c create mode 100644 tools/xenstore/xenstored_domain.h create mode 100644 tools/xenstore/xenstored_minios.c create mode 100644 tools/xenstore/xenstored_osdep.h create mode 100644 tools/xenstore/xenstored_posix.c create mode 100644 tools/xenstore/xenstored_probes.d create mode 100644 tools/xenstore/xenstored_solaris.c create mode 100644 tools/xenstore/xenstored_transaction.c create mode 100644 tools/xenstore/xenstored_transaction.h create mode 100644 tools/xenstore/xenstored_watch.c create mode 100644 tools/xenstore/xenstored_watch.h create mode 100644 tools/xenstore/xs.c create mode 100644 tools/xenstore/xs_lib.c create mode 100644 tools/xenstore/xs_tdb_dump.c create mode 100644 tools/xentrace/Makefile create mode 100644 tools/xentrace/analyze.h create mode 100644 tools/xentrace/formats create mode 100644 tools/xentrace/mread.c create mode 100644 tools/xentrace/mread.h create mode 100644 tools/xentrace/pv.h create mode 100644 tools/xentrace/setsize.c create mode 100644 tools/xentrace/xenalyze.c create mode 100644 tools/xentrace/xenctx.c create mode 100644 tools/xentrace/xentrace.c create mode 100644 tools/xentrace/xentrace_format create mode 100644 tools/xl/CODING_STYLE create mode 100644 tools/xl/Makefile create mode 100644 tools/xl/bash-completion create mode 100644 tools/xl/xl.c create mode 100644 tools/xl/xl.h create mode 100644 tools/xl/xl_block.c create mode 100644 tools/xl/xl_cdrom.c create mode 100644 tools/xl/xl_cmdtable.c create mode 100644 tools/xl/xl_console.c create mode 100644 tools/xl/xl_cpupool.c create mode 100644 tools/xl/xl_flask.c create mode 100644 tools/xl/xl_info.c create mode 100644 tools/xl/xl_mem.c create mode 100644 tools/xl/xl_migrate.c create mode 100644 tools/xl/xl_misc.c create mode 100644 tools/xl/xl_nic.c create mode 100644 tools/xl/xl_parse.c create mode 100644 tools/xl/xl_parse.h create mode 100644 tools/xl/xl_pci.c create mode 100644 tools/xl/xl_psr.c create mode 100644 tools/xl/xl_saverestore.c create mode 100644 tools/xl/xl_sched.c create mode 100644 tools/xl/xl_sxp.c create mode 100644 tools/xl/xl_usb.c create mode 100644 tools/xl/xl_utils.c create mode 100644 tools/xl/xl_utils.h create mode 100644 tools/xl/xl_vcpu.c create mode 100644 tools/xl/xl_vdispl.c create mode 100644 tools/xl/xl_vkb.c create mode 100644 tools/xl/xl_vmcontrol.c create mode 100644 tools/xl/xl_vsnd.c create mode 100644 tools/xl/xl_vtpm.c create mode 100755 version.sh create mode 100644 xen/COPYING create mode 100644 xen/Kconfig create mode 100644 xen/Kconfig.debug create mode 100644 xen/Makefile create mode 100644 xen/Rules.mk create mode 100644 xen/arch/Kconfig create mode 100644 xen/arch/arm/Kconfig create mode 100644 xen/arch/arm/Kconfig.debug create mode 100644 xen/arch/arm/Makefile create mode 100644 xen/arch/arm/README.LinuxPrimitives create mode 100644 xen/arch/arm/Rules.mk create mode 100644 xen/arch/arm/acpi/Makefile create mode 100644 xen/arch/arm/acpi/boot.c create mode 100644 xen/arch/arm/acpi/domain_build.c create mode 100644 xen/arch/arm/acpi/lib.c create mode 100644 xen/arch/arm/alternative.c create mode 100644 xen/arch/arm/arch.mk create mode 100644 xen/arch/arm/arm32/Makefile create mode 100644 xen/arch/arm/arm32/asm-offsets.c create mode 100644 xen/arch/arm/arm32/debug-8250.inc create mode 100644 xen/arch/arm/arm32/debug-exynos4210.inc create mode 100644 xen/arch/arm/arm32/debug-pl011.inc create mode 100644 xen/arch/arm/arm32/debug-scif.inc create mode 100644 xen/arch/arm/arm32/debug.S create mode 100644 xen/arch/arm/arm32/domain.c create mode 100644 xen/arch/arm/arm32/domctl.c create mode 100644 xen/arch/arm/arm32/entry.S create mode 100644 xen/arch/arm/arm32/head.S create mode 100644 xen/arch/arm/arm32/insn.c create mode 100644 xen/arch/arm/arm32/lib/Makefile create mode 100644 xen/arch/arm/arm32/lib/assembler.h create mode 100644 xen/arch/arm/arm32/lib/bitops.c create mode 100644 xen/arch/arm/arm32/lib/copy_template.S create mode 100644 xen/arch/arm/arm32/lib/div64.S create mode 100644 xen/arch/arm/arm32/lib/findbit.S create mode 100644 xen/arch/arm/arm32/lib/lib1funcs.S create mode 100644 xen/arch/arm/arm32/lib/lshrdi3.S create mode 100644 xen/arch/arm/arm32/lib/memchr.S create mode 100644 xen/arch/arm/arm32/lib/memcpy.S create mode 100644 xen/arch/arm/arm32/lib/memmove.S create mode 100644 xen/arch/arm/arm32/lib/memset.S create mode 100644 xen/arch/arm/arm32/lib/memzero.S create mode 100644 xen/arch/arm/arm32/lib/strchr.S create mode 100644 xen/arch/arm/arm32/lib/strrchr.S create mode 100644 xen/arch/arm/arm32/livepatch.c create mode 100644 xen/arch/arm/arm32/proc-caxx.c create mode 100644 xen/arch/arm/arm32/proc-v7.S create mode 100644 xen/arch/arm/arm32/smpboot.c create mode 100644 xen/arch/arm/arm32/traps.c create mode 100644 xen/arch/arm/arm32/vfp.c create mode 100644 xen/arch/arm/arm64/Makefile create mode 100644 xen/arch/arm/arm64/asm-offsets.c create mode 100644 xen/arch/arm/arm64/bpi.S create mode 100644 xen/arch/arm/arm64/cache.S create mode 100644 xen/arch/arm/arm64/debug-8250.inc create mode 100644 xen/arch/arm/arm64/debug-cadence.inc create mode 100644 xen/arch/arm/arm64/debug-meson.inc create mode 100644 xen/arch/arm/arm64/debug-mvebu.inc create mode 100644 xen/arch/arm/arm64/debug-pl011.inc create mode 100644 xen/arch/arm/arm64/debug-scif.inc create mode 100644 xen/arch/arm/arm64/debug.S create mode 100644 xen/arch/arm/arm64/domain.c create mode 100644 xen/arch/arm/arm64/domctl.c create mode 100644 xen/arch/arm/arm64/entry.S create mode 100644 xen/arch/arm/arm64/head.S create mode 100644 xen/arch/arm/arm64/insn.c create mode 100644 xen/arch/arm/arm64/lib/Makefile create mode 100644 xen/arch/arm/arm64/lib/assembler.h create mode 100644 xen/arch/arm/arm64/lib/bitops.c create mode 100644 xen/arch/arm/arm64/lib/clear_page.S create mode 100644 xen/arch/arm/arm64/lib/find_next_bit.c create mode 100644 xen/arch/arm/arm64/lib/memchr.S create mode 100644 xen/arch/arm/arm64/lib/memcmp.S create mode 100644 xen/arch/arm/arm64/lib/memcpy.S create mode 100644 xen/arch/arm/arm64/lib/memmove.S create mode 100644 xen/arch/arm/arm64/lib/memset.S create mode 100644 xen/arch/arm/arm64/lib/strchr.S create mode 100644 xen/arch/arm/arm64/lib/strcmp.S create mode 100644 xen/arch/arm/arm64/lib/strlen.S create mode 100644 xen/arch/arm/arm64/lib/strncmp.S create mode 100644 xen/arch/arm/arm64/lib/strnlen.S create mode 100644 xen/arch/arm/arm64/lib/strrchr.S create mode 100644 xen/arch/arm/arm64/livepatch.c create mode 100644 xen/arch/arm/arm64/smc.S create mode 100644 xen/arch/arm/arm64/smpboot.c create mode 100644 xen/arch/arm/arm64/traps.c create mode 100644 xen/arch/arm/arm64/vfp.c create mode 100644 xen/arch/arm/arm64/vsysreg.c create mode 100644 xen/arch/arm/bootfdt.c create mode 100644 xen/arch/arm/configs/arm32_defconfig create mode 100644 xen/arch/arm/configs/arm64_defconfig create mode 100644 xen/arch/arm/configs/tiny64_defconfig create mode 100644 xen/arch/arm/cpuerrata.c create mode 100644 xen/arch/arm/cpufeature.c create mode 100644 xen/arch/arm/decode.c create mode 100644 xen/arch/arm/decode.h create mode 100644 xen/arch/arm/device.c create mode 100644 xen/arch/arm/domain.c create mode 100644 xen/arch/arm/domain_build.c create mode 100644 xen/arch/arm/domctl.c create mode 100644 xen/arch/arm/dtb.S create mode 100644 xen/arch/arm/early_printk.c create mode 100644 xen/arch/arm/efi/Makefile create mode 100644 xen/arch/arm/efi/efi-boot.h create mode 100644 xen/arch/arm/efi/efi-dom0.c create mode 100644 xen/arch/arm/efi/runtime.h create mode 100644 xen/arch/arm/gic-v2.c create mode 100644 xen/arch/arm/gic-v3-its.c create mode 100644 xen/arch/arm/gic-v3-lpi.c create mode 100644 xen/arch/arm/gic-v3.c create mode 100644 xen/arch/arm/gic-vgic.c create mode 100644 xen/arch/arm/gic.c create mode 100644 xen/arch/arm/guest_atomics.c create mode 100644 xen/arch/arm/guest_walk.c create mode 100644 xen/arch/arm/guestcopy.c create mode 100644 xen/arch/arm/hvm.c create mode 100644 xen/arch/arm/io.c create mode 100644 xen/arch/arm/irq.c create mode 100644 xen/arch/arm/kernel.c create mode 100644 xen/arch/arm/livepatch.c create mode 100644 xen/arch/arm/mem_access.c create mode 100644 xen/arch/arm/mm.c create mode 100644 xen/arch/arm/monitor.c create mode 100644 xen/arch/arm/p2m.c create mode 100644 xen/arch/arm/percpu.c create mode 100644 xen/arch/arm/physdev.c create mode 100644 xen/arch/arm/platform.c create mode 100644 xen/arch/arm/platform_hypercall.c create mode 100644 xen/arch/arm/platforms/Kconfig create mode 100644 xen/arch/arm/platforms/Makefile create mode 100644 xen/arch/arm/platforms/brcm-raspberry-pi.c create mode 100644 xen/arch/arm/platforms/brcm.c create mode 100644 xen/arch/arm/platforms/exynos5.c create mode 100644 xen/arch/arm/platforms/midway.c create mode 100644 xen/arch/arm/platforms/omap5.c create mode 100644 xen/arch/arm/platforms/rcar2.c create mode 100644 xen/arch/arm/platforms/seattle.c create mode 100644 xen/arch/arm/platforms/sunxi.c create mode 100644 xen/arch/arm/platforms/thunderx.c create mode 100644 xen/arch/arm/platforms/vexpress.c create mode 100644 xen/arch/arm/platforms/xgene-storm.c create mode 100644 xen/arch/arm/platforms/xilinx-zynqmp-eemi.c create mode 100644 xen/arch/arm/platforms/xilinx-zynqmp.c create mode 100644 xen/arch/arm/processor.c create mode 100644 xen/arch/arm/psci.c create mode 100644 xen/arch/arm/setup.c create mode 100644 xen/arch/arm/shutdown.c create mode 100644 xen/arch/arm/smp.c create mode 100644 xen/arch/arm/smpboot.c create mode 100644 xen/arch/arm/sysctl.c create mode 100644 xen/arch/arm/tee/Kconfig create mode 100644 xen/arch/arm/tee/Makefile create mode 100644 xen/arch/arm/tee/optee.c create mode 100644 xen/arch/arm/tee/tee.c create mode 100644 xen/arch/arm/time.c create mode 100644 xen/arch/arm/traps.c create mode 100644 xen/arch/arm/vcpreg.c create mode 100644 xen/arch/arm/vgic-v2.c create mode 100644 xen/arch/arm/vgic-v3-its.c create mode 100644 xen/arch/arm/vgic-v3.c create mode 100644 xen/arch/arm/vgic.c create mode 100644 xen/arch/arm/vgic/Makefile create mode 100644 xen/arch/arm/vgic/vgic-init.c create mode 100644 xen/arch/arm/vgic/vgic-mmio-v2.c create mode 100644 xen/arch/arm/vgic/vgic-mmio.c create mode 100644 xen/arch/arm/vgic/vgic-mmio.h create mode 100644 xen/arch/arm/vgic/vgic-v2.c create mode 100644 xen/arch/arm/vgic/vgic.c create mode 100644 xen/arch/arm/vgic/vgic.h create mode 100644 xen/arch/arm/vm_event.c create mode 100644 xen/arch/arm/vpl011.c create mode 100644 xen/arch/arm/vpsci.c create mode 100644 xen/arch/arm/vsmc.c create mode 100644 xen/arch/arm/vtimer.c create mode 100644 xen/arch/arm/vuart.c create mode 100644 xen/arch/arm/vuart.h create mode 100644 xen/arch/arm/xen.lds.S create mode 100644 xen/arch/x86/Kconfig create mode 100644 xen/arch/x86/Kconfig.debug create mode 100644 xen/arch/x86/Makefile create mode 100644 xen/arch/x86/Rules.mk create mode 100644 xen/arch/x86/acpi/Makefile create mode 100644 xen/arch/x86/acpi/boot.c create mode 100644 xen/arch/x86/acpi/cpu_idle.c create mode 100644 xen/arch/x86/acpi/cpufreq/Makefile create mode 100644 xen/arch/x86/acpi/cpufreq/cpufreq.c create mode 100644 xen/arch/x86/acpi/cpufreq/powernow.c create mode 100644 xen/arch/x86/acpi/cpuidle_menu.c create mode 100644 xen/arch/x86/acpi/lib.c create mode 100644 xen/arch/x86/acpi/power.c create mode 100644 xen/arch/x86/acpi/wakeup_prot.S create mode 100644 xen/arch/x86/alternative.c create mode 100644 xen/arch/x86/apic.c create mode 100644 xen/arch/x86/arch.mk create mode 100644 xen/arch/x86/asm-macros.c create mode 100644 xen/arch/x86/bitops.c create mode 100644 xen/arch/x86/boot/Makefile create mode 100644 xen/arch/x86/boot/build32.lds create mode 100644 xen/arch/x86/boot/build32.mk create mode 100644 xen/arch/x86/boot/cmdline.c create mode 100644 xen/arch/x86/boot/defs.h create mode 100644 xen/arch/x86/boot/edd.S create mode 100644 xen/arch/x86/boot/head.S create mode 100644 xen/arch/x86/boot/mem.S create mode 100644 xen/arch/x86/boot/mkelf32.c create mode 100644 xen/arch/x86/boot/reloc.c create mode 100644 xen/arch/x86/boot/trampoline.S create mode 100644 xen/arch/x86/boot/video.S create mode 100644 xen/arch/x86/boot/video.h create mode 100644 xen/arch/x86/boot/wakeup.S create mode 100644 xen/arch/x86/boot/x86_64.S create mode 100644 xen/arch/x86/bzimage.c create mode 100644 xen/arch/x86/clear_page.S create mode 100644 xen/arch/x86/compat.c create mode 100644 xen/arch/x86/configs/pvshim_defconfig create mode 100644 xen/arch/x86/configs/x86_32_defconfig create mode 100644 xen/arch/x86/configs/x86_64_defconfig create mode 100644 xen/arch/x86/copy_page.S create mode 100644 xen/arch/x86/cpu/Makefile create mode 100644 xen/arch/x86/cpu/amd.c create mode 100644 xen/arch/x86/cpu/centaur.c create mode 100644 xen/arch/x86/cpu/common.c create mode 100644 xen/arch/x86/cpu/cpu.h create mode 100644 xen/arch/x86/cpu/hygon.c create mode 100644 xen/arch/x86/cpu/intel.c create mode 100644 xen/arch/x86/cpu/intel_cacheinfo.c create mode 100644 xen/arch/x86/cpu/mcheck/Makefile create mode 100644 xen/arch/x86/cpu/mcheck/amd_nonfatal.c create mode 100644 xen/arch/x86/cpu/mcheck/barrier.c create mode 100644 xen/arch/x86/cpu/mcheck/barrier.h create mode 100644 xen/arch/x86/cpu/mcheck/mcaction.c create mode 100644 xen/arch/x86/cpu/mcheck/mcaction.h create mode 100644 xen/arch/x86/cpu/mcheck/mce-apei.c create mode 100644 xen/arch/x86/cpu/mcheck/mce.c create mode 100644 xen/arch/x86/cpu/mcheck/mce.h create mode 100644 xen/arch/x86/cpu/mcheck/mce_amd.c create mode 100644 xen/arch/x86/cpu/mcheck/mce_amd.h create mode 100644 xen/arch/x86/cpu/mcheck/mce_intel.c create mode 100644 xen/arch/x86/cpu/mcheck/mctelem.c create mode 100644 xen/arch/x86/cpu/mcheck/mctelem.h create mode 100644 xen/arch/x86/cpu/mcheck/non-fatal.c create mode 100644 xen/arch/x86/cpu/mcheck/util.c create mode 100644 xen/arch/x86/cpu/mcheck/util.h create mode 100644 xen/arch/x86/cpu/mcheck/vmce.c create mode 100644 xen/arch/x86/cpu/mcheck/vmce.h create mode 100644 xen/arch/x86/cpu/mcheck/x86_mca.h create mode 100644 xen/arch/x86/cpu/microcode/Makefile create mode 100644 xen/arch/x86/cpu/microcode/amd.c create mode 100644 xen/arch/x86/cpu/microcode/core.c create mode 100644 xen/arch/x86/cpu/microcode/intel.c create mode 100644 xen/arch/x86/cpu/microcode/private.h create mode 100644 xen/arch/x86/cpu/mtrr/Makefile create mode 100644 xen/arch/x86/cpu/mtrr/generic.c create mode 100644 xen/arch/x86/cpu/mtrr/main.c create mode 100644 xen/arch/x86/cpu/mtrr/mtrr.h create mode 100644 xen/arch/x86/cpu/mwait-idle.c create mode 100644 xen/arch/x86/cpu/shanghai.c create mode 100644 xen/arch/x86/cpu/vpmu.c create mode 100644 xen/arch/x86/cpu/vpmu_amd.c create mode 100644 xen/arch/x86/cpu/vpmu_intel.c create mode 100644 xen/arch/x86/cpuid.c create mode 100644 xen/arch/x86/crash.c create mode 100644 xen/arch/x86/debug.c create mode 100644 xen/arch/x86/delay.c create mode 100644 xen/arch/x86/desc.c create mode 100644 xen/arch/x86/dmi_scan.c create mode 100644 xen/arch/x86/dom0_build.c create mode 100644 xen/arch/x86/domain.c create mode 100644 xen/arch/x86/domain_page.c create mode 100644 xen/arch/x86/domctl.c create mode 100644 xen/arch/x86/e820.c create mode 100644 xen/arch/x86/efi/Makefile create mode 100644 xen/arch/x86/efi/buildid.ihex create mode 100644 xen/arch/x86/efi/check.c create mode 100644 xen/arch/x86/efi/efi-boot.h create mode 100644 xen/arch/x86/efi/mkreloc.c create mode 100644 xen/arch/x86/efi/relocs-dummy.S create mode 100644 xen/arch/x86/efi/runtime.h create mode 100644 xen/arch/x86/efi/stub.c create mode 100644 xen/arch/x86/emul-i8254.c create mode 100644 xen/arch/x86/extable.c create mode 100644 xen/arch/x86/flushtlb.c create mode 100644 xen/arch/x86/gdbstub.c create mode 100644 xen/arch/x86/genapic/Makefile create mode 100644 xen/arch/x86/genapic/bigsmp.c create mode 100644 xen/arch/x86/genapic/default.c create mode 100644 xen/arch/x86/genapic/delivery.c create mode 100644 xen/arch/x86/genapic/probe.c create mode 100644 xen/arch/x86/genapic/x2apic.c create mode 100644 xen/arch/x86/guest/Makefile create mode 100644 xen/arch/x86/guest/hyperv/Makefile create mode 100644 xen/arch/x86/guest/hyperv/hyperv.c create mode 100644 xen/arch/x86/guest/hyperv/private.h create mode 100644 xen/arch/x86/guest/hyperv/tlb.c create mode 100644 xen/arch/x86/guest/hyperv/util.c create mode 100644 xen/arch/x86/guest/hypervisor.c create mode 100644 xen/arch/x86/guest/xen/Makefile create mode 100644 xen/arch/x86/guest/xen/hypercall_page.S create mode 100644 xen/arch/x86/guest/xen/pvh-boot.c create mode 100644 xen/arch/x86/guest/xen/xen.c create mode 100644 xen/arch/x86/hpet.c create mode 100644 xen/arch/x86/hvm/Makefile create mode 100644 xen/arch/x86/hvm/asid.c create mode 100644 xen/arch/x86/hvm/dm.c create mode 100644 xen/arch/x86/hvm/dom0_build.c create mode 100644 xen/arch/x86/hvm/domain.c create mode 100644 xen/arch/x86/hvm/emulate.c create mode 100644 xen/arch/x86/hvm/grant_table.c create mode 100644 xen/arch/x86/hvm/hpet.c create mode 100644 xen/arch/x86/hvm/hvm.c create mode 100644 xen/arch/x86/hvm/hypercall.c create mode 100644 xen/arch/x86/hvm/intercept.c create mode 100644 xen/arch/x86/hvm/io.c create mode 100644 xen/arch/x86/hvm/ioreq.c create mode 100644 xen/arch/x86/hvm/irq.c create mode 100644 xen/arch/x86/hvm/monitor.c create mode 100644 xen/arch/x86/hvm/mtrr.c create mode 100644 xen/arch/x86/hvm/nestedhvm.c create mode 100644 xen/arch/x86/hvm/pmtimer.c create mode 100644 xen/arch/x86/hvm/quirks.c create mode 100644 xen/arch/x86/hvm/rtc.c create mode 100644 xen/arch/x86/hvm/save.c create mode 100644 xen/arch/x86/hvm/stdvga.c create mode 100644 xen/arch/x86/hvm/svm/Makefile create mode 100644 xen/arch/x86/hvm/svm/asid.c create mode 100644 xen/arch/x86/hvm/svm/emulate.c create mode 100644 xen/arch/x86/hvm/svm/entry.S create mode 100644 xen/arch/x86/hvm/svm/intr.c create mode 100644 xen/arch/x86/hvm/svm/nestedsvm.c create mode 100644 xen/arch/x86/hvm/svm/svm.c create mode 100644 xen/arch/x86/hvm/svm/svmdebug.c create mode 100644 xen/arch/x86/hvm/svm/vmcb.c create mode 100644 xen/arch/x86/hvm/vioapic.c create mode 100644 xen/arch/x86/hvm/viridian/Makefile create mode 100644 xen/arch/x86/hvm/viridian/private.h create mode 100644 xen/arch/x86/hvm/viridian/synic.c create mode 100644 xen/arch/x86/hvm/viridian/time.c create mode 100644 xen/arch/x86/hvm/viridian/viridian.c create mode 100644 xen/arch/x86/hvm/vlapic.c create mode 100644 xen/arch/x86/hvm/vm_event.c create mode 100644 xen/arch/x86/hvm/vmsi.c create mode 100644 xen/arch/x86/hvm/vmx/Makefile create mode 100644 xen/arch/x86/hvm/vmx/entry.S create mode 100644 xen/arch/x86/hvm/vmx/intr.c create mode 100644 xen/arch/x86/hvm/vmx/realmode.c create mode 100644 xen/arch/x86/hvm/vmx/vmcs.c create mode 100644 xen/arch/x86/hvm/vmx/vmx.c create mode 100644 xen/arch/x86/hvm/vmx/vvmx.c create mode 100644 xen/arch/x86/hvm/vpic.c create mode 100644 xen/arch/x86/hvm/vpt.c create mode 100644 xen/arch/x86/hypercall.c create mode 100644 xen/arch/x86/i387.c create mode 100644 xen/arch/x86/i8259.c create mode 100644 xen/arch/x86/indirect-thunk.S create mode 100644 xen/arch/x86/io_apic.c create mode 100644 xen/arch/x86/ioport_emulate.c create mode 100644 xen/arch/x86/irq.c create mode 100644 xen/arch/x86/livepatch.c create mode 100644 xen/arch/x86/machine_kexec.c create mode 100644 xen/arch/x86/mm.c create mode 100644 xen/arch/x86/mm/Makefile create mode 100644 xen/arch/x86/mm/altp2m.c create mode 100644 xen/arch/x86/mm/guest_walk.c create mode 100644 xen/arch/x86/mm/hap/Makefile create mode 100644 xen/arch/x86/mm/hap/guest_walk.c create mode 100644 xen/arch/x86/mm/hap/hap.c create mode 100644 xen/arch/x86/mm/hap/nested_ept.c create mode 100644 xen/arch/x86/mm/hap/nested_hap.c create mode 100644 xen/arch/x86/mm/hap/private.h create mode 100644 xen/arch/x86/mm/mem_access.c create mode 100644 xen/arch/x86/mm/mem_paging.c create mode 100644 xen/arch/x86/mm/mem_sharing.c create mode 100644 xen/arch/x86/mm/mm-locks.h create mode 100644 xen/arch/x86/mm/p2m-ept.c create mode 100644 xen/arch/x86/mm/p2m-pod.c create mode 100644 xen/arch/x86/mm/p2m-pt.c create mode 100644 xen/arch/x86/mm/p2m.c create mode 100644 xen/arch/x86/mm/paging.c create mode 100644 xen/arch/x86/mm/shadow/Makefile create mode 100644 xen/arch/x86/mm/shadow/common.c create mode 100644 xen/arch/x86/mm/shadow/hvm.c create mode 100644 xen/arch/x86/mm/shadow/multi.c create mode 100644 xen/arch/x86/mm/shadow/multi.h create mode 100644 xen/arch/x86/mm/shadow/none.c create mode 100644 xen/arch/x86/mm/shadow/private.h create mode 100644 xen/arch/x86/mm/shadow/pv.c create mode 100644 xen/arch/x86/mm/shadow/types.h create mode 100644 xen/arch/x86/monitor.c create mode 100644 xen/arch/x86/mpparse.c create mode 100644 xen/arch/x86/msi.c create mode 100644 xen/arch/x86/msr.c create mode 100644 xen/arch/x86/nmi.c create mode 100644 xen/arch/x86/numa.c create mode 100644 xen/arch/x86/oprofile/Makefile create mode 100644 xen/arch/x86/oprofile/backtrace.c create mode 100644 xen/arch/x86/oprofile/nmi_int.c create mode 100644 xen/arch/x86/oprofile/op_counter.h create mode 100644 xen/arch/x86/oprofile/op_model_athlon.c create mode 100644 xen/arch/x86/oprofile/op_model_p4.c create mode 100644 xen/arch/x86/oprofile/op_model_ppro.c create mode 100644 xen/arch/x86/oprofile/op_x86_model.h create mode 100644 xen/arch/x86/oprofile/xenoprof.c create mode 100644 xen/arch/x86/pci.c create mode 100644 xen/arch/x86/percpu.c create mode 100644 xen/arch/x86/physdev.c create mode 100644 xen/arch/x86/platform_hypercall.c create mode 100644 xen/arch/x86/psr.c create mode 100644 xen/arch/x86/pv/Makefile create mode 100644 xen/arch/x86/pv/callback.c create mode 100644 xen/arch/x86/pv/descriptor-tables.c create mode 100644 xen/arch/x86/pv/dom0_build.c create mode 100644 xen/arch/x86/pv/domain.c create mode 100644 xen/arch/x86/pv/emul-gate-op.c create mode 100644 xen/arch/x86/pv/emul-inv-op.c create mode 100644 xen/arch/x86/pv/emul-priv-op.c create mode 100644 xen/arch/x86/pv/emulate.c create mode 100644 xen/arch/x86/pv/emulate.h create mode 100644 xen/arch/x86/pv/gpr_switch.S create mode 100644 xen/arch/x86/pv/grant_table.c create mode 100644 xen/arch/x86/pv/hypercall.c create mode 100644 xen/arch/x86/pv/iret.c create mode 100644 xen/arch/x86/pv/misc-hypercalls.c create mode 100644 xen/arch/x86/pv/mm.c create mode 100644 xen/arch/x86/pv/mm.h create mode 100644 xen/arch/x86/pv/ro-page-fault.c create mode 100644 xen/arch/x86/pv/shim.c create mode 100644 xen/arch/x86/pv/traps.c create mode 100644 xen/arch/x86/setup.c create mode 100644 xen/arch/x86/shutdown.c create mode 100644 xen/arch/x86/smp.c create mode 100644 xen/arch/x86/smpboot.c create mode 100644 xen/arch/x86/spec_ctrl.c create mode 100644 xen/arch/x86/srat.c create mode 100644 xen/arch/x86/string.c create mode 100644 xen/arch/x86/sysctl.c create mode 100644 xen/arch/x86/tboot.c create mode 100644 xen/arch/x86/time.c create mode 100644 xen/arch/x86/trace.c create mode 100644 xen/arch/x86/traps.c create mode 100644 xen/arch/x86/tsx.c create mode 100644 xen/arch/x86/usercopy.c create mode 100644 xen/arch/x86/vm_event.c create mode 100644 xen/arch/x86/x86_64/Makefile create mode 100644 xen/arch/x86/x86_64/acpi_mmcfg.c create mode 100644 xen/arch/x86/x86_64/asm-offsets.c create mode 100644 xen/arch/x86/x86_64/compat.c create mode 100644 xen/arch/x86/x86_64/compat/Makefile create mode 100644 xen/arch/x86/x86_64/compat/entry.S create mode 100644 xen/arch/x86/x86_64/compat/mm.c create mode 100644 xen/arch/x86/x86_64/cpu_idle.c create mode 100644 xen/arch/x86/x86_64/cpufreq.c create mode 100644 xen/arch/x86/x86_64/domain.c create mode 100644 xen/arch/x86/x86_64/entry.S create mode 100644 xen/arch/x86/x86_64/gdbstub.c create mode 100644 xen/arch/x86/x86_64/kexec_reloc.S create mode 100644 xen/arch/x86/x86_64/machine_kexec.c create mode 100644 xen/arch/x86/x86_64/mm.c create mode 100644 xen/arch/x86/x86_64/mmconf-fam10h.c create mode 100644 xen/arch/x86/x86_64/mmconfig-shared.c create mode 100644 xen/arch/x86/x86_64/mmconfig.h create mode 100644 xen/arch/x86/x86_64/mmconfig_64.c create mode 100644 xen/arch/x86/x86_64/pci.c create mode 100644 xen/arch/x86/x86_64/physdev.c create mode 100644 xen/arch/x86/x86_64/platform_hypercall.c create mode 100644 xen/arch/x86/x86_64/traps.c create mode 100644 xen/arch/x86/x86_emulate.c create mode 100644 xen/arch/x86/x86_emulate/x86_emulate.c create mode 100644 xen/arch/x86/x86_emulate/x86_emulate.h create mode 100644 xen/arch/x86/xen.lds.S create mode 100644 xen/arch/x86/xstate.c create mode 100644 xen/common/COPYING create mode 100644 xen/common/Kconfig create mode 100644 xen/common/Makefile create mode 100644 xen/common/README.source create mode 100644 xen/common/argo.c create mode 100644 xen/common/bitmap.c create mode 100644 xen/common/bsearch.c create mode 100644 xen/common/bunzip2.c create mode 100644 xen/common/compat/domain.c create mode 100644 xen/common/compat/grant_table.c create mode 100644 xen/common/compat/kernel.c create mode 100644 xen/common/compat/memory.c create mode 100644 xen/common/compat/multicall.c create mode 100644 xen/common/compat/xenoprof.c create mode 100644 xen/common/compat/xlat.c create mode 100644 xen/common/core_parking.c create mode 100644 xen/common/coverage/Makefile create mode 100644 xen/common/coverage/coverage.c create mode 100644 xen/common/coverage/coverage.h create mode 100644 xen/common/coverage/gcc_3_4.c create mode 100644 xen/common/coverage/gcc_4_7.c create mode 100644 xen/common/coverage/gcc_4_9.c create mode 100644 xen/common/coverage/gcc_5.c create mode 100644 xen/common/coverage/gcc_7.c create mode 100644 xen/common/coverage/gcov.c create mode 100644 xen/common/coverage/gcov.h create mode 100644 xen/common/coverage/gcov_base.c create mode 100644 xen/common/coverage/llvm.c create mode 100644 xen/common/cpu.c create mode 100644 xen/common/debugtrace.c create mode 100644 xen/common/decompress.c create mode 100644 xen/common/decompress.h create mode 100644 xen/common/device_tree.c create mode 100644 xen/common/domain.c create mode 100644 xen/common/domctl.c create mode 100644 xen/common/earlycpio.c create mode 100644 xen/common/efi/boot.c create mode 100644 xen/common/efi/compat.c create mode 100644 xen/common/efi/efi.h create mode 100644 xen/common/efi/runtime.c create mode 100644 xen/common/event_2l.c create mode 100644 xen/common/event_channel.c create mode 100644 xen/common/event_fifo.c create mode 100644 xen/common/gdbstub.c create mode 100644 xen/common/grant_table.c create mode 100644 xen/common/guestcopy.c create mode 100644 xen/common/gunzip.c create mode 100644 xen/common/hypfs.c create mode 100644 xen/common/inflate.c create mode 100644 xen/common/irq.c create mode 100644 xen/common/kernel.c create mode 100644 xen/common/kexec.c create mode 100644 xen/common/keyhandler.c create mode 100644 xen/common/kimage.c create mode 100644 xen/common/lib.c create mode 100644 xen/common/libelf/COPYING create mode 100644 xen/common/libelf/Makefile create mode 100644 xen/common/libelf/README create mode 100644 xen/common/libelf/libelf-dominfo.c create mode 100644 xen/common/libelf/libelf-loader.c create mode 100644 xen/common/libelf/libelf-private.h create mode 100644 xen/common/libelf/libelf-tools.c create mode 100644 xen/common/libfdt/Makefile create mode 100644 xen/common/libfdt/Makefile.libfdt create mode 100644 xen/common/libfdt/TODO create mode 100644 xen/common/libfdt/fdt.c create mode 100644 xen/common/libfdt/fdt_empty_tree.c create mode 100644 xen/common/libfdt/fdt_ro.c create mode 100644 xen/common/libfdt/fdt_rw.c create mode 100644 xen/common/libfdt/fdt_strerror.c create mode 100644 xen/common/libfdt/fdt_sw.c create mode 100644 xen/common/libfdt/fdt_wip.c create mode 100644 xen/common/libfdt/libfdt_internal.h create mode 100644 xen/common/libfdt/version.lds create mode 100644 xen/common/list_sort.c create mode 100644 xen/common/livepatch.c create mode 100644 xen/common/livepatch_elf.c create mode 100644 xen/common/lz4/decompress.c create mode 100644 xen/common/lz4/defs.h create mode 100644 xen/common/lzo.c create mode 100644 xen/common/mem_access.c create mode 100644 xen/common/memory.c create mode 100644 xen/common/monitor.c create mode 100644 xen/common/multicall.c create mode 100644 xen/common/notifier.c create mode 100644 xen/common/page_alloc.c create mode 100644 xen/common/pdx.c create mode 100644 xen/common/perfc.c create mode 100644 xen/common/preempt.c create mode 100644 xen/common/radix-tree.c create mode 100644 xen/common/random.c create mode 100644 xen/common/rangeset.c create mode 100644 xen/common/rbtree.c create mode 100644 xen/common/rcupdate.c create mode 100644 xen/common/rwlock.c create mode 100644 xen/common/sched/Kconfig create mode 100644 xen/common/sched/Makefile create mode 100644 xen/common/sched/arinc653.c create mode 100644 xen/common/sched/compat.c create mode 100644 xen/common/sched/core.c create mode 100644 xen/common/sched/cpupool.c create mode 100644 xen/common/sched/credit.c create mode 100644 xen/common/sched/credit2.c create mode 100644 xen/common/sched/null.c create mode 100644 xen/common/sched/private.h create mode 100644 xen/common/sched/rt.c create mode 100644 xen/common/shutdown.c create mode 100644 xen/common/smp.c create mode 100644 xen/common/softirq.c create mode 100644 xen/common/sort.c create mode 100644 xen/common/spinlock.c create mode 100644 xen/common/stop_machine.c create mode 100644 xen/common/string.c create mode 100644 xen/common/symbols-dummy.c create mode 100644 xen/common/symbols.c create mode 100644 xen/common/sysctl.c create mode 100644 xen/common/tasklet.c create mode 100644 xen/common/time.c create mode 100644 xen/common/timer.c create mode 100644 xen/common/trace.c create mode 100644 xen/common/ubsan/Makefile create mode 100644 xen/common/ubsan/ubsan.c create mode 100644 xen/common/ubsan/ubsan.h create mode 100644 xen/common/unlz4.c create mode 100644 xen/common/unlzma.c create mode 100644 xen/common/unlzo.c create mode 100644 xen/common/unxz.c create mode 100644 xen/common/version.c create mode 100644 xen/common/virtual_region.c create mode 100644 xen/common/vm_event.c create mode 100644 xen/common/vmap.c create mode 100644 xen/common/vsprintf.c create mode 100644 xen/common/wait.c create mode 100644 xen/common/warning.c create mode 100644 xen/common/xenoprof.c create mode 100644 xen/common/xmalloc_tlsf.c create mode 100644 xen/common/xz/crc32.c create mode 100644 xen/common/xz/dec_bcj.c create mode 100644 xen/common/xz/dec_lzma2.c create mode 100644 xen/common/xz/dec_stream.c create mode 100644 xen/common/xz/lzma2.h create mode 100644 xen/common/xz/private.h create mode 100644 xen/common/xz/stream.h create mode 100644 xen/crypto/Makefile create mode 100644 xen/crypto/README.source create mode 100644 xen/crypto/rijndael.c create mode 100644 xen/crypto/vmac.c create mode 100644 xen/drivers/Kconfig create mode 100644 xen/drivers/Makefile create mode 100644 xen/drivers/acpi/Kconfig create mode 100644 xen/drivers/acpi/Makefile create mode 100644 xen/drivers/acpi/apei/Makefile create mode 100644 xen/drivers/acpi/apei/apei-base.c create mode 100644 xen/drivers/acpi/apei/apei-internal.h create mode 100644 xen/drivers/acpi/apei/apei-io.c create mode 100644 xen/drivers/acpi/apei/erst.c create mode 100644 xen/drivers/acpi/apei/hest.c create mode 100644 xen/drivers/acpi/hwregs.c create mode 100644 xen/drivers/acpi/numa.c create mode 100644 xen/drivers/acpi/osl.c create mode 100644 xen/drivers/acpi/pmstat.c create mode 100644 xen/drivers/acpi/reboot.c create mode 100644 xen/drivers/acpi/tables.c create mode 100644 xen/drivers/acpi/tables/Makefile create mode 100644 xen/drivers/acpi/tables/tbfadt.c create mode 100644 xen/drivers/acpi/tables/tbinstal.c create mode 100644 xen/drivers/acpi/tables/tbutils.c create mode 100644 xen/drivers/acpi/tables/tbxface.c create mode 100644 xen/drivers/acpi/tables/tbxfroot.c create mode 100644 xen/drivers/acpi/utilities/Makefile create mode 100644 xen/drivers/acpi/utilities/utglobal.c create mode 100644 xen/drivers/acpi/utilities/utmisc.c create mode 100644 xen/drivers/char/Kconfig create mode 100644 xen/drivers/char/Makefile create mode 100644 xen/drivers/char/arm-uart.c create mode 100644 xen/drivers/char/cadence-uart.c create mode 100644 xen/drivers/char/console.c create mode 100644 xen/drivers/char/consoled.c create mode 100644 xen/drivers/char/ehci-dbgp.c create mode 100644 xen/drivers/char/exynos4210-uart.c create mode 100644 xen/drivers/char/meson-uart.c create mode 100644 xen/drivers/char/mvebu-uart.c create mode 100644 xen/drivers/char/ns16550.c create mode 100644 xen/drivers/char/omap-uart.c create mode 100644 xen/drivers/char/pl011.c create mode 100644 xen/drivers/char/scif-uart.c create mode 100644 xen/drivers/char/serial.c create mode 100644 xen/drivers/char/xen_pv_console.c create mode 100644 xen/drivers/cpufreq/Kconfig create mode 100644 xen/drivers/cpufreq/Makefile create mode 100644 xen/drivers/cpufreq/cpufreq.c create mode 100644 xen/drivers/cpufreq/cpufreq_misc_governors.c create mode 100644 xen/drivers/cpufreq/cpufreq_ondemand.c create mode 100644 xen/drivers/cpufreq/utility.c create mode 100644 xen/drivers/passthrough/Kconfig create mode 100644 xen/drivers/passthrough/Makefile create mode 100644 xen/drivers/passthrough/amd/Makefile create mode 100644 xen/drivers/passthrough/amd/iommu-defs.h create mode 100644 xen/drivers/passthrough/amd/iommu.h create mode 100644 xen/drivers/passthrough/amd/iommu_acpi.c create mode 100644 xen/drivers/passthrough/amd/iommu_cmd.c create mode 100644 xen/drivers/passthrough/amd/iommu_detect.c create mode 100644 xen/drivers/passthrough/amd/iommu_guest.c create mode 100644 xen/drivers/passthrough/amd/iommu_init.c create mode 100644 xen/drivers/passthrough/amd/iommu_intr.c create mode 100644 xen/drivers/passthrough/amd/iommu_map.c create mode 100644 xen/drivers/passthrough/amd/pci_amd_iommu.c create mode 100644 xen/drivers/passthrough/arm/Makefile create mode 100644 xen/drivers/passthrough/arm/iommu.c create mode 100644 xen/drivers/passthrough/arm/iommu_fwspec.c create mode 100644 xen/drivers/passthrough/arm/iommu_helpers.c create mode 100644 xen/drivers/passthrough/arm/ipmmu-vmsa.c create mode 100644 xen/drivers/passthrough/arm/smmu.c create mode 100644 xen/drivers/passthrough/ats.h create mode 100644 xen/drivers/passthrough/device_tree.c create mode 100644 xen/drivers/passthrough/io.c create mode 100644 xen/drivers/passthrough/iommu.c create mode 100644 xen/drivers/passthrough/pci.c create mode 100644 xen/drivers/passthrough/vtd/Makefile create mode 100644 xen/drivers/passthrough/vtd/dmar.c create mode 100644 xen/drivers/passthrough/vtd/dmar.h create mode 100644 xen/drivers/passthrough/vtd/extern.h create mode 100644 xen/drivers/passthrough/vtd/intremap.c create mode 100644 xen/drivers/passthrough/vtd/iommu.c create mode 100644 xen/drivers/passthrough/vtd/iommu.h create mode 100644 xen/drivers/passthrough/vtd/qinval.c create mode 100644 xen/drivers/passthrough/vtd/quirks.c create mode 100644 xen/drivers/passthrough/vtd/utils.c create mode 100644 xen/drivers/passthrough/vtd/vtd.h create mode 100644 xen/drivers/passthrough/vtd/x86/Makefile create mode 100644 xen/drivers/passthrough/vtd/x86/ats.c create mode 100644 xen/drivers/passthrough/vtd/x86/hvm.c create mode 100644 xen/drivers/passthrough/vtd/x86/vtd.c create mode 100644 xen/drivers/passthrough/x86/Makefile create mode 100644 xen/drivers/passthrough/x86/ats.c create mode 100644 xen/drivers/passthrough/x86/iommu.c create mode 100644 xen/drivers/pci/Kconfig create mode 100644 xen/drivers/pci/Makefile create mode 100644 xen/drivers/pci/pci.c create mode 100644 xen/drivers/video/Kconfig create mode 100644 xen/drivers/video/Makefile create mode 100644 xen/drivers/video/font.h create mode 100644 xen/drivers/video/font_8x14.c create mode 100644 xen/drivers/video/font_8x16.c create mode 100644 xen/drivers/video/font_8x8.c create mode 100644 xen/drivers/video/lfb.c create mode 100644 xen/drivers/video/lfb.h create mode 100644 xen/drivers/video/modelines.h create mode 100644 xen/drivers/video/vesa.c create mode 100644 xen/drivers/video/vga.c create mode 100644 xen/drivers/vpci/Makefile create mode 100644 xen/drivers/vpci/header.c create mode 100644 xen/drivers/vpci/msi.c create mode 100644 xen/drivers/vpci/msix.c create mode 100644 xen/drivers/vpci/vpci.c create mode 100644 xen/include/Makefile create mode 100644 xen/include/acpi/acconfig.h create mode 100644 xen/include/acpi/acexcep.h create mode 100644 xen/include/acpi/acglobal.h create mode 100644 xen/include/acpi/achware.h create mode 100644 xen/include/acpi/aclocal.h create mode 100644 xen/include/acpi/acmacros.h create mode 100644 xen/include/acpi/acnames.h create mode 100644 xen/include/acpi/acoutput.h create mode 100644 xen/include/acpi/acpi.h create mode 100644 xen/include/acpi/acpiosxf.h create mode 100644 xen/include/acpi/acpixf.h create mode 100644 xen/include/acpi/actables.h create mode 100644 xen/include/acpi/actbl.h create mode 100644 xen/include/acpi/actbl1.h create mode 100644 xen/include/acpi/actbl2.h create mode 100644 xen/include/acpi/actbl3.h create mode 100644 xen/include/acpi/actypes.h create mode 100644 xen/include/acpi/acutils.h create mode 100644 xen/include/acpi/apei.h create mode 100644 xen/include/acpi/cpufreq/cpufreq.h create mode 100644 xen/include/acpi/cpufreq/processor_perf.h create mode 100644 xen/include/acpi/pdc_intel.h create mode 100644 xen/include/acpi/platform/acenv.h create mode 100644 xen/include/acpi/platform/acgcc.h create mode 100644 xen/include/acpi/platform/aclinux.h create mode 100644 xen/include/asm-arm/acpi.h create mode 100644 xen/include/asm-arm/alternative.h create mode 100644 xen/include/asm-arm/altp2m.h create mode 100644 xen/include/asm-arm/arm32/atomic.h create mode 100644 xen/include/asm-arm/arm32/bitops.h create mode 100644 xen/include/asm-arm/arm32/bug.h create mode 100644 xen/include/asm-arm/arm32/cmpxchg.h create mode 100644 xen/include/asm-arm/arm32/flushtlb.h create mode 100644 xen/include/asm-arm/arm32/insn.h create mode 100644 xen/include/asm-arm/arm32/io.h create mode 100644 xen/include/asm-arm/arm32/macros.h create mode 100644 xen/include/asm-arm/arm32/mm.h create mode 100644 xen/include/asm-arm/arm32/page.h create mode 100644 xen/include/asm-arm/arm32/processor.h create mode 100644 xen/include/asm-arm/arm32/sysregs.h create mode 100644 xen/include/asm-arm/arm32/system.h create mode 100644 xen/include/asm-arm/arm32/traps.h create mode 100644 xen/include/asm-arm/arm32/vfp.h create mode 100644 xen/include/asm-arm/arm64/atomic.h create mode 100644 xen/include/asm-arm/arm64/bitops.h create mode 100644 xen/include/asm-arm/arm64/brk.h create mode 100644 xen/include/asm-arm/arm64/bug.h create mode 100644 xen/include/asm-arm/arm64/cmpxchg.h create mode 100644 xen/include/asm-arm/arm64/efibind.h create mode 100644 xen/include/asm-arm/arm64/flushtlb.h create mode 100644 xen/include/asm-arm/arm64/hsr.h create mode 100644 xen/include/asm-arm/arm64/insn.h create mode 100644 xen/include/asm-arm/arm64/io.h create mode 100644 xen/include/asm-arm/arm64/macros.h create mode 100644 xen/include/asm-arm/arm64/mm.h create mode 100644 xen/include/asm-arm/arm64/page.h create mode 100644 xen/include/asm-arm/arm64/processor.h create mode 100644 xen/include/asm-arm/arm64/sysregs.h create mode 100644 xen/include/asm-arm/arm64/system.h create mode 100644 xen/include/asm-arm/arm64/traps.h create mode 100644 xen/include/asm-arm/arm64/vfp.h create mode 100644 xen/include/asm-arm/asm_defns.h create mode 100644 xen/include/asm-arm/atomic.h create mode 100644 xen/include/asm-arm/bitops.h create mode 100644 xen/include/asm-arm/bug.h create mode 100644 xen/include/asm-arm/byteorder.h create mode 100644 xen/include/asm-arm/cache.h create mode 100644 xen/include/asm-arm/cadence-uart.h create mode 100644 xen/include/asm-arm/config.h create mode 100644 xen/include/asm-arm/cpregs.h create mode 100644 xen/include/asm-arm/cpuerrata.h create mode 100644 xen/include/asm-arm/cpufeature.h create mode 100644 xen/include/asm-arm/current.h create mode 100644 xen/include/asm-arm/debugger.h create mode 100644 xen/include/asm-arm/delay.h create mode 100644 xen/include/asm-arm/desc.h create mode 100644 xen/include/asm-arm/device.h create mode 100644 xen/include/asm-arm/div64.h create mode 100644 xen/include/asm-arm/domain.h create mode 100644 xen/include/asm-arm/domain_build.h create mode 100644 xen/include/asm-arm/early_printk.h create mode 100644 xen/include/asm-arm/efibind.h create mode 100644 xen/include/asm-arm/elf.h create mode 100644 xen/include/asm-arm/event.h create mode 100644 xen/include/asm-arm/exynos4210-uart.h create mode 100644 xen/include/asm-arm/flushtlb.h create mode 100644 xen/include/asm-arm/gic.h create mode 100644 xen/include/asm-arm/gic_v3_defs.h create mode 100644 xen/include/asm-arm/gic_v3_its.h create mode 100644 xen/include/asm-arm/grant_table.h create mode 100644 xen/include/asm-arm/guest_access.h create mode 100644 xen/include/asm-arm/guest_atomics.h create mode 100644 xen/include/asm-arm/guest_walk.h create mode 100644 xen/include/asm-arm/hardirq.h create mode 100644 xen/include/asm-arm/hsr.h create mode 100644 xen/include/asm-arm/hypercall.h create mode 100644 xen/include/asm-arm/init.h create mode 100644 xen/include/asm-arm/insn.h create mode 100644 xen/include/asm-arm/io.h create mode 100644 xen/include/asm-arm/iocap.h create mode 100644 xen/include/asm-arm/iommu.h create mode 100644 xen/include/asm-arm/iommu_fwspec.h create mode 100644 xen/include/asm-arm/irq.h create mode 100644 xen/include/asm-arm/kernel.h create mode 100644 xen/include/asm-arm/livepatch.h create mode 100644 xen/include/asm-arm/lpae.h create mode 100644 xen/include/asm-arm/macros.h create mode 100644 xen/include/asm-arm/mem_access.h create mode 100644 xen/include/asm-arm/mm.h create mode 100644 xen/include/asm-arm/mmio.h create mode 100644 xen/include/asm-arm/monitor.h create mode 100644 xen/include/asm-arm/new_vgic.h create mode 100644 xen/include/asm-arm/nospec.h create mode 100644 xen/include/asm-arm/numa.h create mode 100644 xen/include/asm-arm/p2m.h create mode 100644 xen/include/asm-arm/page.h create mode 100644 xen/include/asm-arm/paging.h create mode 100644 xen/include/asm-arm/pci.h create mode 100644 xen/include/asm-arm/percpu.h create mode 100644 xen/include/asm-arm/perfc.h create mode 100644 xen/include/asm-arm/perfc_defn.h create mode 100644 xen/include/asm-arm/pl011-uart.h create mode 100644 xen/include/asm-arm/platform.h create mode 100644 xen/include/asm-arm/platforms/exynos5.h create mode 100644 xen/include/asm-arm/platforms/midway.h create mode 100644 xen/include/asm-arm/platforms/omap5.h create mode 100644 xen/include/asm-arm/platforms/vexpress.h create mode 100644 xen/include/asm-arm/platforms/xilinx-zynqmp-eemi.h create mode 100644 xen/include/asm-arm/processor.h create mode 100644 xen/include/asm-arm/procinfo.h create mode 100644 xen/include/asm-arm/psci.h create mode 100644 xen/include/asm-arm/random.h create mode 100644 xen/include/asm-arm/regs.h create mode 100644 xen/include/asm-arm/scif-uart.h create mode 100644 xen/include/asm-arm/setup.h create mode 100644 xen/include/asm-arm/short-desc.h create mode 100644 xen/include/asm-arm/smccc.h create mode 100644 xen/include/asm-arm/smp.h create mode 100644 xen/include/asm-arm/softirq.h create mode 100644 xen/include/asm-arm/spinlock.h create mode 100644 xen/include/asm-arm/string.h create mode 100644 xen/include/asm-arm/sysregs.h create mode 100644 xen/include/asm-arm/system.h create mode 100644 xen/include/asm-arm/tee/optee_msg.h create mode 100644 xen/include/asm-arm/tee/optee_rpc_cmd.h create mode 100644 xen/include/asm-arm/tee/optee_smc.h create mode 100644 xen/include/asm-arm/tee/tee.h create mode 100644 xen/include/asm-arm/time.h create mode 100644 xen/include/asm-arm/trace.h create mode 100644 xen/include/asm-arm/traps.h create mode 100644 xen/include/asm-arm/types.h create mode 100644 xen/include/asm-arm/vfp.h create mode 100644 xen/include/asm-arm/vgic-emul.h create mode 100644 xen/include/asm-arm/vgic.h create mode 100644 xen/include/asm-arm/vm_event.h create mode 100644 xen/include/asm-arm/vpl011.h create mode 100644 xen/include/asm-arm/vpsci.h create mode 100644 xen/include/asm-arm/vreg.h create mode 100644 xen/include/asm-arm/vtimer.h create mode 100644 xen/include/asm-arm/xenoprof.h create mode 100644 xen/include/asm-x86/acpi.h create mode 100644 xen/include/asm-x86/alternative-asm.h create mode 100644 xen/include/asm-x86/alternative.h create mode 100644 xen/include/asm-x86/altp2m.h create mode 100644 xen/include/asm-x86/amd.h create mode 100644 xen/include/asm-x86/apic.h create mode 100644 xen/include/asm-x86/apicdef.h create mode 100644 xen/include/asm-x86/asm_defns.h create mode 100644 xen/include/asm-x86/atomic.h create mode 100644 xen/include/asm-x86/bitops.h create mode 100644 xen/include/asm-x86/bug.h create mode 100644 xen/include/asm-x86/byteorder.h create mode 100644 xen/include/asm-x86/bzimage.h create mode 100644 xen/include/asm-x86/cache.h create mode 100644 xen/include/asm-x86/compat.h create mode 100644 xen/include/asm-x86/config.h create mode 100644 xen/include/asm-x86/cpufeature.h create mode 100644 xen/include/asm-x86/cpufeatures.h create mode 100644 xen/include/asm-x86/cpufeatureset.h create mode 100644 xen/include/asm-x86/cpuid.h create mode 100644 xen/include/asm-x86/cpuidle.h create mode 100644 xen/include/asm-x86/current.h create mode 100644 xen/include/asm-x86/debugger.h create mode 100644 xen/include/asm-x86/debugreg.h create mode 100644 xen/include/asm-x86/delay.h create mode 100644 xen/include/asm-x86/desc.h create mode 100644 xen/include/asm-x86/device.h create mode 100644 xen/include/asm-x86/div64.h create mode 100644 xen/include/asm-x86/dom0_build.h create mode 100644 xen/include/asm-x86/domain.h create mode 100644 xen/include/asm-x86/e820.h create mode 100644 xen/include/asm-x86/edd.h create mode 100644 xen/include/asm-x86/efibind.h create mode 100644 xen/include/asm-x86/elf.h create mode 100644 xen/include/asm-x86/endbr.h create mode 100644 xen/include/asm-x86/event.h create mode 100644 xen/include/asm-x86/fixmap.h create mode 100644 xen/include/asm-x86/flushtlb.h create mode 100644 xen/include/asm-x86/genapic.h create mode 100644 xen/include/asm-x86/grant_table.h create mode 100644 xen/include/asm-x86/guest.h create mode 100644 xen/include/asm-x86/guest/hyperv-hcall.h create mode 100644 xen/include/asm-x86/guest/hyperv-tlfs.h create mode 100644 xen/include/asm-x86/guest/hyperv.h create mode 100644 xen/include/asm-x86/guest/hypervisor.h create mode 100644 xen/include/asm-x86/guest/pvh-boot.h create mode 100644 xen/include/asm-x86/guest/xen-hcall.h create mode 100644 xen/include/asm-x86/guest/xen.h create mode 100644 xen/include/asm-x86/guest_access.h create mode 100644 xen/include/asm-x86/guest_atomics.h create mode 100644 xen/include/asm-x86/guest_pt.h create mode 100644 xen/include/asm-x86/hap.h create mode 100644 xen/include/asm-x86/hardirq.h create mode 100644 xen/include/asm-x86/hpet.h create mode 100644 xen/include/asm-x86/hvm/asid.h create mode 100644 xen/include/asm-x86/hvm/cacheattr.h create mode 100644 xen/include/asm-x86/hvm/domain.h create mode 100644 xen/include/asm-x86/hvm/emulate.h create mode 100644 xen/include/asm-x86/hvm/grant_table.h create mode 100644 xen/include/asm-x86/hvm/guest_access.h create mode 100644 xen/include/asm-x86/hvm/hvm.h create mode 100644 xen/include/asm-x86/hvm/io.h create mode 100644 xen/include/asm-x86/hvm/ioreq.h create mode 100644 xen/include/asm-x86/hvm/irq.h create mode 100644 xen/include/asm-x86/hvm/monitor.h create mode 100644 xen/include/asm-x86/hvm/nestedhvm.h create mode 100644 xen/include/asm-x86/hvm/save.h create mode 100644 xen/include/asm-x86/hvm/support.h create mode 100644 xen/include/asm-x86/hvm/svm/asid.h create mode 100644 xen/include/asm-x86/hvm/svm/emulate.h create mode 100644 xen/include/asm-x86/hvm/svm/intr.h create mode 100644 xen/include/asm-x86/hvm/svm/nestedsvm.h create mode 100644 xen/include/asm-x86/hvm/svm/svm.h create mode 100644 xen/include/asm-x86/hvm/svm/svmdebug.h create mode 100644 xen/include/asm-x86/hvm/svm/vmcb.h create mode 100644 xen/include/asm-x86/hvm/trace.h create mode 100644 xen/include/asm-x86/hvm/vcpu.h create mode 100644 xen/include/asm-x86/hvm/vioapic.h create mode 100644 xen/include/asm-x86/hvm/viridian.h create mode 100644 xen/include/asm-x86/hvm/vlapic.h create mode 100644 xen/include/asm-x86/hvm/vm_event.h create mode 100644 xen/include/asm-x86/hvm/vmx/vmcs.h create mode 100644 xen/include/asm-x86/hvm/vmx/vmx.h create mode 100644 xen/include/asm-x86/hvm/vmx/vvmx.h create mode 100644 xen/include/asm-x86/hvm/vpic.h create mode 100644 xen/include/asm-x86/hvm/vpt.h create mode 100644 xen/include/asm-x86/hypercall.h create mode 100644 xen/include/asm-x86/i387.h create mode 100644 xen/include/asm-x86/indirect_thunk_asm.h create mode 100644 xen/include/asm-x86/init.h create mode 100644 xen/include/asm-x86/invpcid.h create mode 100644 xen/include/asm-x86/io.h create mode 100644 xen/include/asm-x86/io_apic.h create mode 100644 xen/include/asm-x86/iocap.h create mode 100644 xen/include/asm-x86/iommu.h create mode 100644 xen/include/asm-x86/irq.h create mode 100644 xen/include/asm-x86/ldt.h create mode 100644 xen/include/asm-x86/livepatch.h create mode 100644 xen/include/asm-x86/mach-default/bios_ebda.h create mode 100644 xen/include/asm-x86/mach-default/io_ports.h create mode 100644 xen/include/asm-x86/mach-default/irq_vectors.h create mode 100644 xen/include/asm-x86/mach-default/mach_mpparse.h create mode 100644 xen/include/asm-x86/mach-default/mach_mpspec.h create mode 100644 xen/include/asm-x86/mach-generic/mach_apic.h create mode 100644 xen/include/asm-x86/mach-generic/mach_mpparse.h create mode 100644 xen/include/asm-x86/machine_kexec.h create mode 100644 xen/include/asm-x86/mc146818rtc.h create mode 100644 xen/include/asm-x86/mce.h create mode 100644 xen/include/asm-x86/mem_access.h create mode 100644 xen/include/asm-x86/mem_paging.h create mode 100644 xen/include/asm-x86/mem_sharing.h create mode 100644 xen/include/asm-x86/microcode.h create mode 100644 xen/include/asm-x86/mm.h create mode 100644 xen/include/asm-x86/monitor.h create mode 100644 xen/include/asm-x86/mpspec.h create mode 100644 xen/include/asm-x86/mpspec_def.h create mode 100644 xen/include/asm-x86/msi.h create mode 100644 xen/include/asm-x86/msr-index.h create mode 100644 xen/include/asm-x86/msr.h create mode 100644 xen/include/asm-x86/mtrr.h create mode 100644 xen/include/asm-x86/mwait.h create mode 100644 xen/include/asm-x86/nmi.h create mode 100644 xen/include/asm-x86/nops.h create mode 100644 xen/include/asm-x86/nospec.h create mode 100644 xen/include/asm-x86/numa.h create mode 100644 xen/include/asm-x86/p2m.h create mode 100644 xen/include/asm-x86/page.h create mode 100644 xen/include/asm-x86/paging.h create mode 100644 xen/include/asm-x86/pci.h create mode 100644 xen/include/asm-x86/percpu.h create mode 100644 xen/include/asm-x86/perfc.h create mode 100644 xen/include/asm-x86/perfc_defn.h create mode 100644 xen/include/asm-x86/processor.h create mode 100644 xen/include/asm-x86/psr.h create mode 100644 xen/include/asm-x86/pv/domain.h create mode 100644 xen/include/asm-x86/pv/grant_table.h create mode 100644 xen/include/asm-x86/pv/mm.h create mode 100644 xen/include/asm-x86/pv/shim.h create mode 100644 xen/include/asm-x86/pv/traps.h create mode 100644 xen/include/asm-x86/random.h create mode 100644 xen/include/asm-x86/regs.h create mode 100644 xen/include/asm-x86/setup.h create mode 100644 xen/include/asm-x86/shadow.h create mode 100644 xen/include/asm-x86/shared.h create mode 100644 xen/include/asm-x86/shstk.h create mode 100644 xen/include/asm-x86/smp.h create mode 100644 xen/include/asm-x86/softirq.h create mode 100644 xen/include/asm-x86/spec_ctrl.h create mode 100644 xen/include/asm-x86/spec_ctrl_asm.h create mode 100644 xen/include/asm-x86/spinlock.h create mode 100644 xen/include/asm-x86/string.h create mode 100644 xen/include/asm-x86/system.h create mode 100644 xen/include/asm-x86/tboot.h create mode 100644 xen/include/asm-x86/time.h create mode 100644 xen/include/asm-x86/trace.h create mode 100644 xen/include/asm-x86/traps.h create mode 100644 xen/include/asm-x86/types.h create mode 100644 xen/include/asm-x86/uaccess.h create mode 100644 xen/include/asm-x86/vm_event.h create mode 100644 xen/include/asm-x86/vpmu.h create mode 100644 xen/include/asm-x86/x86-defns.h create mode 100644 xen/include/asm-x86/x86-vendors.h create mode 100644 xen/include/asm-x86/x86_64/efibind.h create mode 100644 xen/include/asm-x86/x86_64/elf.h create mode 100644 xen/include/asm-x86/x86_64/page.h create mode 100644 xen/include/asm-x86/x86_64/regs.h create mode 100644 xen/include/asm-x86/x86_64/system.h create mode 100644 xen/include/asm-x86/x86_64/uaccess.h create mode 100644 xen/include/asm-x86/x86_emulate.h create mode 100644 xen/include/asm-x86/xenoprof.h create mode 100644 xen/include/asm-x86/xstate.h create mode 100644 xen/include/crypto/README.source create mode 100644 xen/include/crypto/rijndael.h create mode 100644 xen/include/crypto/vmac.h create mode 100644 xen/include/efi/efiapi.h create mode 100644 xen/include/efi/eficapsule.h create mode 100644 xen/include/efi/eficon.h create mode 100644 xen/include/efi/efidef.h create mode 100644 xen/include/efi/efidevp.h create mode 100644 xen/include/efi/efierr.h create mode 100644 xen/include/efi/efipciio.h create mode 100644 xen/include/efi/efiprot.h create mode 100644 xen/include/public/COPYING create mode 100644 xen/include/public/arch-arm.h create mode 100644 xen/include/public/arch-arm/hvm/save.h create mode 100644 xen/include/public/arch-arm/smccc.h create mode 100644 xen/include/public/arch-x86/cpufeatureset.h create mode 100644 xen/include/public/arch-x86/cpuid.h create mode 100644 xen/include/public/arch-x86/hvm/save.h create mode 100644 xen/include/public/arch-x86/hvm/start_info.h create mode 100644 xen/include/public/arch-x86/pmu.h create mode 100644 xen/include/public/arch-x86/xen-mca.h create mode 100644 xen/include/public/arch-x86/xen-x86_32.h create mode 100644 xen/include/public/arch-x86/xen-x86_64.h create mode 100644 xen/include/public/arch-x86/xen.h create mode 100644 xen/include/public/arch-x86_32.h create mode 100644 xen/include/public/arch-x86_64.h create mode 100644 xen/include/public/argo.h create mode 100644 xen/include/public/callback.h create mode 100644 xen/include/public/device_tree_defs.h create mode 100644 xen/include/public/dom0_ops.h create mode 100644 xen/include/public/domctl.h create mode 100644 xen/include/public/elfnote.h create mode 100644 xen/include/public/errno.h create mode 100644 xen/include/public/event_channel.h create mode 100644 xen/include/public/features.h create mode 100644 xen/include/public/grant_table.h create mode 100644 xen/include/public/hvm/dm_op.h create mode 100644 xen/include/public/hvm/e820.h create mode 100644 xen/include/public/hvm/hvm_info_table.h create mode 100644 xen/include/public/hvm/hvm_op.h create mode 100644 xen/include/public/hvm/hvm_vcpu.h create mode 100644 xen/include/public/hvm/hvm_xs_strings.h create mode 100644 xen/include/public/hvm/ioreq.h create mode 100644 xen/include/public/hvm/params.h create mode 100644 xen/include/public/hvm/pvdrivers.h create mode 100644 xen/include/public/hvm/save.h create mode 100644 xen/include/public/hypfs.h create mode 100644 xen/include/public/io/9pfs.h create mode 100644 xen/include/public/io/blkif.h create mode 100644 xen/include/public/io/cameraif.h create mode 100644 xen/include/public/io/console.h create mode 100644 xen/include/public/io/displif.h create mode 100644 xen/include/public/io/fbif.h create mode 100644 xen/include/public/io/fsif.h create mode 100644 xen/include/public/io/kbdif.h create mode 100644 xen/include/public/io/libxenvchan.h create mode 100644 xen/include/public/io/netif.h create mode 100644 xen/include/public/io/pciif.h create mode 100644 xen/include/public/io/protocols.h create mode 100644 xen/include/public/io/pvcalls.h create mode 100644 xen/include/public/io/ring.h create mode 100644 xen/include/public/io/sndif.h create mode 100644 xen/include/public/io/tpmif.h create mode 100644 xen/include/public/io/usbif.h create mode 100644 xen/include/public/io/vscsiif.h create mode 100644 xen/include/public/io/xenbus.h create mode 100644 xen/include/public/io/xs_wire.h create mode 100644 xen/include/public/kexec.h create mode 100644 xen/include/public/memory.h create mode 100644 xen/include/public/nmi.h create mode 100644 xen/include/public/physdev.h create mode 100644 xen/include/public/platform.h create mode 100644 xen/include/public/pmu.h create mode 100644 xen/include/public/sched.h create mode 100644 xen/include/public/sysctl.h create mode 100644 xen/include/public/tmem.h create mode 100644 xen/include/public/trace.h create mode 100644 xen/include/public/vcpu.h create mode 100644 xen/include/public/version.h create mode 100644 xen/include/public/vm_event.h create mode 100644 xen/include/public/xen-compat.h create mode 100644 xen/include/public/xen.h create mode 100644 xen/include/public/xencomm.h create mode 100644 xen/include/public/xenoprof.h create mode 100644 xen/include/public/xsm/flask_op.h create mode 100644 xen/include/xen/8250-uart.h create mode 100644 xen/include/xen/acpi.h create mode 100644 xen/include/xen/argo.h create mode 100644 xen/include/xen/atomic.h create mode 100644 xen/include/xen/bitmap.h create mode 100644 xen/include/xen/bitops.h create mode 100644 xen/include/xen/byteorder/big_endian.h create mode 100644 xen/include/xen/byteorder/generic.h create mode 100644 xen/include/xen/byteorder/little_endian.h create mode 100644 xen/include/xen/byteorder/swab.h create mode 100644 xen/include/xen/cache.h create mode 100644 xen/include/xen/compat.h create mode 100644 xen/include/xen/compile.h.in create mode 100644 xen/include/xen/compiler.h create mode 100644 xen/include/xen/config.h create mode 100644 xen/include/xen/console.h create mode 100644 xen/include/xen/consoled.h create mode 100644 xen/include/xen/const.h create mode 100644 xen/include/xen/coverage.h create mode 100644 xen/include/xen/cper.h create mode 100644 xen/include/xen/cpu.h create mode 100644 xen/include/xen/cpuidle.h create mode 100644 xen/include/xen/cpumask.h create mode 100644 xen/include/xen/ctype.h create mode 100644 xen/include/xen/decompress.h create mode 100644 xen/include/xen/delay.h create mode 100644 xen/include/xen/device_tree.h create mode 100644 xen/include/xen/dmi.h create mode 100644 xen/include/xen/domain.h create mode 100644 xen/include/xen/domain_page.h create mode 100644 xen/include/xen/early_printk.h create mode 100644 xen/include/xen/earlycpio.h create mode 100644 xen/include/xen/efi.h create mode 100644 xen/include/xen/elf.h create mode 100644 xen/include/xen/elfcore.h create mode 100644 xen/include/xen/elfstructs.h create mode 100644 xen/include/xen/err.h create mode 100644 xen/include/xen/errno.h create mode 100644 xen/include/xen/event.h create mode 100644 xen/include/xen/event_fifo.h create mode 100644 xen/include/xen/gdbstub.h create mode 100644 xen/include/xen/grant_table.h create mode 100644 xen/include/xen/guest_access.h create mode 100644 xen/include/xen/gunzip.h create mode 100644 xen/include/xen/hash.h create mode 100644 xen/include/xen/hypercall.h create mode 100644 xen/include/xen/hypfs.h create mode 100644 xen/include/xen/init.h create mode 100644 xen/include/xen/inttypes.h create mode 100644 xen/include/xen/iocap.h create mode 100644 xen/include/xen/iommu.h create mode 100644 xen/include/xen/irq.h create mode 100644 xen/include/xen/irq_cpustat.h create mode 100644 xen/include/xen/kconfig.h create mode 100644 xen/include/xen/kernel.h create mode 100644 xen/include/xen/kexec.h create mode 100644 xen/include/xen/keyhandler.h create mode 100644 xen/include/xen/kimage.h create mode 100644 xen/include/xen/lib.h create mode 100644 xen/include/xen/lib/x86/Makefile create mode 100644 xen/include/xen/lib/x86/cpu-policy.h create mode 100644 xen/include/xen/lib/x86/cpuid.h create mode 100644 xen/include/xen/lib/x86/msr.h create mode 100644 xen/include/xen/libelf.h create mode 100644 xen/include/xen/libfdt/fdt.h create mode 100644 xen/include/xen/libfdt/libfdt.h create mode 100644 xen/include/xen/libfdt/libfdt_env.h create mode 100644 xen/include/xen/list.h create mode 100644 xen/include/xen/list_sort.h create mode 100644 xen/include/xen/livepatch.h create mode 100644 xen/include/xen/livepatch_elf.h create mode 100644 xen/include/xen/livepatch_payload.h create mode 100644 xen/include/xen/lz4.h create mode 100644 xen/include/xen/lzo.h create mode 100644 xen/include/xen/mem_access.h create mode 100644 xen/include/xen/mm.h create mode 100644 xen/include/xen/monitor.h create mode 100644 xen/include/xen/multiboot.h create mode 100644 xen/include/xen/multiboot2.h create mode 100644 xen/include/xen/multicall.h create mode 100644 xen/include/xen/nodemask.h create mode 100644 xen/include/xen/nospec.h create mode 100644 xen/include/xen/notifier.h create mode 100644 xen/include/xen/numa.h create mode 100644 xen/include/xen/p2m-common.h create mode 100644 xen/include/xen/page-defs.h create mode 100644 xen/include/xen/paging.h create mode 100644 xen/include/xen/param.h create mode 100644 xen/include/xen/pci.h create mode 100644 xen/include/xen/pci_ids.h create mode 100644 xen/include/xen/pci_regs.h create mode 100644 xen/include/xen/pdx.h create mode 100644 xen/include/xen/percpu.h create mode 100644 xen/include/xen/perfc.h create mode 100644 xen/include/xen/perfc_defn.h create mode 100644 xen/include/xen/pfn.h create mode 100644 xen/include/xen/pmstat.h create mode 100644 xen/include/xen/preempt.h create mode 100644 xen/include/xen/prefetch.h create mode 100644 xen/include/xen/pv_console.h create mode 100644 xen/include/xen/radix-tree.h create mode 100644 xen/include/xen/random.h create mode 100644 xen/include/xen/rangeset.h create mode 100644 xen/include/xen/rbtree.h create mode 100644 xen/include/xen/rcupdate.h create mode 100644 xen/include/xen/rwlock.h create mode 100644 xen/include/xen/sched.h create mode 100644 xen/include/xen/serial.h create mode 100644 xen/include/xen/shared.h create mode 100644 xen/include/xen/shutdown.h create mode 100644 xen/include/xen/sizes.h create mode 100644 xen/include/xen/smp.h create mode 100644 xen/include/xen/softirq.h create mode 100644 xen/include/xen/sort.h create mode 100644 xen/include/xen/spinlock.h create mode 100644 xen/include/xen/stdarg.h create mode 100644 xen/include/xen/stdbool.h create mode 100644 xen/include/xen/stop_machine.h create mode 100644 xen/include/xen/string.h create mode 100644 xen/include/xen/stringify.h create mode 100644 xen/include/xen/symbols.h create mode 100644 xen/include/xen/tasklet.h create mode 100644 xen/include/xen/time.h create mode 100644 xen/include/xen/timer.h create mode 100644 xen/include/xen/trace.h create mode 100644 xen/include/xen/types.h create mode 100644 xen/include/xen/typesafe.h create mode 100644 xen/include/xen/version.h create mode 100644 xen/include/xen/vga.h create mode 100644 xen/include/xen/video.h create mode 100644 xen/include/xen/virtual_region.h create mode 100644 xen/include/xen/vm_event.h create mode 100644 xen/include/xen/vmap.h create mode 100644 xen/include/xen/vpci.h create mode 100644 xen/include/xen/wait.h create mode 100644 xen/include/xen/warning.h create mode 100644 xen/include/xen/watchdog.h create mode 100644 xen/include/xen/xenoprof.h create mode 100644 xen/include/xen/xmalloc.h create mode 100644 xen/include/xlat.lst create mode 100644 xen/include/xsm/dummy.h create mode 100644 xen/include/xsm/xsm.h create mode 100644 xen/lib/Makefile create mode 100644 xen/lib/x86/Makefile create mode 100644 xen/lib/x86/cpuid.c create mode 100644 xen/lib/x86/msr.c create mode 100644 xen/lib/x86/policy.c create mode 100644 xen/lib/x86/private.h create mode 100644 xen/scripts/Kbuild.include create mode 100644 xen/scripts/Kconfig.include create mode 100644 xen/scripts/Makefile.clean create mode 100755 xen/scripts/clang-version.sh create mode 100755 xen/scripts/gcc-version.sh create mode 100644 xen/test/Makefile create mode 100644 xen/test/livepatch/Makefile create mode 100644 xen/test/livepatch/xen_action_hooks.c create mode 100644 xen/test/livepatch/xen_action_hooks_marker.c create mode 100644 xen/test/livepatch/xen_action_hooks_noapply.c create mode 100644 xen/test/livepatch/xen_action_hooks_nofunc.c create mode 100644 xen/test/livepatch/xen_action_hooks_norevert.c create mode 100644 xen/test/livepatch/xen_bye_world.c create mode 100644 xen/test/livepatch/xen_bye_world_func.c create mode 100644 xen/test/livepatch/xen_expectations.c create mode 100644 xen/test/livepatch/xen_expectations_fail.c create mode 100644 xen/test/livepatch/xen_hello_world.c create mode 100644 xen/test/livepatch/xen_hello_world_func.c create mode 100644 xen/test/livepatch/xen_nop.c create mode 100644 xen/test/livepatch/xen_prepost_hooks.c create mode 100644 xen/test/livepatch/xen_prepost_hooks_fail.c create mode 100644 xen/test/livepatch/xen_replace_world.c create mode 100644 xen/test/livepatch/xen_replace_world_func.c create mode 100644 xen/tools/Makefile create mode 100755 xen/tools/binfile create mode 100755 xen/tools/compat-build-header.py create mode 100755 xen/tools/compat-build-source.py create mode 100755 xen/tools/gen-cpuid.py create mode 100644 xen/tools/get-fields.sh create mode 100644 xen/tools/kconfig/.gitignore create mode 100644 xen/tools/kconfig/Makefile create mode 100644 xen/tools/kconfig/Makefile.host create mode 100644 xen/tools/kconfig/Makefile.kconfig create mode 100644 xen/tools/kconfig/README.source create mode 100644 xen/tools/kconfig/allrandom.config create mode 100644 xen/tools/kconfig/conf.c create mode 100644 xen/tools/kconfig/confdata.c create mode 100644 xen/tools/kconfig/expr.c create mode 100644 xen/tools/kconfig/expr.h create mode 100755 xen/tools/kconfig/gconf-cfg.sh create mode 100644 xen/tools/kconfig/gconf.c create mode 100644 xen/tools/kconfig/gconf.glade create mode 100644 xen/tools/kconfig/images.c create mode 100644 xen/tools/kconfig/images.h create mode 100644 xen/tools/kconfig/lexer.l create mode 100644 xen/tools/kconfig/list.h create mode 100644 xen/tools/kconfig/lkc.h create mode 100644 xen/tools/kconfig/lkc_proto.h create mode 100644 xen/tools/kconfig/lxdialog/BIG.FAT.WARNING create mode 100644 xen/tools/kconfig/lxdialog/checklist.c create mode 100644 xen/tools/kconfig/lxdialog/dialog.h create mode 100644 xen/tools/kconfig/lxdialog/inputbox.c create mode 100644 xen/tools/kconfig/lxdialog/menubox.c create mode 100644 xen/tools/kconfig/lxdialog/textbox.c create mode 100644 xen/tools/kconfig/lxdialog/util.c create mode 100644 xen/tools/kconfig/lxdialog/yesno.c create mode 100755 xen/tools/kconfig/mconf-cfg.sh create mode 100644 xen/tools/kconfig/mconf.c create mode 100644 xen/tools/kconfig/menu.c create mode 100755 xen/tools/kconfig/merge_config.sh create mode 100755 xen/tools/kconfig/nconf-cfg.sh create mode 100644 xen/tools/kconfig/nconf.c create mode 100644 xen/tools/kconfig/nconf.gui.c create mode 100644 xen/tools/kconfig/nconf.h create mode 100644 xen/tools/kconfig/parser.y create mode 100644 xen/tools/kconfig/preprocess.c create mode 100755 xen/tools/kconfig/qconf-cfg.sh create mode 100644 xen/tools/kconfig/qconf.cc create mode 100644 xen/tools/kconfig/qconf.h create mode 100755 xen/tools/kconfig/streamline_config.pl create mode 100644 xen/tools/kconfig/symbol.c create mode 100644 xen/tools/kconfig/tests/auto_submenu/Kconfig create mode 100644 xen/tools/kconfig/tests/auto_submenu/__init__.py create mode 100644 xen/tools/kconfig/tests/auto_submenu/expected_stdout create mode 100644 xen/tools/kconfig/tests/choice/Kconfig create mode 100644 xen/tools/kconfig/tests/choice/__init__.py create mode 100644 xen/tools/kconfig/tests/choice/alldef_expected_config create mode 100644 xen/tools/kconfig/tests/choice/allmod_expected_config create mode 100644 xen/tools/kconfig/tests/choice/allno_expected_config create mode 100644 xen/tools/kconfig/tests/choice/allyes_expected_config create mode 100644 xen/tools/kconfig/tests/choice/oldask0_expected_stdout create mode 100644 xen/tools/kconfig/tests/choice/oldask1_config create mode 100644 xen/tools/kconfig/tests/choice/oldask1_expected_stdout create mode 100644 xen/tools/kconfig/tests/choice_value_with_m_dep/Kconfig create mode 100644 xen/tools/kconfig/tests/choice_value_with_m_dep/__init__.py create mode 100644 xen/tools/kconfig/tests/choice_value_with_m_dep/config create mode 100644 xen/tools/kconfig/tests/choice_value_with_m_dep/expected_config create mode 100644 xen/tools/kconfig/tests/choice_value_with_m_dep/expected_stdout create mode 100644 xen/tools/kconfig/tests/conftest.py create mode 100644 xen/tools/kconfig/tests/err_recursive_dep/Kconfig create mode 100644 xen/tools/kconfig/tests/err_recursive_dep/__init__.py create mode 100644 xen/tools/kconfig/tests/err_recursive_dep/expected_stderr create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/Kconfig create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/Kconfig.inc1 create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/Kconfig.inc2 create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/Kconfig.inc3 create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/__init__.py create mode 100644 xen/tools/kconfig/tests/err_recursive_inc/expected_stderr create mode 100644 xen/tools/kconfig/tests/inter_choice/Kconfig create mode 100644 xen/tools/kconfig/tests/inter_choice/__init__.py create mode 100644 xen/tools/kconfig/tests/inter_choice/defconfig create mode 100644 xen/tools/kconfig/tests/inter_choice/expected_config create mode 100644 xen/tools/kconfig/tests/new_choice_with_dep/Kconfig create mode 100644 xen/tools/kconfig/tests/new_choice_with_dep/__init__.py create mode 100644 xen/tools/kconfig/tests/new_choice_with_dep/config create mode 100644 xen/tools/kconfig/tests/new_choice_with_dep/expected_stdout create mode 100644 xen/tools/kconfig/tests/no_write_if_dep_unmet/Kconfig create mode 100644 xen/tools/kconfig/tests/no_write_if_dep_unmet/__init__.py create mode 100644 xen/tools/kconfig/tests/no_write_if_dep_unmet/config create mode 100644 xen/tools/kconfig/tests/no_write_if_dep_unmet/expected_config create mode 100644 xen/tools/kconfig/tests/preprocess/builtin_func/Kconfig create mode 100644 xen/tools/kconfig/tests/preprocess/builtin_func/__init__.py create mode 100644 xen/tools/kconfig/tests/preprocess/builtin_func/expected_stderr create mode 100644 xen/tools/kconfig/tests/preprocess/builtin_func/expected_stdout create mode 100644 xen/tools/kconfig/tests/preprocess/circular_expansion/Kconfig create mode 100644 xen/tools/kconfig/tests/preprocess/circular_expansion/__init__.py create mode 100644 xen/tools/kconfig/tests/preprocess/circular_expansion/expected_stderr create mode 100644 xen/tools/kconfig/tests/preprocess/escape/Kconfig create mode 100644 xen/tools/kconfig/tests/preprocess/escape/__init__.py create mode 100644 xen/tools/kconfig/tests/preprocess/escape/expected_stderr create mode 100644 xen/tools/kconfig/tests/preprocess/variable/Kconfig create mode 100644 xen/tools/kconfig/tests/preprocess/variable/__init__.py create mode 100644 xen/tools/kconfig/tests/preprocess/variable/expected_stderr create mode 100644 xen/tools/kconfig/tests/pytest.ini create mode 100644 xen/tools/kconfig/tests/rand_nested_choice/Kconfig create mode 100644 xen/tools/kconfig/tests/rand_nested_choice/__init__.py create mode 100644 xen/tools/kconfig/tests/rand_nested_choice/expected_stdout0 create mode 100644 xen/tools/kconfig/tests/rand_nested_choice/expected_stdout1 create mode 100644 xen/tools/kconfig/tests/rand_nested_choice/expected_stdout2 create mode 100644 xen/tools/kconfig/util.c create mode 100755 xen/tools/process-banner.sed create mode 100755 xen/tools/scmversion create mode 100644 xen/tools/symbols.c create mode 100644 xen/tools/xen.flf create mode 100644 xen/xsm/Makefile create mode 100644 xen/xsm/dummy.c create mode 100644 xen/xsm/flask/.gitignore create mode 100644 xen/xsm/flask/Makefile create mode 100644 xen/xsm/flask/avc.c create mode 100644 xen/xsm/flask/flask_op.c create mode 100644 xen/xsm/flask/hooks.c create mode 100644 xen/xsm/flask/include/avc.h create mode 100644 xen/xsm/flask/include/avc_ss.h create mode 100644 xen/xsm/flask/include/conditional.h create mode 100644 xen/xsm/flask/include/objsec.h create mode 100644 xen/xsm/flask/include/security.h create mode 100644 xen/xsm/flask/policy/access_vectors create mode 100644 xen/xsm/flask/policy/initial_sids create mode 100644 xen/xsm/flask/policy/mkaccess_vector.sh create mode 100644 xen/xsm/flask/policy/mkflask.sh create mode 100644 xen/xsm/flask/policy/security_classes create mode 100644 xen/xsm/flask/ss/Makefile create mode 100644 xen/xsm/flask/ss/avtab.c create mode 100644 xen/xsm/flask/ss/avtab.h create mode 100644 xen/xsm/flask/ss/conditional.c create mode 100644 xen/xsm/flask/ss/conditional.h create mode 100644 xen/xsm/flask/ss/constraint.h create mode 100644 xen/xsm/flask/ss/context.h create mode 100644 xen/xsm/flask/ss/ebitmap.c create mode 100644 xen/xsm/flask/ss/ebitmap.h create mode 100644 xen/xsm/flask/ss/hashtab.c create mode 100644 xen/xsm/flask/ss/hashtab.h create mode 100644 xen/xsm/flask/ss/mls.c create mode 100644 xen/xsm/flask/ss/mls.h create mode 100644 xen/xsm/flask/ss/mls_types.h create mode 100644 xen/xsm/flask/ss/policydb.c create mode 100644 xen/xsm/flask/ss/policydb.h create mode 100644 xen/xsm/flask/ss/services.c create mode 100644 xen/xsm/flask/ss/services.h create mode 100644 xen/xsm/flask/ss/sidtab.c create mode 100644 xen/xsm/flask/ss/sidtab.h create mode 100644 xen/xsm/flask/ss/symtab.c create mode 100644 xen/xsm/flask/ss/symtab.h create mode 100644 xen/xsm/silo.c create mode 100644 xen/xsm/xsm_core.c create mode 100644 xen/xsm/xsm_policy.c diff --git a/.gitarchive-info b/.gitarchive-info new file mode 100644 index 0000000000..83e5b86e56 --- /dev/null +++ b/.gitarchive-info @@ -0,0 +1,2 @@ +Changeset: $Format:%H$ +Commit date: $Format:%cD$ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..f7bf506d39 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +.gitarchive-info export-subst diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..36ce2ea104 --- /dev/null +++ b/.gitignore @@ -0,0 +1,418 @@ +.hg +.*.cmd +.*.tmp +*.orig +*~ +*.swp +*.o +*.d +*.d2 +*.opic +*.a +*.so +*.so.[0-9]* +*.bin +*.bak +*.tmp +*.spot +*.spit +*.gcno +*.gcda +*.py[ocd] +TAGS +GTAGS +GRTAGS +GPATH +GSYMS +tags +cscope.files +cscope.in.out +cscope.out +cscope.po.out +.config +.vimrc +.vscode + +dist +stubdom/*.tar.gz + +autom4te.cache/ +config.log +config.status +config.cache +config/Toplevel.mk +config/Paths.mk + +build-* +dist/* +docs/tmp.* +docs/html/ +docs/man/xl.cfg.5.pod +docs/man/xl.1.pod +docs/man1/ +docs/man5/ +docs/man7/ +docs/man8/ +docs/pdf/ +docs/txt/ +extras/mini-os* +install/* +stubdom/*-minios-config.mk +stubdom/autom4te.cache/ +stubdom/binutils-* +stubdom/config.cache +stubdom/config.log +stubdom/config.status +stubdom/cross-root-* +stubdom/gcc-* +stubdom/gmp-* +stubdom/grub-* +stubdom/include +stubdom/ioemu +stubdom/ioemu/ +stubdom/libs-* +stubdom/libxc-* +stubdom/libxencall-* +stubdom/libxenevtchn-* +stubdom/libxenforeignmemory-* +stubdom/libxengnttab-* +stubdom/libxentoolcore-* +stubdom/libxentoollog-* +stubdom/lwip-* +stubdom/lwip/ +stubdom/mini-os-* +stubdom/mk-headers-* +stubdom/newlib-1.* +stubdom/newlib-x86* +stubdom/ocaml-* +stubdom/pciutils-* +stubdom/pkg-config/* +stubdom/polarssl-* +stubdom/stubdompath.sh +stubdom/tpm_emulator-* +stubdom/vtpm/vtpm_manager.h +stubdom/xenstore +stubdom/zlib-* +tools/*/build/lib*/*.py +tools/autom4te.cache/ +tools/config.h +tools/config.log +tools/config.status +tools/config.cache +config/Tools.mk +config/Stubdom.mk +config/Docs.mk +tools/libs/toolcore/headers.chk +tools/libs/toolcore/xentoolcore.pc +tools/libs/toollog/headers.chk +tools/libs/toollog/xentoollog.pc +tools/libs/evtchn/headers.chk +tools/libs/evtchn/xenevtchn.pc +tools/libs/gnttab/headers.chk +tools/libs/gnttab/xengnttab.pc +tools/libs/hypfs/headers.chk +tools/libs/hypfs/xenhypfs.pc +tools/libs/call/headers.chk +tools/libs/call/xencall.pc +tools/libs/foreignmemory/headers.chk +tools/libs/foreignmemory/xenforeignmemory.pc +tools/libs/devicemodel/headers.chk +tools/libs/devicemodel/xendevicemodel.pc +tools/console/xenconsole +tools/console/xenconsoled +tools/console/client/_paths.h +tools/console/daemon/_paths.h +tools/debugger/gdb/gdb-6.2.1-linux-i386-xen/* +tools/debugger/gdb/gdb-6.2.1/* +tools/debugger/gdb/gdb-6.2.1.tar.bz2 +tools/debugger/gdbsx/gdbsx +tools/debugger/xenitp/xenitp +tools/firmware/*/biossums +tools/firmware/*.bin +tools/firmware/*.sym +tools/firmware/*bios/*bios*.txt +tools/firmware/etherboot/gpxe/* +tools/firmware/extboot/extboot.img +tools/firmware/extboot/signrom +tools/firmware/hvmloader/dsdt* +tools/firmware/hvmloader/hvmloader +tools/firmware/hvmloader/mk_dsdt +tools/firmware/hvmloader/roms.h +tools/firmware/hvmloader/roms.inc +tools/firmware/hvmloader/ssdt* +tools/firmware/rombios/BIOS-bochs-[^/]* +tools/firmware/rombios/_rombios[^/]*_.c +tools/firmware/rombios/rombios[^/]*.s +tools/firmware/rombios/32bit/32bitbios_flat.h +tools/firmware/vgabios/vbetables-gen +tools/firmware/vgabios/vbetables.h +tools/firmware/xen-dir/*.old +tools/firmware/xen-dir/linkfarm.stamp* +tools/firmware/xen-dir/xen-root +tools/firmware/xen-dir/xen-shim +tools/firmware/xen-dir/xen-shim-syms +tools/flask/utils/flask-getenforce +tools/flask/utils/flask-get-bool +tools/flask/utils/flask-loadpolicy +tools/flask/utils/flask-setenforce +tools/flask/utils/flask-set-bool +tools/flask/utils/flask-label-pci +tools/fuzz/libelf/afl-libelf-fuzzer +tools/fuzz/x86_instruction_emulator/asm +tools/fuzz/x86_instruction_emulator/afl-harness +tools/fuzz/x86_instruction_emulator/afl-harness-cov +tools/fuzz/x86_instruction_emulator/wrappers.c +tools/fuzz/x86_instruction_emulator/x86_emulate +tools/fuzz/x86_instruction_emulator/x86-emulate.[ch] +tools/helpers/_paths.h +tools/helpers/init-xenstore-domain +tools/helpers/xen-init-dom0 +tools/hotplug/common/hotplugpath.sh +tools/hotplug/FreeBSD/rc.d/xencommons +tools/hotplug/FreeBSD/rc.d/xendriverdomain +tools/hotplug/Linux/init.d/sysconfig.xencommons +tools/hotplug/Linux/init.d/sysconfig.xendomains +tools/hotplug/Linux/init.d/xen-watchdog +tools/hotplug/Linux/init.d/xencommons +tools/hotplug/Linux/init.d/xendomains +tools/hotplug/Linux/init.d/xendriverdomain +tools/hotplug/Linux/launch-xenstore +tools/hotplug/Linux/systemd/*.conf +tools/hotplug/Linux/systemd/*.mount +tools/hotplug/Linux/systemd/*.socket +tools/hotplug/Linux/systemd/*.service +tools/hotplug/Linux/vif-setup +tools/hotplug/Linux/xen-backend.rules +tools/hotplug/Linux/xen-hotplug-common.sh +tools/hotplug/Linux/xendomains +tools/hotplug/NetBSD/rc.d/xencommons +tools/hotplug/NetBSD/rc.d/xendriverdomain +tools/include/acpi +tools/include/xen/* +tools/include/xen-xsm/* +tools/include/xen-foreign/*.(c|h|size) +tools/include/xen-foreign/checker +tools/libvchan/xenvchan.pc +tools/libxc/*.pc +tools/libxl/_libxl.api-for-check +tools/libxl/*.api-ok +tools/libxl/*.pc +tools/libxl/dsdt* +tools/libxl/libxlu_cfg_y.output +tools/libxl/mk_dsdt +tools/libxl/ssdt* +tools/libxl/testenum +tools/libxl/testenum.c +tools/libxl/tmp.* +tools/misc/cpuperf/cpuperf-perfcntr +tools/misc/cpuperf/cpuperf-xen +tools/misc/xc_shadow +tools/misc/xen_cpuperf +tools/misc/xen-cpuid +tools/misc/xen-detect +tools/misc/xen-diag +tools/misc/xen-tmem-list-parse +tools/misc/xen-livepatch +tools/misc/xenperf +tools/misc/xenpm +tools/misc/xen-hvmctx +tools/misc/xenlockprof +tools/misc/lowmemd +tools/misc/xencov +tools/pkg-config/* +tools/qemu-xen-build +tools/xentrace/xenalyze +tools/pygrub/build/* +tools/python/build/* +tools/security/secpol_tool +tools/security/xen/* +tools/security/xensec_tool +tools/tests/depriv/depriv-fd-checker +tools/tests/x86_emulator/*.bin +tools/tests/x86_emulator/*.tmp +tools/tests/x86_emulator/32/x86_emulate +tools/tests/x86_emulator/3dnow*.[ch] +tools/tests/x86_emulator/asm +tools/tests/x86_emulator/avx*.[ch] +tools/tests/x86_emulator/blowfish.h +tools/tests/x86_emulator/fma*.[ch] +tools/tests/x86_emulator/*sse*.[ch] +tools/tests/x86_emulator/test_x86_emulator +tools/tests/x86_emulator/x86_emulate +tools/tests/x86_emulator/xop*.[ch] +tools/tests/xen-access/xen-access +tools/tests/xenstore/xs-test +tools/tests/regression/installed/* +tools/tests/regression/build/* +tools/tests/regression/downloads/* +tools/tests/mem-sharing/memshrtool +tools/tests/mce-test/tools/xen-mceinj +tools/tests/vpci/list.h +tools/tests/vpci/vpci.[hc] +tools/tests/vpci/test_vpci +tools/xcutils/lsevtchn +tools/xcutils/readnotes +tools/xenbackendd/_paths.h +tools/xenbackendd/xenbackendd +tools/xenmon/xentrace_setmask +tools/xenmon/xenbaked +tools/xenpaging/xenpaging +tools/xenpmd/xenpmd +tools/xenstat/libxenstat/src/_paths.h +tools/xenstat/libxenstat/xenstat.pc +tools/xenstat/xentop/xentop +tools/xenstore/xenstore +tools/xenstore/xenstore-chmod +tools/xenstore/xenstore-exists +tools/xenstore/xenstore-list +tools/xenstore/xenstore-read +tools/xenstore/xenstore-rm +tools/xenstore/xenstore-write +tools/xenstore/xenstore-control +tools/xenstore/xenstore-ls +tools/xenstore/xenstored +tools/xenstore/xenstored_test +tools/xenstore/xenstore.pc +tools/xenstore/xs_tdb_dump +tools/xentrace/xentrace_setsize +tools/xentrace/tbctl +tools/xentrace/xenctx +tools/xentrace/xentrace +xen/.banner +xen/.config +xen/.config.old +xen/.xen.elf32 +xen/System.map +xen/arch/x86/asm-macros.i +xen/arch/x86/boot/mkelf32 +xen/arch/x86/boot/cmdline.S +xen/arch/x86/boot/reloc.S +xen/arch/x86/boot/*.bin +xen/arch/x86/boot/*.lnk +xen/arch/x86/efi.lds +xen/arch/x86/efi/check.efi +xen/arch/x86/efi/mkreloc +xen/arch/*/xen.lds +xen/arch/*/asm-offsets.s +xen/arch/*/efi/boot.c +xen/arch/*/efi/compat.c +xen/arch/*/efi/efi.h +xen/arch/*/efi/runtime.c +xen/common/config_data.S +xen/common/config.gz +xen/include/headers*.chk +xen/include/asm +xen/include/asm-*/asm-offsets.h +xen/include/asm-x86/asm-macros.h +xen/include/compat/* +xen/include/config/ +xen/include/generated/ +xen/include/public/public +xen/include/xen/*.new +xen/include/xen/acm_policy.h +xen/include/xen/compile.h +xen/include/xen/lib/x86/cpuid-autogen.h +xen/test/livepatch/config.h +xen/test/livepatch/expect_config.h +xen/test/livepatch/*.livepatch +xen/tools/kconfig/.tmp_gtkcheck +xen/tools/kconfig/.tmp_qtcheck +xen/tools/symbols +xen/xsm/flask/flask-policy.S +xen/xsm/flask/include/av_perm_to_string.h +xen/xsm/flask/include/av_permissions.h +xen/xsm/flask/include/class_to_string.h +xen/xsm/flask/include/flask.h +xen/xsm/flask/include/initial_sid_to_string.h +xen/xsm/flask/policy.* +xen/xsm/flask/xenpolicy-* +tools/flask/policy/policy.conf +tools/flask/policy/xenpolicy-* +xen/xen +xen/xen-syms +xen/xen-syms.map +xen/xen.* +LibVNCServer* + +tools/qemu-xen-dir-remote +tools/qemu-xen-dir + +tools/qemu-xen-traditional-dir-remote +tools/qemu-xen-traditional-dir + +tools/firmware/seabios-dir-remote +tools/firmware/seabios-dir + +tools/firmware/ovmf-dir-remote +tools/firmware/ovmf-dir + +tools/firmware/rombios/_rombios_.c +tools/firmware/rombios/rombios.s +tools/firmware/rombios/rombios.sym +tools/include/xen-foreign/checker.c +tools/include/xen-foreign/structs.pyc +tools/include/xen-foreign/x86_32.h +tools/include/xen-foreign/x86_64.h +tools/include/xen-foreign/arm32.h +tools/include/xen-foreign/arm64.h + +.git +tools/misc/xen-hptool +tools/misc/xen-mfndump +tools/libs/toolcore/include/_*.h +tools/libxc/_*.[ch] +tools/libxl/_*.[ch] +tools/libxl/testidl +tools/libxl/testidl.c +tools/libxl/*.pyc +tools/libxl/libxl-save-helper +tools/libxl/test_timedereg +tools/libxl/test_fdderegrace +tools/firmware/etherboot/eb-roms.h +tools/firmware/etherboot/gpxe-git-snapshot.tar.gz +tools/misc/xenhypfs +tools/misc/xenwatchdogd +tools/misc/xen-hvmcrash +tools/misc/xen-lowmemd +tools/libvchan/vchan-node[12] +tools/libvchan/vchan-socket-proxy +tools/ocaml/*/.ocamldep.make +tools/ocaml/*/*.cm[ixao] +tools/ocaml/*/*.cmxa +tools/ocaml/*/*.annot +tools/ocaml/*/*/.ocamldep.make +tools/ocaml/*/*/*.cm[ixao] +tools/ocaml/*/*/*.cmxa +tools/ocaml/*/*/*.annot +tools/ocaml/*/*/META +tools/ocaml/libs/xl/_libxl_types.inc +tools/ocaml/libs/xl/_libxl_types.ml.in +tools/ocaml/libs/xl/_libxl_types.mli.in +tools/ocaml/libs/xl/xenlight.ml +tools/ocaml/libs/xl/xenlight.mli +tools/ocaml/libs/xentoollog/_xtl_levels.* +tools/ocaml/libs/xentoollog/xentoollog.ml +tools/ocaml/libs/xentoollog/xentoollog.mli +tools/ocaml/libs/xs/paths.ml +tools/ocaml/libs/xc/xenctrl_abi_check.h +tools/ocaml/xenstored/_paths.h +tools/ocaml/xenstored/oxenstored +tools/ocaml/xenstored/oxenstored.conf +tools/ocaml/xenstored/paths.ml +tools/ocaml/test/xtl +tools/ocaml/test/send_debug_keys +tools/ocaml/test/list_domains +tools/ocaml/test/dmesg +tools/ocaml/test/raise_exception +tools/debugger/kdd/kdd +tools/firmware/etherboot/ipxe.tar.gz +tools/firmware/etherboot/ipxe/ +tools/python/xen/lowlevel/xl/_pyxl_types.c +tools/python/xen/lowlevel/xl/_pyxl_types.h +tools/xenstore/xenstore-watch +tools/xl/_paths.h +tools/xl/xl + +docs/txt/misc/*.txt +docs/txt/man/*.txt +docs/figs/*.png diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000..c8bd7519d5 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,7 @@ +stages: + - build + - test + +include: + - 'automation/gitlab-ci/build.yaml' + - 'automation/gitlab-ci/test.yaml' diff --git a/.hgignore b/.hgignore new file mode 100644 index 0000000000..2d41670632 --- /dev/null +++ b/.hgignore @@ -0,0 +1,329 @@ +.*\.a$ +.*\.cmi$ +.*\.cmo$ +.*\.cmx$ +\..*\.d$ +.*\.o$ +.*\.opic$ +.*\.pyc$ +.*\.so$ +.*\.so\..*$ +.*\.tar\.bz2$ +.*\.tar\.gz$ +.*~$ +.*\.swp$ +.*\.tmp$ +.*\.flc$ +.*\.orig$ +.*\.rej$ +.*\.spot$ +.*\.spit$ +.*\.gcno$ +.*\.gcda$ +.*/a\.out$ +.*/Modules\.symvers$ +.*/cscope\..*$ +^cscope.*$ +^[^/]*\.bz2$ +^\.config$ +^\.pc +(^|/)(tags|TAGS)$ +(^|/)(GTAGS|GPATH|GSYMS|GRTAGS)$ +^autom4te\.cache$ +^config\.log$ +^config\.status$ +^config\.cache$ +^config/Toplevel\.mk$ +^build-.*$ +^dist/.*$ +^docs/autom4te\.cache$ +^docs/config\.log$ +^docs/config\.status +^docs/config/Toplevel\.mk +^docs/.*\.aux$ +^docs/.*\.dvi$ +^docs/.*\.log$ +^docs/.*\.pdf$ +^docs/.*\.ps$ +^docs/.*\.toc$ +^docs/api/.*$ +^docs/figs/xenserver\.eps$ +^docs/html/.*$ +^docs/interface/WARNINGS$ +^docs/interface/images\.pl$ +^docs/interface/images\.tex$ +^docs/interface/img1\.png$ +^docs/interface/index\.html$ +^docs/interface/interface\.css$ +^docs/interface/interface\.html$ +^docs/interface/labels\.pl$ +^docs/figs/.*\.png +^docs/man1/ +^docs/man5/ +^docs/pdf/.*$ +^docs/ps/.*$ +^docs/user/WARNINGS$ +^docs/user/images\.pl$ +^docs/user/images\.tex$ +^docs/user/img1\.png$ +^docs/user/img2\.png$ +^docs/user/img3\.png$ +^docs/user/index\.html$ +^docs/user/internals\.pl$ +^docs/user/labels\.pl$ +^docs/user/user\.css$ +^docs/user/user\.html$ +^docs/txt/.*$ +^docs/xen-api/vm_lifecycle.eps$ +^docs/xen-api/xenapi-datamodel-graph.eps$ +^docs/xen-api/xenapi.out$ +^extras/mini-os/include/list\.h$ +^extras/mini-os/include/mini-os$ +^extras/mini-os/include/x86/mini-os$ +^extras/mini-os/include/xen$ +^extras/mini-os/mini-os.*$ +^install/.*$ +^linux-[^/]*-paravirt/.*$ +^linux-2.6[^/]*/.*$ +^linux-[^/]*-rc/.*$ +^linux-[^/]*-tip/.*$ +^linux-[^/]*-git/.*$ +^linux-[^/]*\.patch$ +^mkddbxen$ +^netbsd-[^/]*-tools/.*$ +^netbsd-[^/]*-xen0/.*$ +^netbsd-[^/]*-xenU/.*$ +^netbsd-[^/]*\.patch$ +^patches/.*/\.makedep$ +^patches/ebtables-brnf-5_vs_2\.4\.25\.diff$ +^patches/ebtables\.diff$ +^patches/tmp/.*$ +^pristine-.*$ +^ref-.*$ +^tmp-.*$ +^stubdom/autom4te\.cache$ +^stubdom/binutils-.*$ +^stubdom/config\.log$ +^stubdom/config\.status$ +^stubdom/config\.cache$ +^stubdom/cross-root-.*$ +^stubdom/gcc-.*$ +^stubdom/include$ +^stubdom/ioemu$ +^stubdom/xenstore$ +^stubdom/libxc-.*$ +^stubdom/lwip-.*$ +^stubdom/mini-os-.*$ +^stubdom/mk-headers-.*$ +^stubdom/newlib-.*$ +^stubdom/pciutils-.*$ +^stubdom/zlib-.*$ +^stubdom/grub-.*$ +^stubdom/polarssl-.*$ +^stubdom/gmp-.*$ +^stubdom/tpm_emulator-.*$ +^stubdom/ocaml-.*$ +^stubdom/lwip/ +^stubdom/ioemu/ +^stubdom/stubdompath\.sh$ +^stubdom/vtpm/vtpm_manager\.h$ +^tools/.*/build/lib.*/.*\.py$ +^tools/check/\..*$ +^tools/console/xenconsole$ +^tools/console/xenconsoled$ +^tools/debugger/gdb/gdb-6\.2\.1-linux-i386-xen/.*$ +^tools/debugger/gdb/gdb-6\.2\.1/.*$ +^tools/debugger/gdb/gdb-6\.2\.1\.tar\.bz2$ +^tools/debugger/gdbsx/gdbsx$ +^tools/debugger/kdd/kdd$ +^tools/debugger/xenitp/xenitp$ +^tools/firmware/.*/biossums$ +^tools/firmware/.*\.bin$ +^tools/firmware/.*\.sym$ +^tools/firmware/.*bios/.*bios.*\.txt$ +^tools/firmware/etherboot/eb-roms\.h$ +^tools/firmware/etherboot/ipxe/.*$ +^tools/firmware/etherboot/ipxe\.git/.*$ +^tools/firmware/extboot/extboot.img$ +^tools/firmware/extboot/signrom$ +^tools/firmware/hvmloader/acpi/mk_dsdt$ +^tools/firmware/hvmloader/acpi/dsdt.*\.c$ +^tools/firmware/hvmloader/acpi/dsdt_.*\.asl$ +^tools/firmware/hvmloader/acpi/ssdt_.*\.h$ +^tools/firmware/hvmloader/hvmloader$ +^tools/firmware/hvmloader/roms\.inc$ +^tools/firmware/rombios/BIOS-bochs-[^/]*$ +^tools/firmware/rombios/_rombios[^/]*_\.c$ +^tools/firmware/rombios/rombios[^/]*\.s$ +^tools/firmware/rombios/32bit/32bitbios_flat\.h$ +^tools/firmware/vgabios/vbetables-gen$ +^tools/firmware/vgabios/vbetables\.h$ +^tools/firmware/xen-dir/.*\.old$ +^tools/firmware/xen-dir/linkfarm.stamp.*$ +^tools/firmware/xen-dir/xen-root$ +^tools/firmware/xen-dir/xen-shim$ +^tools/firmware/xen-dir/xen-shim-syms$ +^tools/flask/utils/flask-getenforce$ +^tools/flask/utils/flask-get-bool$ +^tools/flask/utils/flask-loadpolicy$ +^tools/flask/utils/flask-setenforce$ +^tools/flask/utils/flask-set-bool$ +^tools/flask/utils/flask-label-pci$ +^tools/fs-back/fs-backend$ +^tools/hotplug/common/hotplugpath\.sh$ +^tools/include/xen/.*$ +^tools/include/xen-foreign/.*\.(c|h|size)$ +^tools/include/xen-foreign/checker$ +^tools/libxl/_.*\.h$ +^tools/libxl/_.*\.c$ +^tools/libxl/libxlu_cfg_y\.output$ +^tools/libxl/xl$ +^tools/libxl/libxl-save-helper$ +^tools/libxl/testidl$ +^tools/libxl/testidl\.c$ +^tools/libxl/tmp\..*$ +^tools/libxl/.*\.new$ +^tools/libxl/_libxl\.api-for-check +^tools/libxl/libxl\.api-ok +^tools/libvchan/vchan-node[12]$ +^tools/misc/cpuperf/cpuperf-perfcntr$ +^tools/misc/cpuperf/cpuperf-xen$ +^tools/misc/xc_shadow$ +^tools/misc/xen_cpuperf$ +^tools/misc/xen-detect$ +^tools/misc/xen-hptool$ +^tools/misc/xen-hvmcrash$ +^tools/misc/xen-tmem-list-parse$ +^tools/misc/xenperf$ +^tools/misc/xenpm$ +^tools/misc/xen-hvmctx$ +^tools/misc/xen-lowmemd$ +^tools/misc/xenlockprof$ +^tools/misc/xencov$ +^tools/pygrub/build/.*$ +^tools/python/build/.*$ +^tools/python/xen/util/path\.py$ +^tools/python/xen/lowlevel/xl/_pyxl_types.c +^tools/python/xen/lowlevel/xl/_pyxl_types.h +^tools/remus/imqebt/imqebt$ +^tools/remus/kmod/.*(\.cmd|\.mod|\.ko|\.mod\.c|\.symvers|\.xen)$ +^tools/security/secpol_tool$ +^tools/security/xen/.*$ +^tools/security/xensec_tool$ +^tools/tests/x86_emulator/blowfish\.bin$ +^tools/tests/x86_emulator/blowfish\.h$ +^tools/tests/x86_emulator/test_x86_emulator$ +^tools/tests/x86_emulator/x86_emulate$ +^tools/tests/regression/installed/.*$ +^tools/tests/regression/build/.*$ +^tools/tests/regression/downloads/.*$ +^tools/tests/xen-access/xen-access$ +^tools/tests/mem-sharing/memshrtool$ +^tools/tests/mce-test/tools/xen-mceinj$ +^tools/vtpm/tpm_emulator-.*\.tar\.gz$ +^tools/vtpm/tpm_emulator/.*$ +^tools/vtpm/vtpm/.*$ +^tools/vtpm_manager/manager/vtpm_managerd$ +^tools/xcutils/lsevtchn$ +^tools/xcutils/xc_restore$ +^tools/xcutils/xc_save$ +^tools/xcutils/readnotes$ +^tools/misc/xenwatchdogd$ +^tools/xenfb/sdlfb$ +^tools/xenfb/vncfb$ +^tools/xenmon/xentrace_setmask$ +^tools/xenmon/xenbaked$ +^tools/xenpaging/xenpaging$ +^tools/xenpmd/xenpmd$ +^tools/xenstat/xentop/xentop$ +^tools/xenstore/testsuite/tmp/.*$ +^tools/xenstore/init-xenstore-domain$ +^tools/xenstore/xen$ +^tools/xenstore/xenstore$ +^tools/xenstore/xenstore-chmod$ +^tools/xenstore/xenstore-exists$ +^tools/xenstore/xenstore-list$ +^tools/xenstore/xenstore-read$ +^tools/xenstore/xenstore-rm$ +^tools/xenstore/xenstore-write$ +^tools/xenstore/xenstore-control$ +^tools/xenstore/xenstore-ls$ +^tools/xenstore/xenstore-watch$ +^tools/xenstore/xenstored$ +^tools/xenstore/xenstored_test$ +^tools/xenstore/xs_crashme$ +^tools/xenstore/xs_random$ +^tools/xenstore/xs_stress$ +^tools/xenstore/xs_tdb_dump$ +^tools/xenstore/xs_test$ +^tools/xenstore/xs_watch_stress$ +^tools/xentrace/xentrace_setsize$ +^tools/xentrace/tbctl$ +^tools/xentrace/xenctx$ +^tools/xentrace/xentrace$ +^tools/firmware/ovmf-remote +^tools/firmware/ovmf$ +^tools/qemu-xen-traditional-dir-remote +^tools/qemu-xen-traditional-dir$ +^tools/qemu-xen-dir-remote +^tools/qemu-xen-dir$ +^tools/firmware/seabios-dir-remote +^tools/firmware/seabios-dir$ +^tools/ocaml/.*/.*\.annot$ +^tools/ocaml/.*/.*\.cmx?a$ +^tools/ocaml/.*/META$ +^tools/ocaml/.*/\.ocamldep\.make$ +^tools/ocaml/libs/xl/_libxl_types\.ml\.in$ +^tools/ocaml/libs/xl/_libxl_types\.mli\.in$ +^tools/ocaml/libs/xl/_libxl_types\.inc$ +^tools/ocaml/libs/xl/xenlight\.ml$ +^tools/ocaml/libs/xl/xenlight\.mli$ +^tools/ocaml/xenstored/oxenstored$ +^tools/ocaml/test/xtl$ +^tools/ocaml/test/send_debug_keys$ +^tools/ocaml/test/list_domains$ +^tools/autom4te\.cache$ +^tools/config\.h$ +^tools/config\.log$ +^tools/config\.status$ +^tools/config\.cache$ +^config/Tools\.mk$ +^config/Stubdom\.mk$ +^config/Docs\.mk$ +^xen/\.banner.*$ +^xen/System.map$ +^xen/arch/arm/asm-offsets\.s$ +^xen/arch/arm/xen\.lds$ +^xen/arch/x86/asm-offsets\.s$ +^xen/arch/x86/boot/mkelf32$ +^xen/arch/x86/xen\.lds$ +^xen/arch/x86/boot/reloc\.S$ +^xen/arch/x86/boot/reloc\.bin$ +^xen/arch/x86/boot/reloc\.lnk$ +^xen/arch/x86/efi\.lds$ +^xen/arch/x86/efi/check\.efi$ +^xen/arch/x86/efi/disabled$ +^xen/arch/x86/efi/mkreloc$ +^xen/ddb/.*$ +^xen/include/headers\.chk$ +^xen/include/asm$ +^xen/include/asm-.*/asm-offsets\.h$ +^xen/include/compat/.*$ +^xen/include/hypervisor-ifs/arch$ +^xen/include/linux$ +^xen/include/public/public$ +^xen/include/xen/.*\.new$ +^xen/include/xen/acm_policy\.h$ +^xen/include/xen/banner\.h$ +^xen/include/xen/compile\.h$ +^xen/tools/figlet/figlet$ +^xen/tools/symbols$ +^xen/xsm/flask/include/av_perm_to_string\.h$ +^xen/xsm/flask/include/av_permissions\.h$ +^xen/xsm/flask/include/class_to_string\.h$ +^xen/xsm/flask/include/flask\.h$ +^xen/xsm/flask/include/initial_sid_to_string\.h$ +^xen/xen$ +^xen/xen-syms$ +^xen/xen\..*$ +^LibVNCServer.* diff --git a/.hgsigs b/.hgsigs new file mode 100644 index 0000000000..7dc4a61282 --- /dev/null +++ b/.hgsigs @@ -0,0 +1,11 @@ +2a60be40e2cb2a3c62836e690927588c3e31d01c 0 iQEcBAABAgAGBQJNLxyGAAoJEIP+FMlX6CvZUjIH/1R0TcK4zBLl1FdXWF/LnOW+HgezYywSRHuJqNur6TweqVqKxnM6gCqjRvlGOrtWOhtEVnb3FmR7pRX4dEiQnBdO//b30ZbU8zOKvDlB7Pa0U81pcD19tloycV+LbHgulVxXnZXeQRTP/eLsUKTM4GKiqvDNN3EPdZADJyz+0MLf/BCJipXVkgmzbFefFlBDRtw05BGE899kiObqoA6LnPPVvZxBqW4nNxeYR6nK7mgps9RRrgMnt9fyPmSN0+ME1nxhfl6Gd9p9109S5ujHwnzwgO/5X+OQF/F0i1SQVvXsGQyM5eE/ZxHEpEKqtFyWPEIk4/eFLsqmdPAAr5XERaw= +9dca60d88c630fcc7a07ad68fd3a0dce02aee646 0 iQEcBAABAgAGBQJNPtkLAAoJEIP+FMlX6CvZzPMH/Rwsp62u3DXfzune2FBh6WjJerPusvkkhfogDc21Mfy7ed/rJfr2ovLYdiJhc7Ml5F51rLc/1d2FshiCDB9x5nVGyKSx9VfWew6fU/YI5wc2BiQg47d9WM6WI8kP07E51c+ML9nQu9QOE4xI0JpFy2u1jByJtG/Wy9qgLwvhK1OoCjs0Z9/R9h5rvWhi61GpQ1z04/FdMRn0JqSOy7nLb4qWmXrNg5LfddJl63yNcK08HfHyp+KtnrLMNei8T8TKEAv3amC29h2t5xMmVsGMkfakjLuC3k9Jirn29YP25QHNqz405rH3aimFbVnIfwelNW7y+/5jfJ4r8Fnt8Oq0+Y4= +e7b31cc0093c6002effce7d038e929d936ed023f 0 iQEcBAABAgAGBQJNRvWqAAoJEIP+FMlX6CvZwYMH/2TbgdFOUQbzBCp1WgKHA2foq+KFBAl72uyOm3SPeaZID8mGe+jySnZj1zTgdZkuZv3sC510Hsl0EbJ+0cXtdvMemLuZHusRGzvP1cY3fWW6Ltme1EkFlsqEI3opO+mourSo8GVC/BnMqOl7fV8vpGv72BDqXQ/bBM8qgLnYeWN0yale7soR8Akpp27gNcivUUqKSerusHvIYV1mBl9Xg3mfQTCxR+bmM6lp4SXje38wWnqzAEWd5v9YpGKNacc0ca5mxJGz6t+dmr7PSdR5puYsSVU0CK3aWoL8jxGzT/caw03l5dboMaRbBWSD2R0UeZEG4B1C3aXFE9aiBV2I/No= +8df0c7f9cda6cb271a1414114e26f72e1d93a69a 0 iQEcBAABAgAGBQJNVB85AAoJEIP+FMlX6CvZ+aAIAL/+olR1XkxMyQyQlhV6pc9IPONHsUF1+xGcl1p3MRZCk32rNhdCM1NTMEW695Q9CRZ1/aZpCVJKSMNuuA3k6KEFEpyOMmAgWqRUgo7mMS/Jrp2qS0JCkKshQ3SoCJLsa6ENIJLKI/T4ZlUHTAK7MMfg7XjPLgHZU/l84LnpRDSfr8TeoQq4lcWYkAV+ra0VW0KXl1QrV5hMEmZAKqLhKHRYyRKgg3ZM81OHthe+zE8OUOd/yADxvwaovfai6c0wKoyHuRCi9Rzbp/aJbVFBkdDvZqhSWxq+IykC6MI/Yu3BlCTvwKVRgoYOtHJ4twjxln5qw+BExFZo3JfL16jQ6dE= +d2d27d989ebce4325575f871415337cc54891dde 0 iQEcBAABAgAGBQJNXBYbAAoJEIP+FMlX6CvZTGIH/2bxz3UrQNNwsUMmx5tNKwoAzmTjX5IjpsibwZgIlWFTpZhmbdAK5jvUVdPgmAURgPUHIkcic9MRfXZepzqxEyE/zz2itCcDE6oo1ibb2cwn54c2RlHhcweaDzEDroRfcGZ2tEWXIjTEAyNwlhy9IQZ9wC3XAA0wTwXoHx7o9fUs3WSFahr+Cz93w/sc7uQ6LK52WvVvUd7UflSEx2X4uACDknxbKucG6POCxnQ3A+eVXJmdnHak5c+ySsjwu+fHiQ3/ca0JY1RlEF+8NT+aFobZ51kr7acCmFDvOsGd7h6hhgNVe0mujq5pyooklA4qW83/VudS/jOVPnSt+cGhBpE= +7b6791dbfecdb2eba6acd2c8bf0ced17d06746b2 0 iQEcBAABAgAGBQJNa9NOAAoJEIP+FMlX6CvZK+sH/REZ7jV0iWnDbvfPgdl/KlxEVvj4LsmLFAVBa0sEHa8ih+THp3C8Bso7izIs424y667QH6Pq+wAiB5TELOOHRsp6VV5AxYXuNF1Vw9xD9YGUQ5ECAIfc9gldfZZAv4QZayHOgdz4zRnMOrO1D8rqNDVO7BcgNutgf25WtrLsg+mxxyLjcA9Q5Q7a6dY1WSzzSf6beOW9MLh6Hy2pGTzO3CcS6M0Aa6sXZKisy7CWMOueAbwSmRBmw3il1oM62I44ovAJUxBvLTQZm0mNPzeq0IP59rLrGzdhZ76+iE47GK/zGjcC7o/jSQUy6xhuUwgcx3PdB8vzJzNsz6p8mIR+UKo= +6241fa0ad1a939d2eba11bdec929564276f56a9e 0 iQEcBAABAgAGBQJNcSJqAAoJEIP+FMlX6CvZbxEH/206722t0t46MfPq0/buPpQDNiB0HtFZY79u1Yc8xGTo23rQ2NTG10JdCurN2pyxwFesiSIZ4Ua3zqpZ0EA2EN6xAFY9Vua4WEPNJwK8pxxWABcHI017QTidQs41bEaUn92yyfmixq6iYCGvR+b46KWbip/i9Z6vZpw0g3JyOaxgAhkA+p4w90yUIKUkjTrtiuqnI31MUQE0urwWAXQUj78knrqEu3wb91+me1KLH9WzReBB7tt3/GmaK4qSdnHNpIkulVK0XJYzFkJzFr5eHVeYTGFb25Sgir2sIN2gxaCPI3/p90akFMJKmeNV5XCmOQ5g2GWUZTff8LGF6Fk0Me8= +8e620dc570ce42564c1630de5798e23909ee809c 0 iQEcBAABAgAGBQJQFqUYAAoJEIP+FMlX6CvZDGEH/jxUFG29okRASHY6XwFrJ4AU7tLyC8Bt2vAH3ZaA/h1Tn2GWkQXf4tzBAvvwWNBrm1hdj73OaB7dD2l2kvL551AhoSd4/5z+pPtpC72ItwFFTr3Ep9GRZEvEHculuei5IUzw1lxZuNCPCScBxQl+KI+dZHIeP0YO46VZTtG+EeBlj0SJ7JojKN4REd382eIgSLvpEFHCM6vqeCWM9FtDyomiMXdSosDLcWdFauFmV7cdWybA5WPj6bkJenABwX0A1V9uf225S0DTdO0t/7ncZ8h+wXTzqiixywA+lqza+u+HzNyopWmwiFcseFZjuHbKx6M2v0EvKPBcyTgdRZF/+Kg= +f4c47bcc01e13cb2e3b4b71fd588d86278875442 0 iQEcBAABAgAGBQJQIpupAAoJEIP+FMlX6CvZnBwH/3qlibrquTmD2p3rcdVi/JkWixaKK3KH4Ows/76sAJYCdx9YkmtkgC4zyz5aph4Rfy7dYnQIUhbwNNdZNBDd0XOVkjQm0ZX1wQjv3yA3Eq9NOUDmfFWldF+oosOG3h/+MLm/36CkB7gFku1ENQ8kagytXe4rN3QdOiJ9Rz84BAv6nJoT/1OX+m+MlBs948orC23aNEfWxrsrv2s92v5fJcAfSLW/AtER2JnASIxWECJ/TOkuHtrO2QPoBymSnifM2R624L+ySwRxSxo+Owfpooje5eekk0ekifvdYtaJ3pOfoOCv8yGEtb7mXv62WowVkasUZa/q+rGdVpHuK0UlBjI= +d44f290e81df5f78f0e3545742e3c4ff5415b0a7 0 iQEcBAABAgAGBQJQNji7AAoJEIP+FMlX6CvZvBcIAJPiA6ydvolYCvZsfGgafqCpcpG3f+PbUOwQRWfUcaKHPWFKnwRkmx9MAP9tEjXFNZcbimktDrofmee6XfLb8NLnCcHWZT8trRXYTNw2lM6DpK+AROUpAcShF3gCHQEtCJC6+NArD75aUkUji3awbGlhplHbyWvgvSSULhga+2xfYszRC7eI/g+7/f4JNkvqeWllAtd9fwftXaGhQi2V4LT5IimpJI7PivlDi0wi+BtqXHcmZhlnw3zpR51NRujsMVTNZMqe733kGdt8Y8j3vvsfXBye4+YAkEKFrzW3jTYlA9ws71oNVvWmwmOjOHpx6ASfquP3hhAoiHvb2c6Wims= +68640a3c99cefa86ae70fc49871025864e5671f2 0 iQEcBAABAgAGBQJQSdgUAAoJEIP+FMlX6CvZeWUH/1SeYnKXtkt7n+WuMyF2LvCzZQApmOo+hqVB7m0Pe4Yh9bEq1PAE+sJOAoQIBklCpY3WFsNGQN8yIbYyWRzbIM7oavknwoUoSn50zMk12HczqHigXvhL/eOghRKNsK9BrQnRV+byNHRjzSHPReNxpzueKBOTrCMlXtYMDb94swc+hatEDItT4TwZcaNPri3kiWND0DPmOk58Ke96ml9rpomS1ff976hYAZl+N1Q3Pt998SXiaglZ9EeL0Y8cY759XqZII4D4o6/oQW8MzWrQZr4woHHU7MfK3OWslelzP486esHyyjotEWeelhgl/RjIl0crNBbmCWU15BOAw7wSZh4= diff --git a/.hgtags b/.hgtags new file mode 100644 index 0000000000..e9fddab036 --- /dev/null +++ b/.hgtags @@ -0,0 +1,59 @@ +42882b3e0dda89f3a8ec00da568f86e9b3c230f1 RELEASE-2.0.0 +475a162b66e2c19b1e9468b234a4ba705334905e RELEASE-2.0.1 +dc2f08429f17e6614fd2f1ab88cc09ca0a850f32 RELEASE-2.0.2 +6e1bbc13911751efa0b1c018425c1b085820fa02 RELEASE-2.0.3 +fb875591fd72e15c31879c0e9034d99b80225595 RELEASE-2.0.4 +1a522944f76540ea9d73fcc1b0d13d0f670183f0 RELEASE-2.0.5 +2a5814ad2e5634a5fa291b703a152e7fc0b4faf0 RELEASE-2.0.6 +487b2ee37d1cecb5f3e7a546b05ad097a0226f2f beta1 +6a65fe0f84c8339b5b89362d0ec34d8abab752b0 ia64-stable +3d330e41f41ce1bc118c02346e18949ad5d67f6b latest-semistable +30c521db4c71960b0cf1d9c9e1b658e77b535a3e latest-stable +9afec5bc14aeb197ef37ea54a57eacd427463fc3 semistable +30c521db4c71960b0cf1d9c9e1b658e77b535a3e split-1.0 +3d330e41f41ce1bc118c02346e18949ad5d67f6b split-1.1 +c8fdb0caa77b429cf47f9707926e83947778cb48 RELEASE-3.0.0 +af0573e9e5258db0a9d28aa954dd302ddd2c2d23 3.0.2-rc +d0d3fef37685be264a7f52201f8ef44c030daad3 3.0.2-branched +6ed4368b4a9e1924c983774c4b1a2b6baf8e98a6 3.0.3-branched +057f7c4dbed1c75a3fbe446d346cee04cff31497 3.0.4-branched +d2ef85c6bf84cc619ca2d42c2edfc6229e70a6ad 3.1.0-branched +bd3d6b4c52ec809f080c89c4ffcf61dc6e445978 sparse-tree-deprecated +1f0c6e0d74a4acc1d3796ff705adc8485eba9377 3.2.0-rc1 +458dc123dd02d38aaa9acb513d6f237a1c6e967e 3.2.0-rc2 +ed79613b48817d5e0d1f9b3cf104c0e4e8b0d8cf 3.2.0-rc3 +c5deb251b9dcece9e466a48a66d3528ca1797db4 3.2.0-rc4 +36bb2ab4722733d919d32e4555eb46cc6a06cb8f 3.2.0-rc5 +9facc624a238f2b9437b07fa28ff65884aa867f2 3.2.0-rc6 +c3494402098e26507fc61a6579832c0149351d6a 3.3.0-rc1 +dde12ff94c96331668fe38a7b09506fa94d03c34 3.3.0-rc2 +57fca3648f25dcc085ee380954342960a7979987 3.3.0-rc3 +96d0a48e87ee46ba7b73e8c906a7e2e0baf60e2e 3.3.0-rc4 +b4dba6a0e97cb6dd080fa566468e3cc972c34d7a 3.3.0-rc5 +bc372510f1794ee41a8b0501cc84f8a65d05e094 3.3.0-rc6 +daf1193bcd11345d566a4747fe1f12c90b44452c 3.3.0-rc7 +1e99ba54035623731bc7318a8357aa6a118c5da1 3.3.0-branched +d611d9ac6d0271b53eb1d4e5d0c4ef20b269eea8 3.4.0-rc1 +087854cf3ed9e30ce6bcf7499c9675b759e1e9e7 3.4.0-rc2 +22e01301ff64c6f9f835f604523ac019f0f5e993 3.4.0-rc3 +67b5ad8ae87e64159807374ad66d5b5b2fb2ca1f 4.0.0-rc1 +e5e4573bcaba68a8b93a35768c825c1e8daa23be 4.0.0-rc2 +7d565d58f49859a2161f0e74844773d3b3312634 4.0.0-rc3 +912295f1b1f30307975c7514569f6f9c8faae4a7 4.0.0-rc4 +92f2ee87e5018073edc08734b425bc60bcd80bcd 4.0.0-rc5 +b4a1832a916f1e8f2aa2ad5b1efa155f9dd0cb4f 4.0.0-rc6 +ec8f2e7dea44905eb86bb794516506451e4771cb 4.0.0-rc7 +542211ba675c74813ed0df3be686d7cd201e82e9 4.0.0-rc8 +91232efdcfdcfb6402b4c0e3724716655ee42af6 4.0.0-branched +2a60be40e2cb2a3c62836e690927588c3e31d01c 4.1.0-rc1 +9dca60d88c630fcc7a07ad68fd3a0dce02aee646 4.1.0-rc2 +e7b31cc0093c6002effce7d038e929d936ed023f 4.1.0-rc3 +8df0c7f9cda6cb271a1414114e26f72e1d93a69a 4.1.0-rc4 +d2d27d989ebce4325575f871415337cc54891dde 4.1.0-rc5 +7b6791dbfecdb2eba6acd2c8bf0ced17d06746b2 4.1.0-rc6 +6241fa0ad1a939d2eba11bdec929564276f56a9e 4.1.0-branched +8e620dc570ce42564c1630de5798e23909ee809c 4.2.0-rc1 +f4c47bcc01e13cb2e3b4b71fd588d86278875442 4.2.0-rc2 +d44f290e81df5f78f0e3545742e3c4ff5415b0a7 4.2.0-rc3 +68640a3c99cefa86ae70fc49871025864e5671f2 4.2.0-rc4 +528f0708b6db392e10303b7ed2ab529bb8b512b7 4.2.0-branched diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..15ca9e9047 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,88 @@ +language: c +dist: trusty +sudo: required +# don't test master, smoke and coverity branches +branches: + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ +matrix: + include: + - compiler: gcc + env: XEN_TARGET_ARCH=x86_64 debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=x86_64 XEN_CONFIG_EXPERT=y RANDCONFIG=y debug=n + - compiler: gcc-5 + env: XEN_TARGET_ARCH=x86_64 debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=x86_64 debug=y + - compiler: gcc-5 + env: XEN_TARGET_ARCH=x86_64 debug=y + - compiler: clang + env: XEN_TARGET_ARCH=x86_64 clang=y debug=n + - compiler: clang + env: XEN_TARGET_ARCH=x86_64 clang=y debug=y + - compiler: gcc + env: XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- XEN_CONFIG_EXPERT=y RANDCONFIG=y debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=arm32 CROSS_COMPILE=arm-linux-gnueabihf- debug=y + - compiler: gcc + env: XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- XEN_CONFIG_EXPERT=y RANDCONFIG=y debug=n + - compiler: gcc + env: XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- debug=y +addons: + apt: + sources: + - ubuntu-toolchain-r-test + packages: + - zlib1g-dev + - libncurses5-dev + - libssl-dev + - python-dev + - xorg-dev + - uuid-dev + - libyajl-dev + - libaio-dev + - libglib2.0-dev + - libpixman-1-dev + - pkg-config + - flex + - bison + - gettext + - acpica-tools + - bin86 + - bcc + - libc6-dev-i386 + - libnl-3-dev + - ocaml-nox + - libfindlib-ocaml-dev + - transfig + - pandoc + - gcc-arm-linux-gnueabihf + - gcc-aarch64-linux-gnu + - gcc-5 + - g++-5 + - seabios + - checkpolicy + - ghostscript +# we must set CXX manually instead of using 'language: cpp' due to +# travis-ci/travis-ci#3871 +before_script: + - export CXX=${CC/cc/++} + - export CXX=${CXX/clang/clang++} +script: + - ./scripts/travis-build +after_script: + - cat xen/.config + - cat tools/config.log + - cat docs/config.log +notifications: + irc: + channels: + - secure: "mPIFllF6eW3F3talvccMy55Tfcid66IPkkXZYCxDKRF2DQrMyvmg4qt0xN6gGZsdfOBMNr+/YfO5PxusBCUkVdBGBzd3QhFoIDYZbJZgzVh3yNDQ+x4L7p1cZNrwJ2loMmSX6KxGKZxZX9NRStrTUkVyp0jGZB9xkwT8Rl6jXj7EQkgQ95K1Wqafx0ycLfyDQmzX9bzi/3KIBFKMGmK18AFMh+R30zK0FPUUsS4+VhepIkVqO5puU3OYePd34wRnWlt7hjU2Vj5vYmVXp3UOE+E8/Lf9IGVAhitDi+EC35b8zo2BHJ9z6xZARYPvfSqbXcXV20RycabI+e3ufZJ40eatssly5QjWH+HhKS42C4gV1psmQhkTCNCM62Ty5uf6R1hsZJQuiOZrc8ojdje8ey2MxJk4R+Xz+Igg1/kD6+WX9/Y6Y3iRuj5HL1xCYfpTbK4mC7ofw0SofW2aAGI68jHpCqJdQCDzMl6748PlDMM0eKe0MPKIEenYHcoBnOEC/jciXUDa6wduV75EEip7oq2i+m44MopcsEDTpdliH077GhKapF0ActjvBTLpyoTRSfkKm0NZol/dgwd3PGG/mY8clIoeXWRb4opk93ejPC967KmSNC68SlfwaJmFZS5T9vAgb6k7r6i9G3dmYtrLKzws8IV1CPWqLzk58+v4pRk=" diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..5c3d3c791d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,36 @@ +# Changelog + +Notable changes to Xen will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) + +## [Unreleased](https://xenbits.xen.org/gitweb/?p=xen.git;a=shortlog) + +### Added + - This file and MAINTAINERS entry. + - Use x2APIC mode whenever available, regardless of interrupt remapping + support. + - Performance improvements to guest assisted TLB flushes, either when using + the Xen hypercall interface or the viridian one. + - Assorted pvshim performance and scalability improvements plus some bug + fixes. + - Hypervisor framework to ease porting Xen to run on hypervisors. + - Initial support to run on Hyper-V. + - Initial hypervisor file system (hypfs) support. + - libxl support for running qemu-xen device model in a linux stubdomain. + - New 'domid_policy', allowing domain-ids to be randomly chosen. + - Option to preserve domain-id across migrate or save+restore. + - Support in kdd for initial KD protocol handshake for Win 7, 8 and 10 (64 bit). + - Tech preview support for Control-flow Execution Technology, with Xen using + Supervisor Shadow Stacks for its own protection. + +### Changed + - The CPUID data seen by a guest on boot is now moved in the migration + stream. A guest migrating between non-identical hardware will now no + longer observe details such as Family/Model/Stepping, Cache, etc changing. + An administrator still needs to take care to ensure the features visible to + the guest at boot are compatible with anywhere it might migrate. + +## [4.13.0](https://xenbits.xen.org/gitweb/?p=xen.git;a=shortlog;h=RELEASE-4.13.0) - 2019-12-17 + +> Pointer to release from which CHANGELOG tracking starts diff --git a/CODING_STYLE b/CODING_STYLE new file mode 100644 index 0000000000..9f50d9cec4 --- /dev/null +++ b/CODING_STYLE @@ -0,0 +1,237 @@ +Coding Style for the Xen Hypervisor +=================================== + +The Xen coding style described below is the coding style used by the +Xen hypervisor itself (xen/*) as well as various associated low-level +libraries (e.g. tools/libxc/*). + +An exception is made for files which are imported from an external +source. In these cases the prevailing coding style of the upstream +source is generally used (commonly the Linux coding style). + +Other parts of the code base may use other coding styles, sometimes +explicitly (e.g. tools/libxl/CODING_STYLE) but often implicitly (Linux +coding style is fairly common). In general you should copy the style +of the surrounding code. If you are unsure please ask. + +Indentation +----------- + +Indenting uses spaces, not tabs - in contrast to Linux. An indent +level consists of four spaces. Code within blocks is indented by one +extra indent level. The enclosing braces of a block are indented the +same as the code _outside_ the block. e.g. + +void fun(void) +{ + /* One level of indent. */ + + { + /* A second level of indent. */ + } +} + +White space +----------- + +Space characters are used to spread out logical statements, such as in +the condition of an if or while. Spaces are placed between the +keyword and the brackets surrounding the condition, between the +brackets and the condition itself, and around binary operators (except +the structure access operators, '.' and '->'). e.g. + +if ( (wibble & wombat) == 42 ) +{ + ... + +There should be no trailing white space at the end of lines (including +after the opening /* of a comment block). + +Line Length +----------- + +Lines should be less than 80 characters in length. Long lines should +be split at sensible places and the trailing portions indented. + +User visible strings (e.g., printk() messages) should not be split so +they can searched for more easily. + +Bracing +------- + +Braces ('{' and '}') are usually placed on a line of their own, except +for the do/while loop. This is unlike the Linux coding style and +unlike K&R. do/while loops are an exception. e.g.: + +if ( condition ) +{ + /* Do stuff. */ +} +else +{ + /* Other stuff. */ +} + +while ( condition ) +{ + /* Do stuff. */ +} + +do { + /* Do stuff. */ +} while ( condition ); + +etc. + +Braces should be omitted for blocks with a single statement. e.g., + +if ( condition ) + single_statement(); + +Types +----- + +Use basic C types and C standard mandated typedef-s where possible (and +with preference in this order). This in particular means to avoid u8, +u16, etc despite those types continuing to exist in our code base. +Fixed width types should only be used when a fixed width quantity is +meant (which for example may be a value read from or to be written to a +register). + +Especially with pointer types, whenever the pointed to object is not +(supposed to be) modified, qualify the pointed to type with "const". + +Comments +-------- + +Only C style /* ... */ comments are to be used. C++ style // comments +should not be used. Multi-word comments should begin with a capital +letter. Comments containing a single sentence may end with a full +stop; comments containing several sentences must have a full stop +after each sentence. + +Multi-line comment blocks should start and end with comment markers on +separate lines and each line should begin with a leading '*'. + +/* + * Example, multi-line comment block. + * + * Note beginning and end markers on separate lines and leading '*'. + */ + +Emacs local variables +--------------------- + +A comment block containing local variables for emacs is permitted at +the end of files. It should be: + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ + +Handling unexpected conditions +------------------------------ + +GUIDELINES: + +Passing errors up the stack should be used when the caller is already +expecting to handle errors, and the state when the error was +discovered isn’t broken, or isn't too hard to fix. + +domain_crash() should be used when passing errors up the stack is too +difficult, and/or when fixing up state of a guest is impractical, but +where fixing up the state of Xen will allow Xen to continue running. +This is particularly appropriate when the guest is exhibiting behavior +well-behaved guests shouldn't. + +BUG_ON() should be used when you can’t pass errors up the stack, and +either continuing or crashing the guest would likely cause an +information leak or privilege escalation vulnerability. + +ASSERT() IS NOT AN ERROR HANDLING MECHANISM. ASSERT is a way to move +detection of a bug earlier in the programming cycle; it is a +more-noticeable printk. It should only be added after one of the +other three error-handling mechanisms has been evaluated for +reliability and security. + +RATIONALE: + +It's frequently the case that code is written with the assumption that +certain conditions can never happen. There are several possible +actions programmers can take in these situations: + +* Programmers can simply not handle those cases in any way, other than +perhaps to write a comment documenting what the assumption is. + +* Programmers can try to handle the case gracefully -- fixing up +in-progress state and returning an error to the user. + +* Programmers can crash the guest. + +* Programmers can use ASSERT(), which will cause the check to be +executed in DEBUG builds, and cause the hypervisor to crash if it's +violated + +* Programmers can use BUG_ON(), which will cause the check to be +executed in both DEBUG and non-DEBUG builds, and cause the hypervisor +to crash if it's violated. + +In selecting which response to use, we want to achieve several goals: + +- To minimize risk of introducing security vulnerabilities, + particularly as the code evolves over time + +- To efficiently spend programmer time + +- To detect violations of assumptions as early as possible + +- To minimize the impact of bugs on production use cases + +The guidelines above attempt to balance these: + +- When the caller is expecting to handle errors, and there is no +broken state at the time the unexpected condition is discovered, or +when fixing the state is straightforward, then fixing up the state and +returning an error is the most robust thing to do. However, if the +caller isn't expecting to handle errors, or if the state is difficult +to fix, then returning an error may require extensive refactoring, +which is not a good use of programmer time when they're certain that +this condition cannot occur. + +- BUG_ON() will stop all hypervisor action immediately. In situations +where continuing might allow an attacker to escalate privilege, a +BUG_ON() can change a privilege escalation or information leak into a +denial-of-service (an improvement). But in situations where +continuing (say, returning an error) might be safe, then BUG_ON() can +change a benign failure into denial-of-service (a degradation). + +- domain_crash() is similar to BUG_ON(), but with a more limited +effect: it stops that domain immediately. In situations where +continuing might cause guest or hypervisor corruption, but destroying +the guest allows the hypervisor to continue, this can change a more +serious bug into a guest denial-of-service. But in situations where +returning an error might be safe, then domain_crash() can change a +benign failure into a guest denial-of-service. + +- ASSERT() will stop the hypervisor during development, but allow +hypervisor action to continue during production. In situations where +continuing will at worst result in a denial-of-service, and at best +may have little effect other than perhaps quirky behavior, using an +ASSERT() will allow violation of assumptions to be detected as soon as +possible, while not causing undue degradation in production +hypervisors. However, in situations where continuing could cause +privilege escalation or information leaks, using an ASSERT() can +introduce security vulnerabilities. + +Note however that domain_crash() has its own traps: callers far up the +call stack may not realize that the domain is now dying as a result of +an innocuous-looking operation, particularly if somewhere on the +callstack between the initial function call and the failure, no error +is returned. Using domain_crash() requires careful inspection and +documentation of the code to make sure all callers at the stack handle +a newly-dead domain gracefully. diff --git a/CONTRIBUTING b/CONTRIBUTING new file mode 100644 index 0000000000..6ec146baf0 --- /dev/null +++ b/CONTRIBUTING @@ -0,0 +1,231 @@ + +CONTRIBUTING +============ + +INBOUND LICENSE +--------------- + +Contributions are governed by the license that applies to relevant +specific file or by the license specified in the COPYING file, that +governs the license of its containing directory and its subdirectories. + +Most of the Xen Project code is licensed under GPLv2, but a number of +directories are primarily licensed under different licenses. + +Most notably: + - tools/libs : LGPL v2.1 + - tools/libxc : LGPL v2.1 + - tools/libxl : LGPL v2.1 + - tools/xl : LGPL v2.1 + - xen/include/public : MIT license + +The COMMON COPYRIGHT NOTICES section of this document contains +sample copyright notices for the most common licenses used within +this repository. + +When creating new components, new files, or importing code please follow +the conventions outlined below. As a general rule, whenever code using a +license other than GPLv2 is introduced, attention must be drawn to the +difference, such that maintainers can make an informed decision about the +deviation. Any new code must be GPLv2 compatible. + +New components +-------------- + +When creating new components and directories that contain a +significant amount of files that are licensed under licenses other +than GPLv2 or the license specified in the COPYING file, please +create a new COPYING file in that directory containing a copy of the +license text and a rationale for using a different license. This helps +ensure that the license of this new component/directory is maintained +consistently with the original intention. + +New files +--------- + +If specific files that differ from the license in a directory are introduced, +exceptions should be highlighted and discussed in the commit message or cover +letter introducing the file. + +Importing code +-------------- + +When importing code from other upstream projects into this repository, +please create a README.source file in the directory the code is imported +to, listing the original source of the code. An example can be found at +m4/README.source + +Developer's Certificate of Origin +--------------------------------- + +All patches to the Xen Project code base must include the line +"Signed-off-by: your_name " at the end of the change +description. This is required and indicates that you certify the patch +under the "Developer's Certificate of Origin" which states: + + Developer's Certificate of Origin 1.1 + + By making a contribution to this project, I certify that: + + (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + + (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + + (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + + (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +GOVERNANCE AND WORKFLOW +----------------------- + +The following documents provide a general overview of governance and +contribution guidelines for the Xen Project: + - https://xenproject.org/governance.html + - https://xenproject.org/help/contribution-guidelines.html + +For more information on contributing to this repository, see + - CODING_STYLE file in this directory + - https://wiki.xenproject.org/wiki/Submitting_Xen_Project_Patches + - https://wiki.xenproject.org/wiki/Submitting_Xen_Patches_with_Git + - https://wiki.xenproject.org/wiki/Asking_Developer_Questions + - https://wiki.xenproject.org/wiki/Category:Developers + + +COMMON COPYRIGHT NOTICES +======================== + +The following section contains sample copyright notice for the most +common licenses used within the Xen Project that is consistent with the +projects coding standards. + +GPL v2 License +-------------- + +/* + * + * + * + * + * Copyright (C) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms and conditions of the GNU General Public + * License, version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; If not, see . + */ + + +LGPL v2.1 License +----------------- + +/* + * + * + * + * + * Copyright (C) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License, version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; If not, see . + */ + +BSD-Modified License (also known as BSD-3-Clause) +------------------------------------------------- + +/* + * + * + * + * + * Copyright (C) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +MIT License +----------- + +/* + * + * + * + * + * Copyright (C) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..a4bc2b2dd4 --- /dev/null +++ b/COPYING @@ -0,0 +1,416 @@ + +GNU General Public License +-------------------------- + +Most files in this repository are licensed under the terms of the GNU +General Public License (GPL), a copy of which is attached at the end +of this notice. Note that the only valid version of the GPL as far as +the files in this repository are concerned is _this_ particular +version of the license (i.e., *only* v2, not v2.2 or v3.x or +whatever), unless explicitly otherwise stated. + +Some code fragments in the hypervisor and associated subsystems +include other license stanzas: the most common ones are listed in +the *License Exceptions* section of this file. + +When these code sections are compiled as part of a +GPLv2-licensed program, such as Xen, the result is licensed under +GPLv2. See the FSF's definition of GPL compatibility: + http://www.gnu.org/licenses/gpl-faq.html#WhatDoesCompatMean +And how this applies to a range of open source licenses: + http://www.gnu.org/licenses/license-list.html + +A number of files will also specify GPL exceptions, such as + - Autoconf exception + - Bison exception + - GCC exception + +In addition the xen directory also contains a XEN NOTICE clarifying +what constitutes a derived work, which applies to the xen directory +and its subdirectories (see xen/COPYING). + +Licensing Exceptions +-------------------- + +For the convenience of users and those who are porting OSes to run as +Xen guests, certain files in this repository are not subject to the +GPL when distributed separately or included in software packages +outside this repository. + +Instead we specify more relaxed licenses, depending on need, such as + - BSD style license (BSD Original, BSD Modified, Intel BSD) + - MIT license + - LGPL 2.1 + +Affected files include the Xen interface headers (xen/include/public), +various drivers, support functions and header files within Xen-aware +Linux source trees. In all such cases, license terms are stated at the +top of the file or in a COPYING file in the same directory. + +Sphinx documentation is licensed under CC-BY 4.0. See +docs/README.source for more specific information. + +In some cases, compatible 3rd party code has been imported into the +Xen tree, retaining the original license, such as + - AES-128 3.0 + - FSF Unlimited License + - Laurikari License + - Public Domain + - ZLIB License + +Significant code imports are highlighted in a README.source file +in the directory into which the file or code snippet was imported. + +Note that *any* file that is modified and then distributed within a +Linux kernel is still subject to the GNU GPL. + +Contributions +------------- + +Contributions are governed by the license that applies to the relevant +specific file or by the license specified in the COPYING file, that +governs the license of its containing directory and its subdirectories. + +For more information, see the CONTRIBUTING file. + +===================================================================== + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; If not, see . + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000000..3ddcdbaac6 --- /dev/null +++ b/CREDITS @@ -0,0 +1,16 @@ + This is at least a partial credits-file of people that have + contributed to the Xen project. It is sorted by name and + formatted to allow easy grepping and beautification by + scripts. The fields are: name (N), email (E), web-address + (W), PGP key ID and fingerprint (P), description (D), and + snail-mail address (S). + Thanks, + + Xen team +---------- + +N: Jeremy Fitzhardinge +E: jeremy@goop.org +W: http://www.goop.org/~jeremy +P: 1B40B6D0 +D: Linux pvops diff --git a/Config.mk b/Config.mk new file mode 100644 index 0000000000..ba5eb4ea3c --- /dev/null +++ b/Config.mk @@ -0,0 +1,268 @@ +# -*- mode: Makefile; -*- + +ifeq ($(filter /%,$(XEN_ROOT)),) +$(error XEN_ROOT must be absolute) +endif + +# Convenient variables +comma := , +open := ( +close := ) +squote := ' +#' Balancing squote, to help syntax highlighting +empty := +space := $(empty) $(empty) + +# fallback for older make +realpath = $(wildcard $(foreach file,$(1),$(shell cd -P $(dir $(file)) && echo "$$PWD/$(notdir $(file))"))) +or = $(if $(strip $(1)),$(1),$(if $(strip $(2)),$(2),$(if $(strip $(3)),$(3),$(if $(strip $(4)),$(4))))) + +-include $(XEN_ROOT)/.config + +XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \ + -e s/i86pc/x86_32/ -e s/amd64/x86_64/ \ + -e s/armv7.*/arm32/ -e s/armv8.*/arm64/ \ + -e s/aarch64/arm64/) + +XEN_TARGET_ARCH ?= $(XEN_COMPILE_ARCH) +XEN_OS ?= $(shell uname -s) + +CONFIG_$(XEN_OS) := y + +SHELL ?= /bin/sh + +# Tools to run on system hosting the build +HOSTCFLAGS = -Wall -Werror -Wstrict-prototypes -O2 -fomit-frame-pointer +HOSTCFLAGS += -fno-strict-aliasing + +DISTDIR ?= $(XEN_ROOT)/dist +DESTDIR ?= / + +# Allow phony attribute to be listed as dependency rather than fake target +.PHONY: .phony + +# If we are not cross-compiling, default HOSTC{C/XX} to C{C/XX} +ifeq ($(XEN_TARGET_ARCH), $(XEN_COMPILE_ARCH)) +HOSTCC ?= $(CC) +HOSTCXX ?= $(CXX) +endif + +# Use Clang/LLVM instead of GCC? +clang ?= n +ifeq ($(clang),n) +gcc := y +HOSTCC ?= gcc +HOSTCXX ?= g++ +else +gcc := n +HOSTCC ?= clang +HOSTCXX ?= clang++ +endif + +DEPS_INCLUDE = $(addsuffix .d2, $(basename $(wildcard $(DEPS)))) +DEPS_RM = $(DEPS) $(DEPS_INCLUDE) + +%.d2: %.d + sed "s! $$PWD/! !" $^ >$@.tmp && mv -f $@.tmp $@ + +include $(XEN_ROOT)/config/$(XEN_OS).mk +include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk + +ifneq ($(EXTRA_PREFIX),) +EXTRA_INCLUDES += $(EXTRA_PREFIX)/include +EXTRA_LIB += $(EXTRA_PREFIX)/lib +endif + +PYTHON ?= python +PYTHON_PREFIX_ARG ?= --prefix="$(prefix)" +# The above requires that prefix contains *no spaces*. This variable is here +# to permit the user to set PYTHON_PREFIX_ARG to '' to workaround this bug: +# https://bugs.launchpad.net/ubuntu/+bug/362570 + +# cc-option: Check if compiler supports first option, else fall back to second. +# +# This is complicated by the fact that unrecognised -Wno-* options: +# (a) are ignored unless the compilation emits a warning; and +# (b) even then produce a warning rather than an error +# To handle this we do a test compile, passing the option-under-test, on a code +# fragment that will always produce a warning (integer assigned to pointer). +# We then grep for the option-under-test in the compiler's output, the presence +# of which would indicate an "unrecognized command-line option" warning/error. +# +# Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586) +cc-option = $(shell if test -z "`echo 'void*p=1;' | \ + $(1) $(2) -c -o /dev/null -x c - 2>&1 | grep -- $(2:-Wa$(comma)%=%) -`"; \ + then echo "$(2)"; else echo "$(3)"; fi ;) + +# cc-option-add: Add an option to compilation flags, but only if supported. +# Usage: $(call cc-option-add CFLAGS,CC,-march=winchip-c6) +cc-option-add = $(eval $(call cc-option-add-closure,$(1),$(2),$(3))) +define cc-option-add-closure + ifneq ($$(call cc-option,$$($(2)),$(3),n),n) + $(1) += $(3) + endif +endef + +cc-options-add = $(foreach o,$(3),$(call cc-option-add,$(1),$(2),$(o))) + +# cc-ver: Check compiler against the version requirement. Return boolean 'y'/'n'. +# Usage: ifeq ($(call cc-ver,$(CC),ge,0x030400),y) +cc-ver = $(shell if [ $$((`$(1) -dumpversion | awk -F. \ + '{ printf "0x%02x%02x%02x", $$1, $$2, $$3}'`)) -$(2) $$(($(3))) ]; \ + then echo y; else echo n; fi ;) + +# cc-ver-check: Check compiler is at least specified version, else fail. +# Usage: $(call cc-ver-check,CC,0x030400,"Require at least gcc-3.4") +cc-ver-check = $(eval $(call cc-ver-check-closure,$(1),$(2),$(3))) +define cc-ver-check-closure + ifeq ($$(call cc-ver,$$($(1)),ge,$(2)),n) + override $(1) = echo "*** FATAL BUILD ERROR: "$(3) >&2; exit 1; + cc-option := n + endif +endef + +# Require GCC v4.1+ +check-$(gcc) = $(call cc-ver-check,CC,0x040100,"Xen requires at least gcc-4.1") +$(eval $(check-y)) + +ld-ver-build-id = $(shell $(1) --build-id 2>&1 | \ + grep -q build-id && echo n || echo y) + +export XEN_HAS_BUILD_ID ?= n +ifeq ($(call ld-ver-build-id,$(LD)),n) +build_id_linker := +else +CFLAGS += -DBUILD_ID +export XEN_HAS_BUILD_ID=y +build_id_linker := --build-id=sha1 +endif + +ifndef XEN_HAS_CHECKPOLICY + CHECKPOLICY ?= checkpolicy + XEN_HAS_CHECKPOLICY := $(shell $(CHECKPOLICY) -h 2>&1 | grep -q xen && echo y || echo n) + export XEN_HAS_CHECKPOLICY +endif + +define buildmakevars2shellvars + export PREFIX="$(prefix)"; \ + export XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)"; \ + export XEN_ROOT="$(XEN_ROOT)" +endef + +# +# Compare $(1) and $(2) and replace $(2) with $(1) if they differ +# +# Typically $(1) is a newly generated file and $(2) is the target file +# being regenerated. This prevents changing the timestamp of $(2) only +# due to being auto regenereated with the same contents. +define move-if-changed + if ! cmp -s $(1) $(2); then mv -f $(1) $(2); else rm -f $(1); fi +endef + +BUILD_MAKE_VARS := sbindir bindir LIBEXEC LIBEXEC_BIN libdir SHAREDIR \ + XENFIRMWAREDIR XEN_CONFIG_DIR XEN_SCRIPT_DIR XEN_LOCK_DIR \ + XEN_RUN_DIR XEN_PAGING_DIR XEN_DUMP_DIR XEN_LOG_DIR \ + XEN_LIB_DIR XEN_RUN_STORED + +buildmakevars2file = $(eval $(call buildmakevars2file-closure,$(1))) +define buildmakevars2file-closure + $(1): .phony + rm -f $(1).tmp; \ + $(foreach var, $(BUILD_MAKE_VARS), \ + echo "$(var)=\"$($(var))\"" >>$(1).tmp;) \ + $(call move-if-changed,$(1).tmp,$(1)) +endef + +buildmakevars2header = $(eval $(call buildmakevars2header-closure,$(1))) +define buildmakevars2header-closure + $(1): .phony + rm -f $(1).tmp; \ + $(foreach var, $(BUILD_MAKE_VARS), \ + echo "#define $(var) \"$($(var))\"" >>$(1).tmp;) \ + $(call move-if-changed,$(1).tmp,$(1)) +endef + +CFLAGS += -fno-strict-aliasing + +CFLAGS += -std=gnu99 + +CFLAGS += -Wall -Wstrict-prototypes + +$(call cc-option-add,HOSTCFLAGS,HOSTCC,-Wdeclaration-after-statement) +$(call cc-option-add,CFLAGS,CC,-Wdeclaration-after-statement) +$(call cc-option-add,CFLAGS,CC,-Wno-unused-but-set-variable) +$(call cc-option-add,CFLAGS,CC,-Wno-unused-local-typedefs) + +LDFLAGS += $(foreach i, $(EXTRA_LIB), -L$(i)) +CFLAGS += $(foreach i, $(EXTRA_INCLUDES), -I$(i)) +LDFLAGS += $(foreach i, $(PREPEND_LIB), -L$(i)) +CFLAGS += $(foreach i, $(PREPEND_INCLUDES), -I$(i)) +ifeq ($(XEN_TOOLS_RPATH),y) +LDFLAGS += -Wl,-rpath,$(libdir) +endif +APPEND_LDFLAGS += $(foreach i, $(APPEND_LIB), -L$(i)) +APPEND_CFLAGS += $(foreach i, $(APPEND_INCLUDES), -I$(i)) + +EMBEDDED_EXTRA_CFLAGS := -nopie -fno-stack-protector -fno-stack-protector-all +EMBEDDED_EXTRA_CFLAGS += -fno-exceptions -fno-asynchronous-unwind-tables + +XEN_EXTFILES_URL ?= http://xenbits.xen.org/xen-extfiles +# All the files at that location were downloaded from elsewhere on +# the internet. The original download URL is preserved as a comment +# near the place in the Xen Makefiles where the file is used. + +# Where to look for inlined subtrees (for example, from a tarball) +QEMU_UPSTREAM_INTREE ?= $(XEN_ROOT)/tools/qemu-xen +QEMU_TRADITIONAL_INTREE ?= $(XEN_ROOT)/tools/qemu-xen-traditional + + +# Handle legacy options +ifneq (,$(SEABIOS_UPSTREAM_TAG)) +SEABIOS_UPSTREAM_REVISION ?= $(SEABIOS_UPSTREAM_TAG) +endif +ifneq (,$(QEMU_REMOTE)) +QEMU_TRADITIONAL_URL ?= $(QEMU_REMOTE) +endif +ifneq (,$(CONFIG_QEMU)) +QEMU_TRADITIONAL_LOC ?= $(CONFIG_QEMU) +endif +ifneq (,$(QEMU_TAG)) +QEMU_TRADITIONAL_REVISION ?= $(QEMU_TAG) +endif + +ifeq ($(GIT_HTTP),y) +OVMF_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/ovmf.git +QEMU_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/qemu-xen.git +QEMU_TRADITIONAL_URL ?= http://xenbits.xen.org/git-http/qemu-xen-traditional.git +SEABIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/seabios.git +MINIOS_UPSTREAM_URL ?= http://xenbits.xen.org/git-http/mini-os.git +else +OVMF_UPSTREAM_URL ?= git://xenbits.xen.org/ovmf.git +QEMU_UPSTREAM_URL ?= git://xenbits.xen.org/qemu-xen.git +QEMU_TRADITIONAL_URL ?= git://xenbits.xen.org/qemu-xen-traditional.git +SEABIOS_UPSTREAM_URL ?= git://xenbits.xen.org/seabios.git +MINIOS_UPSTREAM_URL ?= git://xenbits.xen.org/mini-os.git +endif +OVMF_UPSTREAM_REVISION ?= 20d2e5a125e34fc8501026613a71549b2a1a3e54 +QEMU_UPSTREAM_REVISION ?= qemu-xen-4.14.5 +MINIOS_UPSTREAM_REVISION ?= xen-RELEASE-4.14.5 + +SEABIOS_UPSTREAM_REVISION ?= rel-1.13.0 + +ETHERBOOT_NICS ?= rtl8139 8086100e + + +QEMU_TRADITIONAL_REVISION ?= xen-4.14.5 + +# Specify which qemu-dm to use. This may be `ioemu' to use the old +# Mercurial in-tree version, or a local directory, or a git URL. +# QEMU_UPSTREAM_LOC ?= `pwd`/$(XEN_ROOT)/../qemu-xen.git + +# Defaults for subtree locations +QEMU_TRADITIONAL_LOC ?= $(call or,$(wildcard $(QEMU_TRADITIONAL_INTREE)),\ + $(QEMU_TRADITIONAL_URL)) + +QEMU_UPSTREAM_LOC ?= $(call or,$(wildcard $(QEMU_UPSTREAM_INTREE)),\ + $(QEMU_UPSTREAM_URL)) + +CONFIG_TESTS ?= y diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000000..0d3eb89f02 --- /dev/null +++ b/INSTALL @@ -0,0 +1,369 @@ + +Compiling Xen from source + +* Overview +* Options recognized by configure +* Variables recognized by make +* Systemd support +* History of options +* Examples + +Overview +======== + +The xen source contains four subsystems: xen, tools, stubdom and docs. +All but xen have to be prepared for build with a configure script in the +toplevel directory. configure recognizes certain arguments and +environment variables which are used to adjust various aspects of the +following compile process. Once configure is done, make(1) has to be +called. Also make(1) recognizes certain arguments. The following sections +will give an overview. + +Xen Hypervisor +============== + +Xen itself is configured via a `kconfig' system borrowed from Linux. +See docs/misc/kconfig.txt. + +Note that unlike with Linux, and contrary to that document, you cannot +look at Kconfig files, or the default or generated config files etc., +to find available configuration options. This is because it is only +supported (and security supported) by the Xen Project, to change a +small subset of the options. Attempts to change other options will be +silently overridden. The only way to find which configuration options +are available is to run `make menuconfig' or the like. + +You can counter-override this behaviour by setting XEN_CONFIG_EXPERT=y +in your environment. However, doing this is not supported and the +resulting configurations do not receive security support. If you set +this variable there is nothing stopping you setting dangerously +experimental combinations of features - not even any warnings. + +Options recognized by configure +=============================== + +The configure script in the toplevel directory will recognize these +options. It will pass them to the configure scripts in the tools, +stubdom, and docs directory. + +Individual subsystems can be selected by one of the following options. +Please note that stubdom requires tools. + --disable-xen + --disable-tools + --enable-stubdom + --disable-docs + +The well known GNU configure options to specify the target directories. +Some components of these paths will be compiled into the binaries. +Note: prefix defaults to /usr/local, sysconfdir defaults to /etc, +localstatedir defaults to /var. + --prefix=DIR + --libdir=DIR + --libexecdir=BASEDIR + --bindir=DIR + --sbindir=DIR + --sysconfdir=DIR + --sharedstatedir=DIR + --localstatedir=DIR + --includedir=DIR + --datarootdir=DIR + --datadir=DIR + --mandir=DIR + --docdir=DIR + +To automatically run the toolstack in dom0 during system startup some +sysv runlevel scripts are installed. This option allows to set the path +for a given system. Possible values are /etc/init.d, /etc/rc.d/init.d or +/etc/rc.d. If not specified configure tries to guess the path. + --with-initddir=DIR + +The runlevel scripts load certain configuration files. They are +typically located in a subdirectory of /etc. Possible values are this +subdirectory are "sysconfig" or "default". If not specified configure +tries to guess the subdir. + --with-sysconfig-leaf-dir=SUBDIR + +If the tools are configured with a non-standard --prefix the runtime +linker will either not find the required libraries or it will load them +from a wrong location. Compiling the tools with rpath will force the +linker to look in the correct location. + --enable-rpath + +During build in a git checkout the buildsystem needs to download +additional tools such as qemu. This is done with either the native git +protocol, or via http if this option is enabled. + --enable-githttp + +Disable xenstat and xentop monitoring tools. + --disable-monitors + +Disable build of certain ocaml libraries and tools. To actually build +them ocaml development packages must be installed. If they are missing +configure will automatically disable this option. + --disable-ocamltools + +Disable XSM policy compilation. + --disable-xsmpolicy + +Attempt to build of an OVMF firmware binary. This requires special +versions of development tools. Use at your own risk. + --enable-ovmf + +Use the given OVMF binary instead of compiling a private copy. + --with-system-ovmf=PATH + +Build a private copy of SeaBIOS. + --disable-seabios + +Use the given SeaBIOS binary instead of compiling a private copy. + --with-system-seabios=PATH + +Build the old qemu used by xm/xend. This is required if existing domUs +should be migrated to this host, or if existing domU snapshots should be +started with this version of the tools. Only if all domUs used the new +upstream qemu during initial start it is safe to disable this option. +The old qemu requires rombios, which can be disable along with +qemu-traditional. + --enable-qemu-traditional + --enable-rombios + +The libxl toolstack uses the upstream qemu per default. A private copy +will be built. If desired this private copy can be configured with +additional options passed to its configure script. + --with-extra-qemuu-configure-args="arg1 arg2" + +Use the given qemu binary instead of compiling a private copy. + --with-system-qemu=PATH + +A dom0 requires a set of backend drivers. The configure script already +supplies a list of known drivers which are automatically loaded in dom0. +This internal list can be changed with this option. + --with-linux-backend-modules="kmod1 kmod2" + +Two variants of a xenstored exist: the original xenstored written in C +(xenstored) or the newer and robust one written in Ocaml (oxenstored). +The oxenstored daemon is the default but can only be used if the +required ocaml packages are installed. In case they are missing the +original xenstored will be used. Valid names are xenstored and +oxenstored. + --with-xenstored=name + +The path where to store core dumps for domUs which are configured with +coredump-destroy or coredump-restart can be specified with this option. + --with-xen-dumpdir=DIR + +Instead of starting the tools in dom0 with sysv runlevel scripts they +can also be started by systemd. If this option is enabled xenstored will +receive the communication socked directly from systemd. So starting it +manually will not work anymore. The paths to systemd internals can also +be changed in case the default paths do not fit anymore. +NOTE: if systemd development packages are installed the systemd support +will be the enabled per default. Using --disable-systemd will override +this detection and the sysv runlevel scripts have to be used. + --enable-systemd + --with-systemd=DIR + --with-systemd-modules-load=DIR + +Build various stubom components, some are only example code. Its usually +enough to specify just --enable-stubdom and leave these options alone. + --enable-ioemu-stubdom + --enable-c-stubdom + --enable-caml-stubdom + --disable-pv-grub + --disable-xenstore-stubdom + --enable-vtpm-stubdom + --enable-vtpmmgr-stubdom + --disable-extfiles + +Per default some parts of the tools code will print additional runtime +debug. This option can be used to disable such code paths. + --disable-debug + +The configure script recognizes also many environment variables. Calling +the individual configure scripts in the subdirectories with the "--help" +option will list these environment variables. + +Variables recognized by make +========================== + +The following variables are recognized by the build system. They have to +be passed as make options, like 'make variable=value'. Having these +variables in the environment, like 'env variable=value make', will not +work for most of them. + +In addition to pass variables as make options it is also supported to +create a ".config" file in the toplevel directory. The file will be +sourced by make(1). + +The well known variable to specify an offset during make install, +useful for packaging. +DESTDIR= + +Per default some parts of the tools code will print additional runtime +debug. This option can be used to disable such code paths. +debug=y +debug_symbols=y + +If --prefix= was used during configure the and ocaml was enabled the +resulting libraries will not be installed in the specified path. Instead +the path provided by ocamlfind(1) will be used. This variable can be +used to override this path. Using the environment variable +OCAMLFIND_DESTDIR= and OCAMLFIND_METADIR= will have the same effect. +OCAMLDESTDIR= + +The xen subsystem will install the hypervisor into fixed locations. +BOOT_DIR defaults to /boot, DEBUG_DIR defaults to /usr/lib/debug and +EFI_DIR to /usr/lib64/efi. +BOOT_DIR= +DEBUG_DIR= +EFI_DIR= + +The make target 'rpmball' will build a xen.rpm. This variable can be +used to append a custom string to the name. In addition a string can be +appended to the rpm Release: tag. +PKG_SUFFIX= +PKG_RELEASE= + +The hypervisor will report a certain version string. This variable can +be used to append a custom string to the version. +XEN_VENDORVERSION= + +During boot xen will report a certain user@host string, which can be +changed with these variables. +XEN_WHOAMI= +XEN_DOMAIN= + +Some components of xen and tools will include an unpredictable timestamp +into the binaries. To allow reproducible builds the following variables +can be used to provide fixed timestamps in the expected format. +XEN_BUILD_DATE= +XEN_BUILD_TIME=hh:mm:ss +SMBIOS_REL_DATE=mm/dd/yyyy +VGABIOS_REL_DATE="dd Mon yyyy" + +This variable can be used to point to a different git binary to be used. +GIT= + +During tools build external repos will be cloned into the source tree. +During stubdom build external packages will be downloaded into the +source tree. These variables can be used to point to a different +locations. +XEN_EXTFILES_URL= +OVMF_UPSTREAM_URL= +QEMU_UPSTREAM_URL= +QEMU_TRADITIONAL_URL= +SEABIOS_UPSTREAM_URL= +MINIOS_UPSTREAM_URL= + +Using additional CFLAGS to build tools which will run in dom0 is +required when building distro packages. These variables can be used to +pass RPM_OPT_FLAGS. +EXTRA_CFLAGS_XEN_TOOLS= +EXTRA_CFLAGS_QEMU_TRADITIONAL= +EXTRA_CFLAGS_QEMU_XEN= + +Additional CFLAGS may be supplied to the build of the hypervisor by +using this variable. +EXTRA_CFLAGS_XEN_CORE= + +This variable can be used to use DIR/include and DIR/lib during build. +This is the same as PREPEND_LIB and PREPEND_INCLUDES. APPEND_LIB and +APPEND_INCLUDES= will be appended to the CFLAGS/LDFLAGS variable. +EXTRA_PREFIX=DIR +PREPEND_LIB=DIR +PREPEND_INCLUDES=DIR +APPEND_LIB=DIR +APPEND_INCLUDES=DIR + +While the tools build will set the path to the python binary with the +configure script, the hypervisor build has to use this variable to use a +different python binary. +PYTHON= + +Building the python tools may fail unless certain options are passed to +setup.py. Config.mk contains additional info how to use this variable. +PYTHON_PREFIX_ARG= + +The hypervisor may be built with XSM/Flask support, which can be changed +by running: +make -C xen menuconfig +and enabling XSM/Flask in the 'Common Features' menu. A security policy +is required to use XSM/Flask; if the SELinux policy compiler is +available, the policy from tools can be included in the hypervisor. +This option is enabled by default if XSM is enabled and the compiler +(checkpolicy) is found. The location of this executable can be set +using the environment variable. +CHECKPOLICY= + +Use clang instead of GCC. +clang=y + + +Systemd support +=============== + +If the systemd development packages are available then the support for +systemd will be enabled per default. It is required to manually enable +the installed systemd service files. Systemd has dependency tracking, +which means all dependencies will be started automatically: + +systemctl enable xen-qemu-dom0-disk-backend.service +systemctl enable xen-init-dom0.service +systemctl enable xenconsoled.service + +Other optional services are: +systemctl enable xendomains.service +systemctl enable xen-watchdog.service + + +QEMU Deprivilege +================ +It is recommended to run QEMU as non-root. +See docs/misc/qemu-deprivilege.txt for an explanation on what you need +to do at installation time to run QEMU as a dedicated user. + + +History of options +================== + +Prior to xen-4.5 configure recognized essentially only the --prefix= and +--libdir= option to specify target directories. Starting with xen-4.5 +all paths can be adjusted once with configure. + + +Examples +======== + +* To build a private copy of tools and xen: +configure --prefix=/odd/path --sysconfdir=/odd/path/etc --enable-rpath +make +sudo make install BOOT_DIR=/ood/path/boot EFI_DIR=/odd/path/efi + + +* Use configure and make to build a distro rpm package (it is required + to unset variables set by the rpm configure macro): +%build +export WGET=$(type -P false) +export GIT=$(type -P false) +export EXTRA_CFLAGS_XEN_TOOLS="$RPM_OPT_FLAGS" +export EXTRA_CFLAGS_QEMU_TRADITIONAL="$RPM_OPT_FLAGS" +export EXTRA_CFLAGS_QEMU_XEN="$RPM_OPT_FLAGS" +%configure \ + --with-initddir=%{_initddir} +unset CFLAGS CXXFLAGS FFLAGS LDFLAGS +make +%install +make install \ + SYSCONFIG_DIR=/var/adm/fillup-templates \ + DESTDIR=$RPM_BUILD_ROOT + + +* To build xen and tools using a cross compiler: +./configure --build=x86_64-unknown-linux-gnu --host=aarch64-linux-gnu +make XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- +make XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \ + DESTDIR=/some/path install + + + +# vim: tw=72 et diff --git a/MAINTAINERS b/MAINTAINERS new file mode 100644 index 0000000000..04eb361222 --- /dev/null +++ b/MAINTAINERS @@ -0,0 +1,539 @@ + + List of maintainers and how to submit changes + ============================================= + +Please try to follow the guidelines below. This will make things +easier on the maintainers. Not all of these guidelines matter for every +trivial patch so apply some common sense. + +1. Always _test_ your changes, however small, on at least 4 or + 5 people, preferably many more. + +2. Make sure your changes compile correctly in multiple + configurations. For example, both 32- and 64-bit x86. + +3. Make a patch available to the relevant maintainer in the list. Use + 'diff -u' to make the patch easy to merge. Be prepared to get your + changes sent back with seemingly silly requests about formatting + and variable names. These aren't as silly as they seem. One + job the maintainers do is to keep things looking the same. + + PLEASE see https://wiki.xenproject.org/wiki/Submitting_Xen_Patches for + hints on how to submit a patch to xen-unstable in a suitable + form. + + PLEASE try to include any credit lines you want added with the + patch. It avoids people being missed off by mistake and makes + it easier to know who wants adding and who doesn't. + + PLEASE document known bugs. If it doesn't work for everything + or does something very odd once a month document it. + + PLEASE remember that submissions must be made under the terms + of the "Developer's Certificate of Origin" (DCO) and should include + a Signed-off-by: line. + +4. Make sure you have the right to send any changes you make. If you + do changes at work you may find your employer owns the patch + not you. + +5. Happy hacking. + + + Stable Release Maintenance + ========================== + +The policy for inclusion in a Xen stable release is different to that +for inclusion in xen-unstable. + +Please see https://wiki.xenproject.org/wiki/Xen_Maintenance_Releases for more +information. + +Backport requests should be made on the xen-devel@lists.xenproject.org +list. Remember to copy the appropriate stable branch maintainer who +will be listed in this section of the MAINTAINERS file in the +appropriate branch. + +The maintainer for this branch is: + + Jan Beulich + +Tools backport requests should also be copied to: + + TODO - Loooking for new tools stable maintainer + + + Unstable Subsystem Maintainers + ============================== + +Descriptions of section entries: + + M: Maintainer: FullName + Maintainers should be CCed on patches. At least one of them + needs to approve changes to the covered files. + R: Designated reviewer: FullName + Reviewers should be CCed on patches. However, they do not + have a formal governance role, and are listed here + simply because of their own request. + L: Mailing list that is relevant to this area + W: Web-page with status/info + T: SCM tree type and location. Type is one of: git, hg, quilt, stgit. + S: Status, one of the following: + Supported: Someone is actually paid to look after this. + Maintained: Someone actually looks after it. + Odd Fixes: It has a maintainer but they don't have time to do + much other than throw the odd patch in. See below.. + Orphan: No current maintainer [but maybe you could take the + role as you write your new code]. + Obsolete: Old code. Something tagged obsolete generally means + it has been replaced by a better system and you + should be using that. + F: Files and directories with wildcard patterns. + A trailing slash includes all files and subdirectory files. + F: drivers/net/ all files in and below drivers/net + F: drivers/net/* all files in drivers/net, but not below + F: */net/* all files in "any top level directory"/net + One pattern per line. Multiple F: lines acceptable. + X: Files and directories that are NOT maintained, same rules as F: + Files exclusions are tested before file matches. + Can be useful for excluding a specific subdirectory, for instance: + F: net/ + X: net/ipv6/ + matches all files in and below net excluding net/ipv6/ + K: Keyword perl extended regex pattern to match content in a + patch or file. For instance: + K: of_get_profile + matches patches or files that contain "of_get_profile" + K: \b(printk|pr_(info|err))\b + matches patches or files that contain one or more of the words + printk, pr_info or pr_err + One regex pattern per line. Multiple K: lines acceptable. + V: Version identifier that must be under THE REST and follows + the format: + xen-maintainers- + + + +Maintainers List (try to look for most precise areas first) + + ----------------------------------- + +ACPI +M: Jan Beulich +S: Supported +F: xen/arch/x86/acpi/ +F: xen/drivers/acpi/ +F: xen/include/acpi/ +F: tools/libacpi/ + +AMD IOMMU +M: Jan Beulich +M: Andrew Cooper +S: Maintained +F: xen/drivers/passthrough/amd/ + +AMD SVM +M: Jan Beulich +M: Andrew Cooper +S: Supported +F: xen/arch/x86/hvm/svm/ +F: xen/arch/x86/cpu/vpmu_amd.c + +ARGO +M: Christopher Clark +S: Maintained +F: xen/include/public/argo.h +F: xen/include/xen/argo.h +F: xen/common/argo.c + +ARINC653 SCHEDULER +M: Josh Whitehead +M: Stewart Hildebrand +S: Supported +L: xen-devel@dornerworks.com +F: xen/common/sched/arinc653.c +F: tools/libxc/xc_arinc653.c + +ARM (W/ VIRTUALISATION EXTENSIONS) ARCHITECTURE +M: Stefano Stabellini +M: Julien Grall +R: Volodymyr Babchuk +S: Supported +L: xen-devel@lists.xenproject.org +F: docs/misc/arm/ +F: xen/arch/arm/ +F: xen/drivers/char/arm-uart.c +F: xen/drivers/char/cadence-uart.c +F: xen/drivers/char/exynos4210-uart.c +F: xen/drivers/char/meson-uart.c +F: xen/drivers/char/mvebu-uart.c +F: xen/drivers/char/omap-uart.c +F: xen/drivers/char/pl011.c +F: xen/drivers/char/scif-uart.c +F: xen/drivers/passthrough/arm/ +F: xen/include/asm-arm/ +F: xen/include/public/arch-arm/ +F: xen/include/public/arch-arm.h + +Change Log +M: Paul Durrant +R: Community Manager +S: Maintained +F: CHANGELOG.md + +Continuous Integration (CI) +M: Doug Goldstein +W: https://gitlab.com/xen-project/xen +W: https://travis-ci.org/xen-project/xen +S: Supported +F: .gitlab-ci.yml +F: .travis.yml +F: automation/ +F: scripts/travis-build + +CPU POOLS +M: Juergen Gross +M: Dario Faggioli +S: Supported +F: xen/common/sched/cpupool.c + +DEVICE TREE +M: Stefano Stabellini +M: Julien Grall +S: Supported +F: xen/common/libfdt/ +F: xen/common/device_tree.c +F: xen/include/xen/libfdt/ +F: xen/include/xen/device_tree.h +F: xen/drivers/passthrough/device_tree.c + +EFI +M: Jan Beulich +S: Supported +F: xen/arch/x86/efi/ +F: xen/common/efi/ +F: xen/include/efi/ +F: xen/include/asm-x86/efi*.h +F: xen/include/asm-x86/x86_*/efi*.h + +GDBSX DEBUGGER +M: Elena Ufimtseva +S: Supported +F: xen/arch/x86/debug.c +F: tools/debugger/gdbsx/ + +GOLANG BINDINGS +M: George Dunlap +S: Maintained +F: tools/golang + +INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT) +R: Lukasz Hawrylko +S: Odd Fixes +F: xen/arch/x86/tboot.c +F: xen/include/asm-x86/tboot.h + +INTEL(R) VT FOR DIRECTED I/O (VT-D) +M: Kevin Tian +S: Supported +F: xen/drivers/passthrough/vtd/ + +INTEL(R) VT FOR X86 (VT-X) +M: Jun Nakajima +M: Kevin Tian +S: Supported +F: xen/arch/x86/hvm/vmx/ +F: xen/arch/x86/mm/p2m-ept.c +F: xen/include/asm-x86/hvm/vmx/ +F: xen/arch/x86/cpu/vpmu_intel.c + +IOMMU VENDOR INDEPENDENT CODE +M: Jan Beulich +M: Paul Durrant +S: Supported +F: xen/drivers/passthrough/ +X: xen/drivers/passthrough/amd/ +X: xen/drivers/passthrough/arm/ +X: xen/drivers/passthrough/vtd/ +X: xen/drivers/passthrough/device_tree.c +F: xen/include/xen/iommu.h + +KCONFIG +M: Doug Goldstein +S: Supported +F: docs/misc/kconfig{,-language}.txt +F: xen/tools/kconfig/ + +KDD DEBUGGER +M: Tim Deegan +S: Odd Fixes +F: tools/debugger/kdd/ + +KEXEC +M: Andrew Cooper +S: Supported +F: xen/common/{kexec,kimage}.c +F: xen/include/{kexec,kimage}.h +F: xen/arch/x86/machine_kexec.c +F: xen/arch/x86/x86_64/kexec_reloc.S + +LIBXENLIGHT +M: Ian Jackson +M: Wei Liu +M: Anthony PERARD +S: Supported +F: tools/libxl/ +F: tools/xl/ + +LIVEPATCH +M: Konrad Rzeszutek Wilk +M: Ross Lagerwall +S: Supported +F: docs/misc/livepatch.pandoc +F: tools/misc/xen-livepatch.c +F: xen/arch/*/livepatch* +F: xen/arch/*/*/livepatch* +F: xen/common/livepatch* +F: xen/include/asm-*/livepatch.h +F: xen/include/xen/livepatch* +F: xen/test/livepatch/* + +MINI-OS +M: Samuel Thibault +R: Wei Liu +S: Supported +L: minios-devel@lists.xenproject.org +T: git https://xenbits.xenproject.org/git-http/mini-os.git +F: config/MiniOS.mk + +OCAML TOOLS +M: Christian Lindig +M: David Scott +S: Supported +F: tools/ocaml/ + +OVMF UPSTREAM +M: Anthony PERARD +M: Wei Liu +S: Supported +T: git https://xenbits.xenproject.org/git-http/ovmf.git + +POWER MANAGEMENT +M: Jan Beulich +S: Supported +F: xen/arch/x86/acpi/ +X: xen/arch/x86/acpi/boot.c +X: xen/arch/x86/acpi/lib.c +F: xen/drivers/cpufreq/ +F: xen/include/acpi/cpufreq/ + +PUBLIC I/O INTERFACES AND PV DRIVERS DESIGNS +M: Juergen Gross +S: Supported +F: xen/include/public/io/ + +PYTHON BINDINGS +M: Marek Marczykowski-Górecki +S: Supported +F: tools/python + +QEMU-DM +M: Ian Jackson +S: Supported +T: git https://xenbits.xenproject.org/git-http/qemu-xen-traditional.git + +QEMU UPSTREAM +M: Stefano Stabellini +M: Anthony Perard +S: Supported +T: git https://xenbits.xenproject.org/git-http/qemu-xen.git + +REMUS +M: Shriram Rajagopalan +M: Yang Hongyang +S: Maintained +F: docs/README.remus +F: tools/libxl/libxl_remus_* +F: tools/libxl/libxl_netbuffer.c +F: tools/libxl/libxl_nonetbuffer.c +F: tools/hotplug/Linux/remus-netbuf-setup +F: tools/hotplug/Linux/block-drbd-probe + +RTDS SCHEDULER +M: Dario Faggioli +M: Meng Xu +S: Supported +F: xen/common/sched/rt.c + +SCHEDULING +M: George Dunlap +M: Dario Faggioli +S: Supported +F: xen/common/sched/ + +SEABIOS UPSTREAM +M: Wei Liu +S: Supported +T: git https://xenbits.xenproject.org/git-http/seabios.git + +STUB DOMAINS +M: Samuel Thibault +S: Supported +F: config/Stubdom.mk.in +F: m4/stubdom.m4 +F: stubdom/ + +TEE MEDIATORS +M: Volodymyr Babchuk +S: Supported +F: xen/arch/arm/tee/ +F: xen/include/asm-arm/tee + +TOOLSTACK +M: Ian Jackson +M: Wei Liu +S: Supported +F: autogen.sh +F: config/*.in +F: install.sh +F: m4/ +F: configure +F: docs/Makefile +F: docs/man/ +F: stubdom/Makefile +F: *.ac +F: */configure +F: */*.ac +F: tools/ + +VM EVENT, MEM ACCESS and MONITOR +M: Tamas K Lengyel +R: Alexandru Isaila +R: Petre Pircalabu +S: Supported +F: tools/tests/xen-access +F: xen/arch/*/monitor.c +F: xen/arch/*/vm_event.c +F: xen/arch/arm/mem_access.c +F: xen/arch/x86/mm/mem_access.c +F: xen/arch/x86/hvm/monitor.c +F: xen/arch/x86/hvm/vm_event.c +F: xen/common/mem_access.c +F: xen/common/monitor.c +F: xen/common/vm_event.c +F: xen/include/*/mem_access.h +F: xen/include/*/monitor.h +F: xen/include/*/vm_event.h +F: xen/include/asm-x86/hvm/monitor.h +F: xen/include/asm-x86/hvm/vm_event.h + +VPCI +M: Roger Pau Monné +S: Supported +F: xen/drivers/vpci/ +F: xen/include/xen/vpci.h + +VTPM +M: Daniel De Graaf +M: Quan Xu +S: Supported +F: extras/mini-os/tpm* +F: extras/mini-os/include/tpm* +F: stubdom/vtpm/ +F: stubdom/vtpmmgr/ +F: docs/misc/vtpm-platforms.txt + +X86 ARCHITECTURE +M: Jan Beulich +M: Andrew Cooper +R: Wei Liu +R: Roger Pau Monné +S: Supported +L: xen-devel@lists.xenproject.org +F: xen/arch/x86/ +F: xen/include/asm-x86/ +F: xen/include/public/arch-x86/ +F: xen/include/xen/lib/x86 +F: xen/lib/x86 +F: tools/firmware/hvmloader/ +F: tools/firmware/rombios/ +F: tools/firmware/vgabios/ +F: tools/fuzz/cpu-policy/ +F: tools/fuzz/x86_instruction_emulator/ +F: tools/misc/xen-cpuid.c +F: tools/tests/cpu-policy/ +F: tools/tests/x86_emulator/ + +X86 I/O EMULATION +M: Paul Durrant +S: Supported +F: xen/arch/x86/hvm/emulate.c +F: xen/arch/x86/hvm/intercept.c +F: xen/arch/x86/hvm/io.c +F: xen/arch/x86/hvm/ioreq.c +F: xen/include/asm-x86/hvm/emulate.h +F: xen/include/asm-x86/hvm/io.h +F: xen/include/asm-x86/hvm/ioreq.h +F: xen/include/public/hvm/ioreq.h + +X86 MEMORY MANAGEMENT +M: Jan Beulich +M: Andrew Cooper +R: George Dunlap +S: Supported +F: xen/arch/x86/mm/ + +X86 MEMORY PAGING +S: Orphaned +F: xen/arch/x86/mm/mem_paging.c + +X86 MEMORY SHARING +M: Tamas K Lengyel +S: Odd Fixes +F: xen/arch/x86/mm/mem_sharing.c +F: tools/tests/mem-sharing/ + +X86 SHADOW PAGETABLES +M: Tim Deegan +S: Maintained +F: xen/arch/x86/mm/shadow/ + +X86 VIRIDIAN ENLIGHTENMENTS +M: Paul Durrant +M: Wei Liu +S: Supported +F: xen/arch/x86/guest/hyperv/ +F: xen/arch/x86/hvm/viridian/ +F: xen/include/asm-x86/guest/hyperv.h +F: xen/include/asm-x86/guest/hyperv-hcall.h +F: xen/include/asm-x86/guest/hyperv-tlfs.h +F: xen/include/asm-x86/hvm/viridian.h + +XENTRACE +M: George Dunlap +S: Supported +F: tools/xentrace/ +F: xen/common/trace.c +F: xen/include/xen/trace.h + +XSM/FLASK +M: Daniel De Graaf +S: Supported +F: tools/flask/ +F: xen/include/xsm/ +F: xen/xsm/ +F: docs/misc/xsm-flask.txt + +THE REST +M: Andrew Cooper +M: George Dunlap +M: Ian Jackson +M: Jan Beulich +M: Julien Grall +M: Stefano Stabellini +M: Wei Liu +L: xen-devel@lists.xenproject.org +S: Supported +F: * +F: */ +V: xen-maintainers-1 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..9ad2602f63 --- /dev/null +++ b/Makefile @@ -0,0 +1,330 @@ +# +# Grand Unified Makefile for Xen. +# + +# Default target must appear before any include lines +.PHONY: all +all: dist + +-include config/Toplevel.mk +SUBSYSTEMS?=xen tools stubdom docs +TARGS_DIST=$(patsubst %, dist-%, $(SUBSYSTEMS)) +TARGS_INSTALL=$(patsubst %, install-%, $(SUBSYSTEMS)) +TARGS_UNINSTALL=$(patsubst %, uninstall-%, $(SUBSYSTEMS)) +TARGS_BUILD=$(patsubst %, build-%, $(SUBSYSTEMS)) +TARGS_CLEAN=$(patsubst %, clean-%, $(SUBSYSTEMS)) +TARGS_DISTCLEAN=$(patsubst %, distclean-%, $(SUBSYSTEMS)) + +export XEN_ROOT=$(CURDIR) +include Config.mk + +.PHONY: mini-os-dir +mini-os-dir: + if [ ! -d $(XEN_ROOT)/extras/mini-os ]; then \ + GIT=$(GIT) $(XEN_ROOT)/scripts/git-checkout.sh \ + $(MINIOS_UPSTREAM_URL) \ + $(MINIOS_UPSTREAM_REVISION) \ + $(XEN_ROOT)/extras/mini-os ; \ + fi + +.PHONY: mini-os-dir-force-update +mini-os-dir-force-update: mini-os-dir + set -ex; \ + if [ "$(MINIOS_UPSTREAM_REVISION)" ]; then \ + cd extras/mini-os-remote; \ + $(GIT) fetch origin; \ + $(GIT) reset --hard $(MINIOS_UPSTREAM_REVISION); \ + fi + +export XEN_TARGET_ARCH +export DESTDIR + +.PHONY: %-tools-public-headers +%-tools-public-headers: + $(MAKE) -C tools/include $* + +# build and install everything into the standard system directories +.PHONY: install +install: $(TARGS_INSTALL) + +.PHONY: build +build: $(TARGS_BUILD) + +.PHONY: build-xen +build-xen: + $(MAKE) -C xen build + +.PHONY: %_defconfig +%_defconfig: + $(MAKE) -C xen $@ + +.PHONY: build-tools +build-tools: build-tools-public-headers + $(MAKE) -C tools build + +.PHONY: build-stubdom +build-stubdom: mini-os-dir build-tools-public-headers + $(MAKE) -C stubdom build +ifeq (x86_64,$(XEN_TARGET_ARCH)) + XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom pv-grub +endif + +.PHONY: build-docs +build-docs: + $(MAKE) -C docs build + +# The test target is for unit tests that can run without an installation. Of +# course, many tests require a machine running Xen itself, and these are +# handled elsewhere. +.PHONY: test +test: + $(MAKE) -C tools/python test + +run-tests-%: build-tools-public-headers tools/tests/%/ + $(MAKE) -C tools/tests/$* run + +# For most targets here, +# make COMPONENT-TARGET +# is implemented, more or less, by +# make -C COMPONENT TARGET +# +# Each rule that does this needs to have dependencies on any +# other COMPONENTs that have to be processed first. See +# The install-tools target here for an example. +# +# dist* targets are special: these do not occur in lower-level +# Makefiles. Instead, these are all implemented only here. +# They run the appropriate install targets with DESTDIR set. +# +# Also, we have a number of targets COMPONENT which run +# dist-COMPONENT, for convenience. +# +# The Makefiles invoked with -C from the toplevel should +# generally have the following targets: +# all build install clean distclean + + +.PHONY: dist +dist: DESTDIR=$(DISTDIR)/install +dist: $(TARGS_DIST) dist-misc + +dist-misc: + $(INSTALL_DIR) $(DISTDIR)/ + $(INSTALL_DATA) ./COPYING $(DISTDIR) + $(INSTALL_DATA) ./README $(DISTDIR) + $(INSTALL_PROG) ./install.sh $(DISTDIR) + + +dist-%: DESTDIR=$(DISTDIR)/install +dist-%: install-% + @: # do nothing + +.PHONY: xen tools stubdom docs +xen: dist-xen +tools: dist-tools +stubdom: dist-stubdom +docs: dist-docs + +.PHONY: install-xen +install-xen: + $(MAKE) -C xen install + +.PHONY: install-tools +install-tools: install-tools-public-headers + $(MAKE) -C tools install + +.PHONY: install-stubdom +install-stubdom: mini-os-dir install-tools + $(MAKE) -C stubdom install +ifeq (x86_64,$(XEN_TARGET_ARCH)) + XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub +endif + +.PHONY: tools/firmware/seabios-dir-force-update +tools/firmware/seabios-dir-force-update: + $(MAKE) -C tools/firmware seabios-dir-force-update + +.PHONY: tools/firmware/ovmf-dir-force-update +tools/firmware/ovmf-dir-force-update: + $(MAKE) -C tools/firmware ovmf-dir-force-update + +.PHONY: install-docs +install-docs: + $(MAKE) -C docs install + +# We only have build-tests install-tests, not uninstall-tests etc. +.PHONY: build-tests +build-tests: build-xen + $(MAKE) -C xen tests + +.PHONY: install-tests +install-tests: install-xen + $(MAKE) -C xen $@ + +# build xen and the tools and place them in the install +# directory. 'make install' should then copy them to the normal system +# directories +.PHONY: world +world: + $(MAKE) clean + $(MAKE) dist + +# Package a build in a debball file, that is inside a .deb format +# container to allow for easy and clean removal. This is not intended +# to be a full featured policy compliant .deb package. +.PHONY: debball +debball: dist + fakeroot sh ./tools/misc/mkdeb $(XEN_ROOT) $$($(MAKE) -C xen xenversion --no-print-directory) + +# Package a build in an rpmball file, that is inside a .rpm format +# container to allow for easy and clean removal. This is not intended +# to be a full featured policy compliant .rpm package. +.PHONY: rpmball +rpmball: dist + bash ./tools/misc/mkrpm $(XEN_ROOT) $$($(MAKE) -C xen xenversion --no-print-directory) + +.PHONY: subtree-force-update +subtree-force-update: mini-os-dir-force-update + $(MAKE) -C tools subtree-force-update + +.PHONY: subtree-force-update-all +subtree-force-update-all: mini-os-dir-force-update + $(MAKE) -C tools subtree-force-update-all + +# Make a source tarball, including qemu sub-trees. +# +# src-tarball will use "git describe" for the version number. This +# will have the most recent tag, number of commits since that tag, and +# git commit id of the head. This is suitable for a "snapshot" +# tarball of an unreleased tree. +# +# src-tarball-release will use "make xenversion" as the version +# number. This is suitable for release tarballs. +.PHONY: src-tarball-release +src-tarball-release: subtree-force-update-all + bash ./tools/misc/mktarball $(XEN_ROOT) $$($(MAKE) -C xen xenversion --no-print-directory) + +.PHONY: src-tarball +src-tarball: subtree-force-update-all + bash ./tools/misc/mktarball $(XEN_ROOT) $$(git describe) + +.PHONY: clean +clean: $(TARGS_CLEAN) + +.PHONY: clean-xen +clean-xen: + $(MAKE) -C xen clean + +.PHONY: clean-tools +clean-tools: clean-tools-public-headers + $(MAKE) -C tools clean + +.PHONY: clean-stubdom +clean-stubdom: clean-tools-public-headers + $(MAKE) -C stubdom crossclean +ifeq (x86_64,$(XEN_TARGET_ARCH)) + XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom crossclean +endif + +.PHONY: clean-docs +clean-docs: + $(MAKE) -C docs clean + +# clean, but blow away tarballs +.PHONY: distclean +distclean: $(TARGS_DISTCLEAN) + $(MAKE) -C tools/include distclean + rm -f config/Toplevel.mk + rm -rf dist + rm -rf config.log config.status config.cache autom4te.cache + +.PHONY: distclean-xen +distclean-xen: + $(MAKE) -C xen distclean + +.PHONY: distclean-tools +distclean-tools: + $(MAKE) -C tools distclean + +.PHONY: distclean-stubdom +distclean-stubdom: + $(MAKE) -C stubdom distclean +ifeq (x86_64,$(XEN_TARGET_ARCH)) + XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom distclean +endif + rm -rf extras/mini-os extras/mini-os-remote + +.PHONY: distclean-docs +distclean-docs: + $(MAKE) -C docs distclean + +# Linux name for GNU distclean +.PHONY: mrproper +mrproper: distclean + +.PHONY: help +help: + @echo 'Installation targets:' + @echo ' install - build and install everything' + @echo ' install-xen - build and install the Xen hypervisor' + @echo ' install-tools - build and install the control tools' + @echo ' install-stubdom - build and install the stubdomain images' + @echo ' install-docs - build and install user documentation' + @echo '' + @echo 'Local dist targets:' + @echo ' dist - build and install everything into local dist directory' + @echo ' world - clean everything then make dist' + @echo ' dist-xen - build Xen hypervisor and install into local dist' + @echo ' dist-tools - build the tools and install into local dist' + @echo ' dist-stubdom - build the stubdomain images and install into local dist' + @echo ' dist-docs - build user documentation and install into local dist' + @echo '' + @echo 'Building targets:' + @echo ' build - build everything' + @echo ' build-xen - build Xen hypervisor' + @echo ' build-tools - build the tools' + @echo ' build-stubdom - build the stubdomain images' + @echo ' build-docs - build user documentation' + @echo '' + @echo 'Cleaning targets:' + @echo ' clean - clean the Xen, tools and docs' + @echo ' distclean - clean plus delete kernel build trees and' + @echo ' local downloaded files' + @echo ' subtree-force-update - Call *-force-update on all git subtrees (qemu, seabios, ovmf)' + @echo '' + @echo 'Miscellaneous targets:' + @echo ' uninstall - attempt to remove installed Xen tools' + @echo ' (use with extreme care!)' + @echo + @echo 'Package targets:' + @echo ' src-tarball-release - make a source tarball with xen and qemu tagged with a release' + @echo ' src-tarball - make a source tarball with xen and qemu tagged with git describe' + @echo + @echo 'Environment:' + @echo ' [ this documentation is sadly not complete ]' + +# Use this target with extreme care! + +.PHONY: uninstall-xen +uninstall-xen: + $(MAKE) -C xen uninstall + +.PHONY: uninstall-tools +uninstall-tools: + $(MAKE) -C tools uninstall + +.PHONY: uninstall-stubdom +uninstall-stubdom: + $(MAKE) -C stubdom uninstall + +.PHONY: uninstall-docs +uninstall-docs: + $(MAKE) -C docs uninstall + +.PHONY: uninstall +uninstall: D=$(DESTDIR) +uninstall: uninstall-tools-public-headers $(TARGS_UNINSTALL) + +.PHONY: xenversion +xenversion: + @$(MAKE) --no-print-directory -C xen xenversion diff --git a/README b/README new file mode 100644 index 0000000000..c7da4b06e2 --- /dev/null +++ b/README @@ -0,0 +1,209 @@ +################################### +__ __ _ _ _ _ _ +\ \/ /___ _ __ | || | / | || | + \ // _ \ '_ \ | || |_ | | || |_ + / \ __/ | | | |__ _|| |__ _| +/_/\_\___|_| |_| |_|(_)_| |_| + +################################### + +https://www.xen.org/ + +What is Xen? +============ + +Xen is a Virtual Machine Monitor (VMM) originally developed by the +Systems Research Group of the University of Cambridge Computer +Laboratory, as part of the UK-EPSRC funded XenoServers project. Xen +is freely-distributable Open Source software, released under the GNU +GPL. Since its initial public release, Xen has grown a large +development community, spearheaded by xen.org (https://www.xen.org). + +This file contains some quick-start instructions to install Xen on +your system. For more information see https://www.xen.org/ and +https://wiki.xen.org/ + +Quick-Start Guide +================= + +First, this is just a quick-start guide. For more comprehensive +information see the INSTALL file and the Xen wiki at +https://wiki.xenproject.org and in particular +https://wiki.xenproject.org/wiki/Getting_Started. + +Second, there are a number of prerequisites for building a Xen source +release. Make sure you have all the following installed, either by +visiting the project webpage or installing a pre-built package +provided by your OS distributor: + * GNU Make v3.80 or later + * C compiler and linker: + - For x86: + - GCC 4.1.2_20070115 or later + - GNU Binutils 2.16.91.0.5 or later + or + - Clang/LLVM 3.5 or later + - For ARM: + - GCC 4.8 or later + - GNU Binutils 2.24 or later + * Development install of zlib (e.g., zlib-dev) + * Development install of Python 2.6 or later (e.g., python-dev) + * Development install of curses (e.g., libncurses-dev) + * Development install of openssl (e.g., openssl-dev) + * Development install of x11 (e.g. xorg-x11-dev) + * Development install of uuid (e.g. uuid-dev) + * Development install of yajl (e.g. libyajl-dev) + * Development install of libaio (e.g. libaio-dev) version 0.3.107 or + greater. + * Development install of GLib v2.0 (e.g. libglib2.0-dev) + * Development install of Pixman (e.g. libpixman-1-dev) + * pkg-config + * bridge-utils package (/sbin/brctl) + * iproute package (/sbin/ip) + * GNU bison and GNU flex + * GNU gettext + * ACPI ASL compiler (iasl) + * Libc multiarch package (e.g. libc6-dev-i386 / glibc-devel.i686). + Required when building on a 64-bit platform to build + 32-bit components which are enabled on a default build. + +In addition to the above there are a number of optional build +prerequisites. Omitting these will cause the related features to be +disabled at compile time: + * Development install of Ocaml (e.g. ocaml-nox and + ocaml-findlib). Required to build ocaml components which + includes the alternative ocaml xenstored. + * cmake (if building vtpm stub domains) + * pandoc, transfig, pod2{man,html,text} for rendering various pieces of + documentation into alternative formats + * figlet (for generating the traditional Xen start of day banner) + * systemd daemon development files + * Development install of libnl3 (e.g., libnl-3-200, + libnl-3-dev, etc). Required if network buffering is desired + when using Remus with libxl. See docs/README.remus for detailed + information. + * 16-bit x86 assembler, loader and compiler for qemu-traditional / rombios + (dev86 rpm or bin86 & bcc debs) + * Development install of liblzma for rombios + +Second, you need to acquire a suitable kernel for use in domain 0. If +possible you should use a kernel provided by your OS distributor. If +no suitable kernel is available from your OS distributor then refer to +https://wiki.xen.org/wiki/XenDom0Kernels for suggestions for +suitable kernels to use. +If you are looking to compile a Dom0 kernel from source, please refer to +https://wiki.xen.org/wiki/XenParavirtOps. + +[NB. Unless noted otherwise, all the following steps should be +performed with root privileges.] + +1. Download and untar the source tarball file. This will be a + file named xen-unstable-src.tgz, or xen-$version-src.tgz. + You can also pull the current version from the git or mercurial + repositories at https://xenbits.xen.org/ + + # tar xzf xen-unstable-src.tgz + + Assuming you are using the unstable tree, this will + untar into xen-unstable. The rest of the instructions + use the unstable tree as an example, substitute the + version for unstable. + +2. cd to xen-unstable (or whatever you sensibly rename it to). + +3. For the very first build, or if you want to destroy build trees, + perform the following steps: + + # ./configure + # make world + # make install + + See the documentation in the INSTALL file for more info. + + This will create and install onto the local machine. It will build + the xen binary (xen.gz), the tools and the documentation. + + You can override the destination for make install by setting DESTDIR + to some value. + +4. To rebuild an existing tree without modifying the config: + # make dist + + This will build and install xen, tools, and docs into the local dist/ + directory. + + You can override the destination for make install by setting DISTDIR + to some value. + + make install and make dist differ in that make install does the + right things for your local machine (installing the appropriate + version of udev scripts, for example), but make dist includes all + versions of those scripts, so that you can copy the dist directory + to another machine and install from that distribution. + +xenstore: xenstored and oxenstored +==================================== + +Xen uses a configuration database called xenstore [0] to maintain configuration +and status information shared between domains. A daemon is implemented as part +of xenstore to act as an interface for access to the database for dom0 and +guests. Two xenstored daemons are supported, one written in C which we refer +to as the xenstored (sometimes referred to as cxenstored), and another written +in Ocaml called oxenstored. Details for xenstore and the different +implementations can be found on the wiki's xenstore reference guide [1] and +the xenstored [2] page. You can choose which xenstore you want to enable as +default on a system through configure: + + ./configure --with-xenstored=xenstored + ./configure --with-xenstored=oxenstored + +By default oxenstored will be used if the ocaml development tools are found. +If you enable oxenstored the xenstored will still be built and installed, +the xenstored used can be changed through the configuration file: + +/etc/sysconfig/xencommons +or +/etc/default/xencommons + +You can change the preferred xenstored you want to use in the configuration +but since we cannot stop the daemon a reboot will be required to make the +change take effect. + +[0] https://wiki.xen.org/wiki/XenStore +[1] https://wiki.xen.org/wiki/XenStoreReference +[2] https://wiki.xen.org/wiki/Xenstored + +Python Runtime Libraries +======================== + +Various tools, such as pygrub, have the following runtime dependencies: + + * Python 2.6 or later. + URL: http://www.python.org/ + Debian: python + +Note that the build system expects `python` to be available. If your system +only has `python2` or `python3` but not `python` (as in Linux From Scratch), +you will need to create a symlink for it, or specify PYTHON= when invoking +make, like (note the position of PYTHON= matters): + + # make PYTHON=/usr/bin/python3 + +Intel(R) Trusted Execution Technology Support +============================================= + +Intel's technology for safer computing, Intel(R) Trusted Execution Technology +(Intel(R) TXT), defines platform-level enhancements that provide the building +blocks for creating trusted platforms. For more information, see +http://www.intel.com/technology/security/. + +Intel(R) TXT support is provided by the Trusted Boot (tboot) module in +conjunction with minimal logic in the Xen hypervisor. + +Tboot is an open source, pre- kernel/VMM module that uses Intel(R) TXT to +perform a measured and verified launch of an OS kernel/VMM. + +The Trusted Boot module is available from +http://sourceforge.net/projects/tboot. This project hosts the code in a +mercurial repo at http://tboot.sourceforge.net/hg/tboot.hg and contains +tarballs of the source. Instructions in the tboot README describe how +to modify grub.conf to use tboot to launch Xen. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000000..c45390a245 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,990 @@ +% Support statement for this release + +This document describes the support status +and in particular the security support status of the Xen branch +within which you find it. + +See the bottom of the file +for the definitions of the support status levels etc. + +# Release Support + + Xen-Version: 4.14 + Initial-Release: 2020-07-24 + Supported-Until: 2022-01-24 + Security-Support-Until: 2023-07-24 + +Release Notes +: RN + +# Feature Support + +## Kconfig + +EXPERT and DEBUG Kconfig options are not security supported. Other +Kconfig options are supported, if the related features are marked as +supported in this document. + +## Host Architecture + +### x86-64 + + Status: Supported + +### ARM v7 + Virtualization Extensions + + Status: Supported + +### ARM v8 + + Status: Supported + +## Host hardware support + +### Physical CPU Hotplug + + Status, x86: Supported + +### Physical Memory Hotplug + + Status, x86: Supported + +### Host ACPI (via Domain 0) + + Status, x86 PV: Supported + Status, ARM: Experimental + +### x86/Intel Platform QoS Technologies + + Status: Tech Preview + +### IOMMU + + Status, AMD IOMMU: Supported + Status, Intel VT-d: Supported + Status, ARM SMMUv1: Supported, not security supported + Status, ARM SMMUv2: Supported, not security supported + Status, Renesas IPMMU-VMSA: Tech Preview + +### ARM/GICv3 ITS + +Extension to the GICv3 interrupt controller to support MSI. + + Status: Experimental + +## Guest Type + +### x86/PV + +Traditional Xen PV guest + +No hardware requirements + + Status, x86_64: Supported + Status, x86_32, shim: Supported + Status, x86_32, without shim: Supported, not security supported + +### x86/HVM + +Fully virtualised guest using hardware virtualisation extensions + +Requires hardware virtualisation support (Intel VMX / AMD SVM) + + Status, domU: Supported + +### x86/PVH + +PVH is a next-generation paravirtualized mode +designed to take advantage of hardware virtualization support when possible. +During development this was sometimes called HVMLite or PVHv2. + +Requires hardware virtualisation support (Intel VMX / AMD SVM). + +Dom0 support requires an IOMMU (Intel VT-d / AMD IOMMU). + + Status, domU: Supported + Status, dom0: Experimental + +### ARM + +ARM only has one guest type at the moment + + Status: Supported + +## Hypervisor file system + +### Build info + + Status: Supported + +### Hypervisor config + + Status: Supported + +### Runtime parameters + + Status: Supported + +## Toolstack + +### xl + + Status: Supported + +### Direct-boot kernel image format + +Format which the toolstack accepts for direct-boot kernels + + Supported, x86: bzImage, ELF + Supported, ARM32: zImage + Supported, ARM64: Image + +### Dom0 init support for xl + + Status, SysV: Supported + Status, systemd: Supported + Status, BSD-style: Supported + +### JSON output support for xl + +Output of information in machine-parseable JSON format + + Status: Experimental + +### Open vSwitch integration for xl + + Status, Linux: Supported + +### Virtual cpu hotplug + + Status: Supported + +### QEMU backend hotplugging for xl + + Status: Supported + +### xenlight Go package + +Go (golang) bindings for libxl + + Status: Experimental + +### Linux device model stubdomains + +Support for running qemu-xen device model in a linux stubdomain. + + Status: Tech Preview + +## Toolstack/3rd party + +### libvirt driver for xl + + Status: Supported, Security support external + +## Debugging, analysis, and crash post-mortem + +### Host serial console + + Status, NS16550: Supported + Status, EHCI: Supported + Status, Cadence UART (ARM): Supported + Status, PL011 UART (ARM): Supported + Status, Exynos 4210 UART (ARM): Supported + Status, OMAP UART (ARM): Supported + Status, SCI(F) UART: Supported + +### Hypervisor 'debug keys' + +These are functions triggered either from the host serial console, +or via the xl 'debug-keys' command, +which cause Xen to dump various hypervisor state to the console. + + Status: Supported, not security supported + +### Hypervisor synchronous console output (sync_console) + +Xen command-line flag to force synchronous console output. + + Status: Supported, not security supported + +Useful for debugging, but not suitable for production environments +due to incurred overhead. + +### gdbsx + + Status, x86: Supported, not security supported + +Debugger to debug ELF guests + +### Soft-reset for PV guests + +Soft-reset allows a new kernel to start 'from scratch' with a fresh VM state, +but with all the memory from the previous state of the VM intact. +This is primarily designed to allow "crash kernels", +which can do core dumps of memory to help with debugging in the event of a crash. + + Status: Supported + +### xentrace + +Tool to capture Xen trace buffer data + + Status, x86: Supported + +### gcov + +Export hypervisor coverage data suitable for analysis by gcov or lcov. + + Status: Supported, Not security supported + +## Memory Management + +### Dynamic memory control + +Allows a guest to add or remove memory after boot-time. +This is typically done by a guest kernel agent known as a "balloon driver". + + Status: Supported + +### Populate-on-demand memory + +This is a mechanism that allows normal operating systems with only a balloon driver +to boot with memory < maxmem. + + Status, x86 HVM: Supported + +### Memory Sharing + +Allow sharing of identical pages between guests + + Status, x86 HVM: Experimental + +### Memory Paging + +Allow pages belonging to guests to be paged to disk + + Status, x86 HVM: Experimental + +### Alternative p2m + +Alternative p2m (altp2m) allows external monitoring of guest memory +by maintaining multiple physical to machine (p2m) memory mappings. + + Status, x86 HVM: Tech Preview + Status, ARM: Tech Preview + +## Resource Management + +### CPU Pools + +Groups physical cpus into distinct groups called "cpupools", +with each pool having the capability +of using different schedulers and scheduling properties. + + Status: Supported + +### Core Scheduling + +Allows to group virtual cpus into virtual cores which are scheduled on the +physical cores. This results in never running different guests at the same +time on the same physical core. + + Status, x86: Experimental + +### Credit Scheduler + +A weighted proportional fair share virtual CPU scheduler. +This is the default scheduler. + + Status: Supported + +### Credit2 Scheduler + +A general purpose scheduler for Xen, +designed with particular focus on fairness, responsiveness, and scalability + + Status: Supported + +### RTDS based Scheduler + +A soft real-time CPU scheduler +built to provide guaranteed CPU capacity to guest VMs on SMP hosts + + Status: Experimental + +### ARINC653 Scheduler + +A periodically repeating fixed timeslice scheduler. + + Status: Supported + +Currently only single-vcpu domains are supported. + +### Null Scheduler + +A very simple, very static scheduling policy +that always schedules the same vCPU(s) on the same pCPU(s). +It is designed for maximum determinism and minimum overhead +on embedded platforms. + + Status: Experimental + +### NUMA scheduler affinity + +Enables NUMA aware scheduling in Xen + + Status, x86: Supported + +## Scalability + +### Super page support + +NB that this refers to the ability of guests +to have higher-level page table entries point directly to memory, +improving TLB performance. +On ARM, and on x86 in HAP mode, +the guest has whatever support is enabled by the hardware. + +This feature is independent +of the ARM "page granularity" feature (see below). + + Status, x86 HVM/PVH, HAP: Supported + Status, x86 HVM/PVH, Shadow, 2MiB: Supported + Status, ARM: Supported + +On x86 in shadow mode, only 2MiB (L2) superpages are available; +furthermore, they do not have the performance characteristics +of hardware superpages. + +### x86/PVHVM + +This is a useful label for a set of hypervisor features +which add paravirtualized functionality to HVM guests +for improved performance and scalability. +This includes exposing event channels to HVM guests. + + Status: Supported + +## High Availability and Fault Tolerance + +### Remus Fault Tolerance + + Status: Experimental + +### COLO Manager + + Status: Experimental + +### x86/vMCE + +Forward Machine Check Exceptions to appropriate guests + + Status: Supported + +## Virtual driver support, guest side + +### Blkfront + +Guest-side driver capable of speaking the Xen PV block protocol + + Status, Linux: Supported + Status, FreeBSD: Supported, Security support external + Status, NetBSD: Supported, Security support external + Status, OpenBSD: Supported, Security support external + Status, Windows: Supported + +### Netfront + +Guest-side driver capable of speaking the Xen PV networking protocol + + Status, Linux: Supported + Status, FreeBSD: Supported, Security support external + Status, NetBSD: Supported, Security support external + Status, OpenBSD: Supported, Security support external + Status, Windows: Supported + +### PV Framebuffer (frontend) + +Guest-side driver capable of speaking the Xen PV Framebuffer protocol + + Status, Linux (xen-fbfront): Supported + +### PV display (frontend) + +Guest-side driver capable of speaking the Xen PV display protocol + + Status, Linux: Supported + +### PV Console (frontend) + +Guest-side driver capable of speaking the Xen PV console protocol + + Status, Linux (hvc_xen): Supported + Status, FreeBSD: Supported, Security support external + Status, NetBSD: Supported, Security support external + Status, Windows: Supported + +### PV keyboard (frontend) + +Guest-side driver capable of speaking the Xen PV keyboard protocol. +Note that the "keyboard protocol" includes mouse / pointer / +multi-touch support as well. + + Status, Linux (xen-kbdfront): Supported + +### PV USB (frontend) + + Status, Linux: Supported + +### PV SCSI protocol (frontend) + + Status, Linux: Supported, with caveats + +NB that while the PV SCSI frontend is in Linux and tested regularly, +there is currently no xl support. + +### PV TPM (frontend) + +Guest-side driver capable of speaking the Xen PV TPM protocol + + Status, Linux (xen-tpmfront): Tech Preview + +### PV 9pfs frontend + +Guest-side driver capable of speaking the Xen 9pfs protocol + + Status, Linux: Tech Preview + +### PVCalls (frontend) + +Guest-side driver capable of making pv system calls + + Status, Linux: Tech Preview + +### PV sound (frontend) + +Guest-side driver capable of speaking the Xen PV sound protocol + + Status, Linux: Supported + +## Virtual device support, host side + +For host-side virtual device support, +"Supported" and "Tech preview" include xl/libxl support +unless otherwise noted. + +### Blkback + +Host-side implementations of the Xen PV block protocol. + + Status, Linux (xen-blkback): Supported + Status, QEMU (xen_disk), raw format: Supported + Status, QEMU (xen_disk), qcow format: Supported + Status, QEMU (xen_disk), qcow2 format: Supported + Status, QEMU (xen_disk), vhd format: Supported + Status, FreeBSD (blkback): Supported, Security support external + Status, NetBSD (xbdback): Supported, security support external + Status, Blktap2, raw format: Deprecated + Status, Blktap2, vhd format: Deprecated + +Backends only support raw format unless otherwise specified. + +### Netback + +Host-side implementations of Xen PV network protocol + + Status, Linux (xen-netback): Supported + Status, FreeBSD (netback): Supported, Security support external + Status, NetBSD (xennetback): Supported, Security support external + +### PV Framebuffer (backend) + +Host-side implementation of the Xen PV framebuffer protocol + + Status, QEMU: Supported + +### PV Console (xenconsoled) + +Host-side implementation of the Xen PV console protocol + + Status: Supported + +### PV keyboard (backend) + +Host-side implementation of the Xen PV keyboard protocol. +Note that the "keyboard protocol" includes mouse / pointer support as well. + + Status, QEMU: Supported + +### PV USB (backend) + +Host-side implementation of the Xen PV USB protocol + + Status, QEMU: Supported + +### PV SCSI protocol (backend) + + Status, Linux: Experimental + +NB that while the PV SCSI backend is in Linux and tested regularly, +there is currently no xl support. + +### PV TPM (backend) + + Status: Tech Preview + +### PV 9pfs (backend) + + Status, QEMU: Tech Preview + +### PVCalls (backend) + + Status, Linux: Experimental + +PVCalls backend has been checked into Linux, +but has no xl support. + +### Online resize of virtual disks + + Status: Supported + +## Security + +### Driver Domains + +"Driver domains" means allowing non-Domain 0 domains +with access to physical devices to act as back-ends. + + Status: Supported, with caveats + +See the appropriate "Device Passthrough" section +for more information about security support. + +### Device Model Stub Domains + + Status: Supported, with caveats + +Vulnerabilities of a device model stub domain +to a hostile driver domain (either compromised or untrusted) +are excluded from security support. + +### Device Model Deprivileging + + Status, Linux dom0: Tech Preview, with limited support + +This means adding extra restrictions to a device model in order to +prevent a compromised device model from attacking the rest of the +domain it's running in (normally dom0). + +"Tech preview with limited support" means we will not issue XSAs for +the _additional_ functionality provided by the feature; but we will +issue XSAs in the event that enabling this feature opens up a security +hole that would not be present without the feature disabled. + +For example, while this is classified as tech preview, a bug in libxl +which failed to change the user ID of QEMU would not receive an XSA, +since without this feature the user ID wouldn't be changed. But a +change which made it possible for a compromised guest to read +arbitrary files on the host filesystem without compromising QEMU would +be issued an XSA, since that does weaken security. + +### KCONFIG Expert + + Status: Experimental + +### Live Patching + + Status, x86: Supported + Status, ARM: Experimental + +Compile time disabled for ARM by default. + +### Virtual Machine Introspection + + Status, x86: Supported, not security supported + +### XSM & FLASK + + Status: Experimental + +Compile time disabled by default. + +Also note that using XSM +to delegate various domain control hypercalls +to particular other domains, rather than only permitting use by dom0, +is also specifically excluded from security support for many hypercalls. +Please see XSA-77 for more details. + +### FLASK default policy + + Status: Experimental + +The default policy includes FLASK labels and roles for a "typical" Xen-based system +with dom0, driver domains, stub domains, domUs, and so on. + +## Virtual Hardware, Hypervisor + +### x86/Nested PV + +This means running a Xen hypervisor inside an HVM domain on a Xen system, +with support for PV L2 guests only +(i.e., hardware virtualization extensions not provided +to the guest). + + Status, x86 Xen HVM: Tech Preview + +This works, but has performance limitations +because the L1 dom0 can only access emulated L1 devices. + +Xen may also run inside other hypervisors (KVM, Hyper-V, VMWare), +but nobody has reported on performance. + +### x86/Nested HVM + +This means providing hardware virtulization support to guest VMs +allowing, for instance, a nested Xen to support both PV and HVM guests. +It also implies support for other hypervisors, +such as KVM, Hyper-V, Bromium, and so on as guests. + + Status, x86 HVM: Experimental + +### vPMU + +Virtual Performance Management Unit for HVM guests + + Status, x86: Supported, Not security supported + +Disabled by default (enable with hypervisor command line option). +This feature is not security supported: see https://xenbits.xen.org/xsa/advisory-163.html + +### Argo: Inter-domain message delivery by hypercall + + Status: Experimental + +### x86/PCI Device Passthrough + + Status, x86 PV: Supported, with caveats + Status, x86 HVM: Supported, with caveats + +Only systems using IOMMUs are supported. + +Not compatible with migration, populate-on-demand, altp2m, +introspection, memory sharing, or memory paging. + +Because of hardware limitations +(affecting any operating system or hypervisor), +it is generally not safe to use this feature +to expose a physical device to completely untrusted guests. +However, this feature can still confer significant security benefit +when used to remove drivers and backends from domain 0 +(i.e., Driver Domains). + +### x86/Multiple IOREQ servers + +An IOREQ server provides emulated devices to HVM and PVH guests. +QEMU is normally the only IOREQ server, +but Xen has support for multiple IOREQ servers. +This allows for custom or proprietary device emulators +to be used in addition to QEMU. + + Status: Experimental + +### ARM/Non-PCI device passthrough + + Status: Supported, not security supported + +Note that this still requires an IOMMU +that covers the DMA of the device to be passed through. + +### ARM: 16K and 64K page granularity in guests + + Status: Supported, with caveats + +No support for QEMU backends in a 16K or 64K domain. + +### ARM: Guest Device Tree support + + Status: Supported + +### ARM: Guest ACPI support + + Status: Supported + +### Arm: OP-TEE Mediator + + Status: Tech Preview + +## Virtual Hardware, QEMU + +This section describes supported devices available in HVM mode using a +qemu devicemodel (the default). + + Status: Support scope restricted + +Note that other devices are available but not security supported. + +### x86/Emulated platform devices (QEMU): + + Status, piix3: Supported + +### x86/Emulated network (QEMU): + + Status, e1000: Supported + Status, rtl8193: Supported + Status, virtio-net: Supported + +### x86/Emulated storage (QEMU): + + Status, piix3 ide: Supported + Status, ahci: Supported + +See the section **Blkback** for image formats supported by QEMU. + +### x86/Emulated graphics (QEMU): + + Status, cirrus-vga: Supported + Status, stdvga: Supported + +### x86/Emulated audio (QEMU): + + Status, sb16: Supported + Status, es1370: Supported + Status, ac97: Supported + +### x86/Emulated input (QEMU): + + Status, usbmouse: Supported + Status, usbtablet: Supported + Status, ps/2 keyboard: Supported + Status, ps/2 mouse: Supported + +### x86/Emulated serial card (QEMU): + + Status, UART 16550A: Supported + +### x86/Host USB passthrough (QEMU): + + Status: Supported, not security supported + +### qemu-xen-traditional ### + +The Xen Project provides an old version of qemu with modifications +which enable use as a device model stub domain. The old version is +normally selected by default only in a stub dm configuration, but it +can be requested explicitly in other configurations, for example in +`xl` with `device_model_version="QEMU_XEN_TRADITIONAL"`. + + Status, Device Model Stub Domains: Supported, with caveats + Status, as host process device model: No security support, not recommended + +qemu-xen-traditional is security supported only for those available +devices which are supported for mainstream QEMU (see above), with +trusted driver domains (see Device Model Stub Domains). + +## Virtual Firmware + +### x86/HVM iPXE + +Booting a guest via PXE. + + Status: Supported, with caveats + +PXE inherently places full trust of the guest in the network, +and so should only be used +when the guest network is under the same administrative control +as the guest itself. + +### x86/HVM BIOS + +Booting a guest via guest BIOS firmware + + Status, SeaBIOS (qemu-xen): Supported + Status, ROMBIOS (qemu-xen-traditional): Supported + +### x86/HVM OVMF + +OVMF firmware implements the UEFI boot protocol. + + Status, qemu-xen: Supported + +# Format and definitions + +This file contains prose, and machine-readable fragments. +The data in a machine-readable fragment relate to +the section and subsection in which it is found. + +The file is in markdown format. +The machine-readable fragments are markdown literals +containing RFC-822-like (deb822-like) data. + +In each case, descriptions which expand on the name of a feature as +provided in the section heading, precede the Status indications. +Any paragraphs which follow the Status indication are caveats or +qualifications of the information provided in Status fields. + +## Keys found in the Feature Support subsections + +### Status + +This gives the overall status of the feature, +including security support status, functional completeness, etc. +Refer to the detailed definitions below. + +If support differs based on implementation +(for instance, x86 / ARM, Linux / QEMU / FreeBSD), +one line for each set of implementations will be listed. + +## Definition of Status labels + +Each Status value corresponds to levels of security support, +testing, stability, etc., as follows: + +### Experimental + + Functional completeness: No + Functional stability: Here be dragons + Interface stability: Not stable + Security supported: No + +### Tech Preview + + Functional completeness: Yes + Functional stability: Quirky + Interface stability: Provisionally stable + Security supported: No + +#### Supported + + Functional completeness: Yes + Functional stability: Normal + Interface stability: Yes + Security supported: Yes + +#### Deprecated + + Functional completeness: Yes + Functional stability: Quirky + Interface stability: No (as in, may disappear the next release) + Security supported: Yes + +All of these may appear in modified form. +There are several interfaces, for instance, +which are officially declared as not stable; +in such a case this feature may be described as "Stable / Interface not stable". + +## Definition of the status label interpretation tags + +### Functionally complete + +Does it behave like a fully functional feature? +Does it work on all expected platforms, +or does it only work for a very specific sub-case? +Does it have a sensible UI, +or do you have to have a deep understanding of the internals +to get it to work properly? + +### Functional stability + +What is the risk of it exhibiting bugs? + +General answers to the above: + + * **Here be dragons** + + Pretty likely to still crash / fail to work. + Not recommended unless you like life on the bleeding edge. + + * **Quirky** + + Mostly works but may have odd behavior here and there. + Recommended for playing around or for non-production use cases. + + * **Normal** + + Ready for production use + +### Interface stability + +If I build a system based on the current interfaces, +will they still work when I upgrade to the next version? + + * **Not stable** + + Interface is still in the early stages and + still fairly likely to be broken in future updates. + + * **Provisionally stable** + + We're not yet promising backwards compatibility, + but we think this is probably the final form of the interface. + It may still require some tweaks. + + * **Stable** + + We will try very hard to avoid breaking backwards compatibility, + and to fix any regressions that are reported. + +### Security supported + +Will XSAs be issued if security-related bugs are discovered +in the functionality? + +If "no", +anyone who finds a security-related bug in the feature +will be advised to +post it publicly to the Xen Project mailing lists +(or contact another security response team, +if a relevant one exists). + +Bugs found after the end of **Security-Support-Until** +in the Release Support section will receive an XSA +if they also affect newer, security-supported, versions of Xen. +However, the Xen Project will not provide official fixes +for non-security-supported versions. + +Three common 'diversions' from the 'Supported' category +are given the following labels: + + * **Supported, Not security supported** + + Functionally complete, normal stability, + interface stable, but no security support + + * **Supported, Security support external** + + This feature is security supported + by a different organization (not the XenProject). + See **External security support** below. + + * **Supported, with caveats** + + This feature is security supported only under certain conditions, + or support is given only for certain aspects of the feature, + or the feature should be used with care + because it is easy to use insecurely without knowing it. + Additional details will be given in the description. + +### Interaction with other features + +Not all features interact well with all other features. +Some features are only for HVM guests; some don't work with migration, &c. + +### External security support + +The XenProject security team +provides security support for XenProject projects. + +We also provide security support for Xen-related code in Linux, +which is an external project but doesn't have its own security process. + +External projects that provide their own security support for Xen-related features are listed below. + + * QEMU https://wiki.qemu.org/index.php/SecurityProcess + + * Libvirt https://libvirt.org/securityprocess.html + + * FreeBSD https://www.freebsd.org/security/ + + * NetBSD http://www.netbsd.org/support/security/ + + * OpenBSD https://www.openbsd.org/security.html diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000000..2be836008a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,12 @@ +#!/bin/sh -e +autoconf -f +( cd tools + autoconf -f + autoheader +) +( cd stubdom + autoconf -f +) +( cd docs + autoconf -f +) diff --git a/automation/build/Makefile b/automation/build/Makefile new file mode 100644 index 0000000000..7c7612b1d9 --- /dev/null +++ b/automation/build/Makefile @@ -0,0 +1,19 @@ + +# the base of where these containers will appear +REGISTRY := registry.gitlab.com/xen-project/xen +CONTAINERS = $(subst .dockerfile,,$(wildcard */*.dockerfile)) + +help: + @echo "Builds containers for building Xen based on different distros" + @echo "To build one run 'make DISTRO/VERSION'. Available containers:" + @$(foreach file,$(sort $(CONTAINERS)),echo ${file};) + @echo "To push container builds, set the env var PUSH" + +%: %.dockerfile ## Builds containers + docker build -t $(REGISTRY)/$(@D):$(@F) -f $< $( 4.11, and you want to use containers +that run old glibc (for example, CentOS 6 or SLES11SP4), you may need to add + +``` +vsyscall=emulate +``` + +to the host kernel command line. That enables a legacy interface that is used +by old glibc. + + +Building a container +-------------------- + +There is a makefile to make this process easier. You should be +able to run `make DISTRO/VERSION` to have Docker build the container +for you. If you define the `PUSH` environment variable when running the +former `make` command, it will push the container to the [registry] if +you have access to do so and have your Docker logged into the registry. + +To login you must run `docker login registry.gitlab.com`. For more +information see the [registry help]. + +[registry]: https://gitlab.com/xen-project/xen/container_registry +[registry help]: https://gitlab.com/help/user/project/container_registry diff --git a/automation/build/archlinux/current.dockerfile b/automation/build/archlinux/current.dockerfile new file mode 100644 index 0000000000..d8fbebaf79 --- /dev/null +++ b/automation/build/archlinux/current.dockerfile @@ -0,0 +1,54 @@ +FROM archlinux/base +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +# Enable multilib repo, for dev86 package +RUN echo $'[multilib]\nInclude = /etc/pacman.d/mirrorlist' >> /etc/pacman.conf + +RUN pacman -S --refresh --sysupgrade --noconfirm --noprogressbar --needed \ + base-devel \ + bin86 \ + bridge-utils \ + bzip2 \ + dev86 \ + dtc \ + e2fsprogs \ + ghostscript \ + git \ + gnutls \ + go \ + iasl \ + inetutils \ + iproute \ + lib32-glibc \ + libaio \ + libcacard \ + libgl \ + libjpeg-turbo \ + libnl \ + libpng \ + libseccomp \ + markdown \ + net-tools \ + nss \ + perl \ + pixman \ + pkgconfig \ + python \ + sdl \ + sdl2 \ + spice \ + spice-protocol \ + systemd \ + transfig \ + usbredir \ + wget \ + xz \ + yajl \ + zlib + +ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl + +RUN useradd --create-home user +USER user +WORKDIR /build diff --git a/automation/build/centos/6.dockerfile b/automation/build/centos/6.dockerfile new file mode 100644 index 0000000000..54d022be86 --- /dev/null +++ b/automation/build/centos/6.dockerfile @@ -0,0 +1,51 @@ +FROM centos:6 +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +RUN mkdir /build +WORKDIR /build + +# work around https://github.com/moby/moby/issues/10180 +# and add EPEL for dev86 +RUN rpm --rebuilddb && \ + yum -y install \ + yum-plugin-ovl \ + epel-release \ + && yum clean all && \ + rm -rf /var/cache/yum + +# install Xen depends +RUN yum -y install \ + gcc \ + gcc-c++ \ + ncurses-devel \ + zlib-devel \ + openssl-devel \ + python-devel \ + libuuid-devel \ + pciutils-devel \ + pkgconfig \ + gettext \ + flex \ + bison \ + libaio-devel \ + glib2-devel \ + yajl-devel \ + pixman-devel \ + glibc-devel \ + glibc-devel.i686 \ + make \ + binutils \ + git \ + wget \ + acpica-tools \ + python-markdown \ + patch \ + checkpolicy \ + dev86 \ + iasl \ + xz-devel \ + bzip2 \ + nasm \ + && yum clean all && \ + rm -rf /var/cache/yum diff --git a/automation/build/centos/7.2.dockerfile b/automation/build/centos/7.2.dockerfile new file mode 100644 index 0000000000..c2f46b694c --- /dev/null +++ b/automation/build/centos/7.2.dockerfile @@ -0,0 +1,50 @@ +FROM centos:7.2.1511 +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +# ensure we only get bits from the vault for +# the version we want +COPY CentOS-7.2.repo /etc/yum.repos.d/CentOS-Base.repo + +# install EPEL for dev86, xz-devel and possibly other packages +RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && \ + yum clean all + +RUN mkdir /build +WORKDIR /build + +# work around https://github.com/moby/moby/issues/10180 +# and install Xen depends +RUN rpm --rebuilddb && \ + yum -y install \ + yum-plugin-ovl \ + gcc \ + gcc-c++ \ + ncurses-devel \ + zlib-devel \ + openssl-devel \ + python-devel \ + libuuid-devel \ + pkgconfig \ + gettext \ + flex \ + bison \ + libaio-devel \ + glib2-devel \ + yajl-devel \ + pixman-devel \ + glibc-devel \ + glibc-devel.i686 \ + make \ + binutils \ + git \ + wget \ + acpica-tools \ + python-markdown \ + patch \ + checkpolicy \ + dev86 \ + xz-devel \ + bzip2 \ + nasm \ + && yum clean all diff --git a/automation/build/centos/7.dockerfile b/automation/build/centos/7.dockerfile new file mode 100644 index 0000000000..e37d9d743a --- /dev/null +++ b/automation/build/centos/7.dockerfile @@ -0,0 +1,49 @@ +FROM centos:7 +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +RUN mkdir /build +WORKDIR /build + +# work around https://github.com/moby/moby/issues/10180 +# and add EPEL for dev86 +RUN rpm --rebuilddb && \ + yum -y install \ + yum-plugin-ovl \ + epel-release \ + && yum clean all && \ + rm -rf /var/cache/yum + +# install Xen depends +RUN yum -y install \ + gcc \ + gcc-c++ \ + ncurses-devel \ + zlib-devel \ + openssl-devel \ + python-devel \ + libuuid-devel \ + pkgconfig \ + gettext \ + flex \ + bison \ + libaio-devel \ + glib2-devel \ + yajl-devel \ + pixman-devel \ + glibc-devel \ + glibc-devel.i686 \ + make \ + binutils \ + git \ + wget \ + acpica-tools \ + python-markdown \ + patch \ + checkpolicy \ + dev86 \ + xz-devel \ + bzip2 \ + nasm \ + && yum clean all && \ + rm -rf /var/cache/yum diff --git a/automation/build/centos/CentOS-7.2.repo b/automation/build/centos/CentOS-7.2.repo new file mode 100644 index 0000000000..4da27faeb5 --- /dev/null +++ b/automation/build/centos/CentOS-7.2.repo @@ -0,0 +1,35 @@ +# CentOS-Base.repo +# +# This is a replacement file that pins things to just use CentOS 7.2 +# from the CentOS Vault. +# + +[base] +name=CentOS-7.2.1511 - Base +baseurl=http://vault.centos.org/7.2.1511/os/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#released updates +[updates] +name=CentOS-7.2.1511 - Updates +baseurl=http://vault.centos.org/7.2.1511/updates/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that may be useful +[extras] +name=CentOS-7.2.1511 - Extras +baseurl=http://vault.centos.org/7.2.1511/extras/$basearch/ +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + +#additional packages that extend functionality of existing packages +[centosplus] +name=CentOS-7.2.1511 - Plus +baseurl=http://vault.centos.org/7.2.1511/centosplus/$basearch/ +gpgcheck=1 +gpgcheck=1 +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 + diff --git a/automation/build/debian/jessie-i386.dockerfile b/automation/build/debian/jessie-i386.dockerfile new file mode 100644 index 0000000000..66a6abb381 --- /dev/null +++ b/automation/build/debian/jessie-i386.dockerfile @@ -0,0 +1,50 @@ +FROM i386/debian:jessie +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +ENTRYPOINT ["linux32"] + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/jessie.dockerfile b/automation/build/debian/jessie.dockerfile new file mode 100644 index 0000000000..1232b9e204 --- /dev/null +++ b/automation/build/debian/jessie.dockerfile @@ -0,0 +1,48 @@ +FROM debian:jessie +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/stretch-i386.dockerfile b/automation/build/debian/stretch-i386.dockerfile new file mode 100644 index 0000000000..7b6f8eff69 --- /dev/null +++ b/automation/build/debian/stretch-i386.dockerfile @@ -0,0 +1,52 @@ +FROM i386/debian:stretch +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +ENTRYPOINT ["linux32"] + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + apt-transport-https \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/stretch-llvm-8.list b/automation/build/debian/stretch-llvm-8.list new file mode 100644 index 0000000000..09fe843fb2 --- /dev/null +++ b/automation/build/debian/stretch-llvm-8.list @@ -0,0 +1,3 @@ +# Strech LLVM 8 repos +deb http://apt.llvm.org/stretch/ llvm-toolchain-stretch-8 main +deb-src http://apt.llvm.org/stretch/ llvm-toolchain-stretch-8 main diff --git a/automation/build/debian/stretch.dockerfile b/automation/build/debian/stretch.dockerfile new file mode 100644 index 0000000000..32742f7f39 --- /dev/null +++ b/automation/build/debian/stretch.dockerfile @@ -0,0 +1,63 @@ +FROM debian:stretch +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + gnupg \ + apt-transport-https \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* + +RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - +COPY stretch-llvm-8.list /etc/apt/sources.list.d/ + +RUN apt-get update && \ + apt-get --quiet --yes install \ + clang-8 \ + lld-8 \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/unstable-arm64v8.dockerfile b/automation/build/debian/unstable-arm64v8.dockerfile new file mode 100644 index 0000000000..8455d67b72 --- /dev/null +++ b/automation/build/debian/unstable-arm64v8.dockerfile @@ -0,0 +1,49 @@ +FROM arm64v8/debian:unstable +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + libfdt-dev \ + bin86 \ + bcc \ + liblzma-dev \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/unstable-i386.dockerfile b/automation/build/debian/unstable-i386.dockerfile new file mode 100644 index 0000000000..86ff3585df --- /dev/null +++ b/automation/build/debian/unstable-i386.dockerfile @@ -0,0 +1,52 @@ +FROM i386/debian:unstable +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +ENTRYPOINT ["linux32"] + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + apt-transport-https \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/debian/unstable-llvm-8.list b/automation/build/debian/unstable-llvm-8.list new file mode 100644 index 0000000000..dc119fa0b4 --- /dev/null +++ b/automation/build/debian/unstable-llvm-8.list @@ -0,0 +1,3 @@ +# Unstable LLVM 8 repos +deb http://apt.llvm.org/unstable/ llvm-toolchain-8 main +deb-src http://apt.llvm.org/unstable/ llvm-toolchain-8 main diff --git a/automation/build/debian/unstable.dockerfile b/automation/build/debian/unstable.dockerfile new file mode 100644 index 0000000000..aeb4f3448b --- /dev/null +++ b/automation/build/debian/unstable.dockerfile @@ -0,0 +1,64 @@ +FROM debian:unstable +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + gnupg \ + apt-transport-https \ + golang \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* + +RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add - +COPY unstable-llvm-8.list /etc/apt/sources.list.d/ + +RUN apt-get update && \ + apt-get --quiet --yes install \ + clang-8 \ + lld-8 \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/fedora/29.dockerfile b/automation/build/fedora/29.dockerfile new file mode 100644 index 0000000000..6a4e5b0413 --- /dev/null +++ b/automation/build/fedora/29.dockerfile @@ -0,0 +1,45 @@ +FROM fedora:29 +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +RUN mkdir /build +WORKDIR /build + +# install Xen depends +RUN dnf -y install \ + clang \ + gcc \ + gcc-c++ \ + ncurses-devel \ + zlib-devel \ + openssl-devel \ + python-devel \ + python3-devel \ + libuuid-devel \ + pkgconfig \ + gettext \ + flex \ + bison \ + libaio-devel \ + glib2-devel \ + yajl-devel \ + pixman-devel \ + glibc-devel \ + glibc-devel.i686 \ + make \ + binutils \ + git \ + wget \ + acpica-tools \ + python-markdown \ + patch \ + checkpolicy \ + dev86 \ + xz-devel \ + bzip2 \ + nasm \ + ocaml \ + ocaml-findlib \ + golang \ + && dnf clean all && \ + rm -rf /var/cache/dnf diff --git a/automation/build/suse/opensuse-leap.dockerfile b/automation/build/suse/opensuse-leap.dockerfile new file mode 100644 index 0000000000..c60c13c943 --- /dev/null +++ b/automation/build/suse/opensuse-leap.dockerfile @@ -0,0 +1,69 @@ +FROM opensuse/leap +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV USER root + +RUN mkdir /build +WORKDIR /build + +RUN zypper ref && zypper up -y --no-recommends +RUN zypper install -y --no-recommends \ + acpica \ + bc \ + bin86 \ + bison \ + bzip2 \ + checkpolicy \ + clang \ + cmake \ + dev86 \ + discount \ + flex \ + gcc \ + gcc-c++ \ + gettext-tools \ + git \ + glib2-devel \ + glibc-devel \ + glibc-devel-32bit \ + gzip \ + hostname \ + libSDL2-devel \ + libaio-devel \ + libbz2-devel \ + libext2fs-devel \ + libgnutls-devel \ + libjpeg62-devel \ + libnl3-devel \ + libnuma-devel \ + libpixman-1-0-devel \ + libpng16-devel \ + libssh2-devel \ + libtasn1-devel \ + libuuid-devel \ + libyajl-devel \ + lzo-devel \ + make \ + nasm \ + ncurses-devel \ + ocaml \ + ocaml-findlib-devel \ + ocaml-ocamlbuild \ + ocaml-ocamldoc \ + pandoc \ + patch \ + pkg-config \ + python \ + python-devel \ + python3-devel \ + systemd-devel \ + tar \ + transfig \ + valgrind-devel \ + wget \ + which \ + xz-devel \ + zlib-devel \ + && \ + zypper clean -a diff --git a/automation/build/suse/opensuse-tumbleweed.dockerfile b/automation/build/suse/opensuse-tumbleweed.dockerfile new file mode 100644 index 0000000000..084cce0921 --- /dev/null +++ b/automation/build/suse/opensuse-tumbleweed.dockerfile @@ -0,0 +1,70 @@ +FROM opensuse/tumbleweed +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV USER root + +RUN mkdir /build +WORKDIR /build + +RUN zypper ref && zypper up -y --no-recommends +RUN zypper install -y --no-recommends \ + acpica \ + bc \ + bin86 \ + bison \ + bzip2 \ + checkpolicy \ + clang \ + cmake \ + dev86 \ + discount \ + flex \ + gcc \ + gcc-c++ \ + gettext-tools \ + git \ + glib2-devel \ + glibc-devel \ + glibc-devel-32bit \ + gzip \ + hostname \ + libSDL2-devel \ + libaio-devel \ + libbz2-devel \ + libext2fs-devel \ + libgnutls-devel \ + libjpeg62-devel \ + libnl3-devel \ + libnuma-devel \ + libpixman-1-0-devel \ + libpng16-devel \ + libssh2-devel \ + libtasn1-devel \ + libuuid-devel \ + libyajl-devel \ + lzo-devel \ + make \ + nasm \ + ncurses-devel \ + ocaml \ + ocaml-findlib-devel \ + ocaml-ocamlbuild \ + ocaml-ocamldoc \ + pandoc \ + patch \ + pkg-config \ + python \ + python-devel \ + python3 \ + python3-devel \ + systemd-devel \ + tar \ + transfig \ + valgrind-devel \ + wget \ + which \ + xz-devel \ + zlib-devel \ + && \ + zypper clean -a diff --git a/automation/build/suse/sles11sp4.dockerfile b/automation/build/suse/sles11sp4.dockerfile new file mode 100644 index 0000000000..ff69a99afc --- /dev/null +++ b/automation/build/suse/sles11sp4.dockerfile @@ -0,0 +1,20 @@ +FROM registry.gitlab.com/xen-project/xen/suse:sles11sp4-base +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# Nothing else is needed -- base image already contain everything. + +# Note: +# +# SLES11 SP4 runs pre-2.13 glibc, which requires vsyscall support. Most +# distros nowadays disable vsyscall. To run this container, the host needs to +# have vsyscall=emulate in its kernel command line. +# +# Due to various issues in SLES11 SP4, you might want to disable building +# certain components. Known *not bulding* components include OVMF, SEABIOS +# and upstream QEMU. diff --git a/automation/build/ubuntu/bionic.dockerfile b/automation/build/ubuntu/bionic.dockerfile new file mode 100644 index 0000000000..712b2e4722 --- /dev/null +++ b/automation/build/ubuntu/bionic.dockerfile @@ -0,0 +1,49 @@ +FROM ubuntu:18.04 +LABEL maintainer.name="The Xen Project " \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/ubuntu/trusty.dockerfile b/automation/build/ubuntu/trusty.dockerfile new file mode 100644 index 0000000000..397a28061d --- /dev/null +++ b/automation/build/ubuntu/trusty.dockerfile @@ -0,0 +1,49 @@ +FROM ubuntu:14.04 +LABEL maintainer.name="The Xen Project" \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/build/ubuntu/xenial.dockerfile b/automation/build/ubuntu/xenial.dockerfile new file mode 100644 index 0000000000..ce0e84fa2f --- /dev/null +++ b/automation/build/ubuntu/xenial.dockerfile @@ -0,0 +1,49 @@ +FROM ubuntu:16.04 +LABEL maintainer.name="The Xen Project " \ + maintainer.email="xen-devel@lists.xenproject.org" + +ENV DEBIAN_FRONTEND=noninteractive +ENV USER root + +RUN mkdir /build +WORKDIR /build + +# build depends +RUN apt-get update && \ + apt-get --quiet --yes install \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libssl-dev \ + python-dev \ + python3-dev \ + xorg-dev \ + uuid-dev \ + libyajl-dev \ + libaio-dev \ + libglib2.0-dev \ + clang \ + libpixman-1-dev \ + pkg-config \ + flex \ + bison \ + gettext \ + acpica-tools \ + bin86 \ + bcc \ + liblzma-dev \ + libc6-dev-i386 \ + libnl-3-dev \ + ocaml-nox \ + libfindlib-ocaml-dev \ + markdown \ + transfig \ + pandoc \ + checkpolicy \ + wget \ + git \ + nasm \ + && \ + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists* /tmp/* /var/tmp/* diff --git a/automation/configs/x86/hvm_only_config b/automation/configs/x86/hvm_only_config new file mode 100644 index 0000000000..9efbddd535 --- /dev/null +++ b/automation/configs/x86/hvm_only_config @@ -0,0 +1,3 @@ +CONFIG_HVM=y +# CONFIG_PV is not set +# CONFIG_DEBUG is not set diff --git a/automation/configs/x86/no_hvm_pv_config b/automation/configs/x86/no_hvm_pv_config new file mode 100644 index 0000000000..0bf6a8e468 --- /dev/null +++ b/automation/configs/x86/no_hvm_pv_config @@ -0,0 +1,3 @@ +# CONFIG_HVM is not set +# CONFIG_PV is not set +# CONFIG_DEBUG is not set diff --git a/automation/configs/x86/pv_only_config b/automation/configs/x86/pv_only_config new file mode 100644 index 0000000000..e9d8b4a7c7 --- /dev/null +++ b/automation/configs/x86/pv_only_config @@ -0,0 +1,3 @@ +CONFIG_PV=y +# CONFIG_HVM is not set +# CONFIG_DEBUG is not set diff --git a/automation/gitlab-ci/build-each-commit.sh b/automation/gitlab-ci/build-each-commit.sh new file mode 100755 index 0000000000..19e337b468 --- /dev/null +++ b/automation/gitlab-ci/build-each-commit.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# For a newly pushed branch the BEFORE_SHA will be all 0s +if [[ ${BASE} == 0000000000000000000000000000000000000000 ]]; then + echo "Newly pushed branch, skipped" + exit 0 +fi + +git merge-base --is-ancestor ${BASE} ${TIP} +if [[ $? -ne 0 ]]; then + echo "${TIP} is not a descendent of ${BASE}, skipped" + exit 0 +fi + +echo "Building ${BASE}..${TIP}" + +NON_SYMBOLIC_REF=1 ./automation/scripts/build-test.sh ${BASE} ${TIP} \ + bash -c "git clean -ffdx && ./automation/scripts/build" diff --git a/automation/gitlab-ci/build.yaml b/automation/gitlab-ci/build.yaml new file mode 100644 index 0000000000..1e61d30c85 --- /dev/null +++ b/automation/gitlab-ci/build.yaml @@ -0,0 +1,446 @@ +.build-tmpl: &build + stage: build + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + script: + - ./automation/scripts/build 2>&1 | tee build.log + artifacts: + paths: + - binaries/ + - xen-config + - '*.log' + when: always + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ + +.gcc-tmpl: + variabes: &gcc + CC: gcc + CXX: g++ + +.clang-tmpl: + variables: &clang + CC: clang + CXX: clang++ + clang: y + +.clang-8-tmpl: + variables: &clang-8 + CC: clang-8 + CXX: clang++-8 + LD: ld.lld-8 + clang: y + +.x86-64-build-tmpl: + <<: *build + variables: + XEN_TARGET_ARCH: x86_64 + tags: + - x86_64 + +.x86-64-build: + extends: .x86-64-build-tmpl + variables: + debug: n + +.x86-64-build-debug: + extends: .x86-64-build-tmpl + variables: + debug: y + +.x86-32-build-tmpl: + <<: *build + variables: + XEN_TARGET_ARCH: x86_32 + tags: + - x86_32 + +.x86-32-build: + extends: .x86-32-build-tmpl + variables: + debug: n + +.x86-32-build-debug: + extends: .x86-32-build-tmpl + variables: + debug: y + +.gcc-x86-64-build: + extends: .x86-64-build + variables: + <<: *gcc + +.gcc-x86-64-build-debug: + extends: .x86-64-build-debug + variables: + <<: *gcc + +.gcc-x86-32-build: + extends: .x86-32-build + variables: + <<: *gcc + +.gcc-x86-32-build-debug: + extends: .x86-32-build-debug + variables: + <<: *gcc + +.clang-x86-64-build: + extends: .x86-64-build + variables: + <<: *clang + +.clang-x86-64-build-debug: + extends: .x86-64-build-debug + variables: + <<: *clang + +.clang-8-x86-64-build: + extends: .x86-64-build + variables: + <<: *clang-8 + +.clang-8-x86-64-build-debug: + extends: .x86-64-build-debug + variables: + <<: *clang-8 + +.clang-x86-32-build: + extends: .x86-32-build + variables: + <<: *clang + +.clang-x86-32-build-debug: + extends: .x86-32-build-debug + variables: + <<: *clang + +.arm64-build-tmpl: + <<: *build + variables: + XEN_TARGET_ARCH: arm64 + tags: + - arm64 + +.arm64-build: + extends: .arm64-build-tmpl + variables: + debug: n + +.arm64-build-debug: + extends: .arm64-build-tmpl + variables: + debug: y + +.gcc-arm64-build: + extends: .arm64-build + variables: + <<: *gcc + +.gcc-arm64-build-debug: + extends: .arm64-build-debug + variables: + <<: *gcc + +# Jobs below this line + +archlinux-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: archlinux:current + +archlinux-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: archlinux:current + +centos-7-2-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: centos:7.2 + +centos-7-2-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: centos:7.2 + +centos-7-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: centos:7 + +centos-7-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: centos:7 + +centos-6-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: centos:6 + +centos-6-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: centos:6 + +debian-jessie-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: debian:jessie + +debian-jessie-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: debian:jessie + +debian-jessie-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: debian:jessie + +debian-jessie-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: debian:jessie + +debian-jessie-32-clang: + extends: .clang-x86-32-build + variables: + CONTAINER: debian:jessie-i386 + +debian-jessie-32-clang-debug: + extends: .clang-x86-32-build-debug + variables: + CONTAINER: debian:jessie-i386 + +debian-jessie-32-gcc: + extends: .gcc-x86-32-build + variables: + CONTAINER: debian:jessie-i386 + +debian-jessie-32-gcc-debug: + extends: .gcc-x86-32-build-debug + variables: + CONTAINER: debian:jessie-i386 + +debian-stretch-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: debian:stretch + +debian-stretch-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: debian:stretch + +debian-stretch-clang-8: + extends: .clang-8-x86-64-build + variables: + CONTAINER: debian:stretch + +debian-stretch-clang-8-debug: + extends: .clang-8-x86-64-build-debug + variables: + CONTAINER: debian:stretch + +debian-stretch-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: debian:stretch + +debian-stretch-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: debian:stretch + +debian-stretch-32-clang: + extends: .clang-x86-32-build + variables: + CONTAINER: debian:stretch-i386 + +debian-stretch-32-clang-debug: + extends: .clang-x86-32-build-debug + variables: + CONTAINER: debian:stretch-i386 + +debian-stretch-32-gcc: + extends: .gcc-x86-32-build + variables: + CONTAINER: debian:stretch-i386 + +debian-stretch-32-gcc-debug: + extends: .gcc-x86-32-build-debug + variables: + CONTAINER: debian:stretch-i386 + +debian-unstable-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: debian:unstable + +debian-unstable-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: debian:unstable + +debian-unstable-clang-8: + extends: .clang-8-x86-64-build + variables: + CONTAINER: debian:unstable + +debian-unstable-clang-8-debug: + extends: .clang-8-x86-64-build-debug + variables: + CONTAINER: debian:unstable + +debian-unstable-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: debian:unstable + +debian-unstable-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: debian:unstable + +debian-unstable-gcc-randconfig: + extends: .gcc-x86-64-build + variables: + CONTAINER: debian:unstable + RANDCONFIG: y + +debian-unstable-gcc-debug-randconfig: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: debian:unstable + RANDCONFIG: y + +debian-unstable-32-clang: + extends: .clang-x86-32-build + variables: + CONTAINER: debian:unstable-i386 + +debian-unstable-32-clang-debug: + extends: .clang-x86-32-build-debug + variables: + CONTAINER: debian:unstable-i386 + +debian-unstable-32-gcc: + extends: .gcc-x86-32-build + variables: + CONTAINER: debian:unstable-i386 + +debian-unstable-32-gcc-debug: + extends: .gcc-x86-32-build-debug + variables: + CONTAINER: debian:unstable-i386 + +fedora-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: fedora:29 + +fedora-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: fedora:29 + +# Ubuntu Trusty's Clang is 3.4 while Xen requires 3.5 + +ubuntu-trusty-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: ubuntu:trusty + +ubuntu-trusty-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: ubuntu:trusty + +ubuntu-xenial-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: ubuntu:xenial + +ubuntu-xenial-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: ubuntu:xenial + +ubuntu-xenial-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: ubuntu:xenial + +ubuntu-xenial-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: ubuntu:xenial + +ubuntu-bionic-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: ubuntu:bionic + +ubuntu-bionic-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: ubuntu:bionic + +ubuntu-bionic-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: ubuntu:bionic + +ubuntu-bionic-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: ubuntu:bionic + +opensuse-leap-clang: + extends: .clang-x86-64-build + variables: + CONTAINER: suse:opensuse-leap + +opensuse-leap-clang-debug: + extends: .clang-x86-64-build-debug + variables: + CONTAINER: suse:opensuse-leap + +opensuse-leap-gcc: + extends: .gcc-x86-64-build + variables: + CONTAINER: suse:opensuse-leap + +opensuse-leap-gcc-debug: + extends: .gcc-x86-64-build-debug + variables: + CONTAINER: suse:opensuse-leap + +# Arm builds + +debian-unstable-gcc-arm64: + extends: .gcc-arm64-build + variables: + CONTAINER: debian:unstable-arm64v8 + +debian-unstable-gcc-debug-arm64: + extends: .gcc-arm64-build-debug + variables: + CONTAINER: debian:unstable-arm64v8 + +debian-unstable-gcc-arm64-randconfig: + extends: .gcc-arm64-build + variables: + CONTAINER: debian:unstable-arm64v8 + RANDCONFIG: y + +debian-unstable-gcc-debug-arm64-randconfig: + extends: .gcc-arm64-build-debug + variables: + CONTAINER: debian:unstable-arm64v8 + RANDCONFIG: y + diff --git a/automation/gitlab-ci/test.yaml b/automation/gitlab-ci/test.yaml new file mode 100644 index 0000000000..793feafe8b --- /dev/null +++ b/automation/gitlab-ci/test.yaml @@ -0,0 +1,111 @@ +# Test jobs +build-each-commit-gcc: + stage: test + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + variables: + CONTAINER: debian:stretch + XEN_TARGET_ARCH: x86_64 + CC: gcc + script: + - BASE=${BASE_SHA:-${CI_COMMIT_BEFORE_SHA}} TIP=${TIP_SHA:-${CI_COMMIT_SHA}} ./automation/gitlab-ci/build-each-commit.sh 2>&1 | tee ../build-each-commit-gcc.log + - mv ../build-each-commit-gcc.log . + artifacts: + paths: + - '*.log' + when: always + dependencies: [] + tags: + - x86_64 + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ + +qemu-smoke-x86-64-gcc: + stage: test + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + variables: + CONTAINER: debian:stretch + script: + - ./automation/scripts/qemu-smoke-x86-64.sh pv 2>&1 | tee qemu-smoke-x86-64.log + artifacts: + paths: + - smoke.serial + - '*.log' + when: always + dependencies: + - debian-stretch-gcc-debug + tags: + - x86_64 + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ + +qemu-smoke-x86-64-clang: + stage: test + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + variables: + CONTAINER: debian:stretch + script: + - ./automation/scripts/qemu-smoke-x86-64.sh pv 2>&1 | tee qemu-smoke-x86-64.log + artifacts: + paths: + - smoke.serial + - '*.log' + when: always + dependencies: + - debian-unstable-clang-debug + tags: + - x86_64 + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ + +qemu-smoke-x86-64-gcc-pvh: + stage: test + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + variables: + CONTAINER: debian:stretch + script: + - ./automation/scripts/qemu-smoke-x86-64.sh pvh 2>&1 | tee qemu-smoke-x86-64.log + artifacts: + paths: + - smoke.serial + - '*.log' + when: always + dependencies: + - debian-stretch-gcc-debug + tags: + - x86_64 + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ + +qemu-smoke-x86-64-clang-pvh: + stage: test + image: registry.gitlab.com/xen-project/xen/${CONTAINER} + variables: + CONTAINER: debian:stretch + script: + - ./automation/scripts/qemu-smoke-x86-64.sh pvh 2>&1 | tee qemu-smoke-x86-64.log + artifacts: + paths: + - smoke.serial + - '*.log' + when: always + dependencies: + - debian-unstable-clang-debug + tags: + - x86_64 + except: + - master + - smoke + - /^coverity-tested\/.*/ + - /^stable-.*/ diff --git a/automation/scripts/build b/automation/scripts/build new file mode 100755 index 0000000000..0cd0f3971d --- /dev/null +++ b/automation/scripts/build @@ -0,0 +1,65 @@ +#!/bin/bash -ex + +$CC --version + +# Express the compiler version as an integer. e.g. GCC 4.9.2 => 0x040902 +cc-ver() +{ + $CC -dumpversion | awk -F. '{ printf "0x%02x%02x%02x", $1, $2, $3 }' +} + +# random config or default config +if [[ "${RANDCONFIG}" == "y" ]]; then + make -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig +else + make -C xen defconfig +fi + +# build up our configure options +cfgargs=() +cfgargs+=("--enable-docs") + +if [[ "${CC}" == "clang"* ]]; then + # SeaBIOS cannot be built with clang + cfgargs+=("--with-system-seabios=/usr/share/seabios/bios.bin") + # iPXE cannot be built with clang + cfgargs+=("--with-system-ipxe=/usr/lib/ipxe/ipxe.pxe") + # newlib cannot be built with clang so we cannot build stubdoms + cfgargs+=("--disable-stubdom") +fi + +# Qemu requires Python 3.5 or later +if ! type python3 || python3 -c "import sys; res = sys.version_info < (3, 5); exit(not(res))"; then + cfgargs+=("--with-system-qemu=/bin/false") +fi + +# SeaBIOS requires GCC 4.6 or later +if [[ "${CC}" == "gcc" && `cc-ver` -lt 0x040600 ]]; then + cfgargs+=("--with-system-seabios=/bin/false") +fi + +./configure "${cfgargs[@]}" + +make -j$(nproc) dist + +# Extract artifacts to avoid getting rewritten by customised builds +cp xen/.config xen-config +mkdir binaries +if [[ "${XEN_TARGET_ARCH}" == "x86_64" ]]; then + cp xen/xen binaries/xen +fi + +# Build all the configs we care about +case ${XEN_TARGET_ARCH} in + x86_64) arch=x86 ;; + *) exit 0 ;; +esac + +cfg_dir="automation/configs/${arch}" +for cfg in `ls ${cfg_dir}`; do + echo "Building $cfg" + make -j$(nproc) -C xen clean + rm -f xen/.config + make -C xen KBUILD_DEFCONFIG=../../../../${cfg_dir}/${cfg} XEN_CONFIG_EXPERT=y defconfig + make -j$(nproc) -C xen XEN_CONFIG_EXPERT=y +done diff --git a/automation/scripts/build-test.sh b/automation/scripts/build-test.sh new file mode 100755 index 0000000000..da643adc01 --- /dev/null +++ b/automation/scripts/build-test.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Run command on every commit within the range specified. If no command is +# provided, use the default one to clean and build the whole tree. +# +# The default rune is rather simple. To do a cross-build, please put your usual +# build rune in a shell script and invoke it with this script. +# +# Set NON_SYMBOLIC_REF=1 if you want to use this script in detached HEAD state. +# This is currently used by automated test system. + +if test $# -lt 2 ; then + echo "Usage:" + echo " $0 [CMD]" + echo " If [CMD] is not specified, run the default command" + echo " git clean -fdx && ./configure && make -j4" + exit 1 +fi + +pushd `git rev-parse --show-toplevel` + +status=`git status -s` +if test -n "$status"; then + echo "Tree is dirty, aborted" + exit 1 +fi + +BASE=$1; shift +TIP=$1; shift + +if [[ "_${NON_SYMBOLIC_REF}" != "_1" ]]; then + ORIG=`git symbolic-ref -q --short HEAD` + if test $? -ne 0; then + echo "Detached HEAD, aborted" + exit 1 + fi +else + ORIG=`git rev-parse HEAD` +fi + +ret=1 +while read num rev; do + echo "Testing $num $rev" + + git checkout $rev + ret=$? + if test $ret -ne 0; then + echo "Failed to checkout $num $rev with $ret" + break + fi + + if test $# -eq 0 ; then + git clean -fdx && ./configure && make -j4 + else + "$@" + fi + ret=$? + if test $ret -ne 0; then + echo "Failed at $num $rev with $ret" + break + fi + echo +done < <(git rev-list $BASE..$TIP | nl -ba | tac) + +echo "Restoring original HEAD" +git checkout $ORIG +gco_ret=$? +if test $gco_ret -ne 0; then + echo "Failed to restore orignal HEAD. Check tree status before doing anything else!" + exit $gco_ret +fi + +if test $ret -eq 0; then + echo "ok." +fi +exit $ret diff --git a/automation/scripts/containerize b/automation/scripts/containerize new file mode 100755 index 0000000000..a75d54566c --- /dev/null +++ b/automation/scripts/containerize @@ -0,0 +1,105 @@ +#!/bin/bash + +# +# DOCKER_CMD should be either `docker` or `podman`. +# +# if using (rootless) podman, remember to set /etc/subuid +# and /etc/subgid. +# +docker_cmd=${DOCKER_CMD:-"docker"} +[ "$DOCKER_CMD" = "podman" ] && userns_podman="--userns=keep-id" + +einfo() { + echo "$*" >&2 +} + +die() { + echo "$*" >&2 + exit 1 +} + +# +# The caller is expected to override the CONTAINER environment +# variable with the container they wish to launch. +# +BASE="registry.gitlab.com/xen-project/xen" +case "_${CONTAINER}" in + _archlinux|_arch) CONTAINER="${BASE}/archlinux:current" ;; + _centos6) CONTAINER="${BASE}/centos:6" ;; + _centos7) CONTAINER="${BASE}/centos:7" ;; + _centos72) CONTAINER="${BASE}/centos:7.2" ;; + _fedora) CONTAINER="${BASE}/fedora:29";; + _jessie) CONTAINER="${BASE}/debian:jessie" ;; + _stretch|_) CONTAINER="${BASE}/debian:stretch" ;; + _unstable|_) CONTAINER="${BASE}/debian:unstable" ;; + _trusty) CONTAINER="${BASE}/ubuntu:trusty" ;; + _xenial) CONTAINER="${BASE}/ubuntu:xenial" ;; + _opensuse-leap|_leap) CONTAINER="${BASE}/suse:opensuse-leap" ;; + _opensuse-tumbleweed|_tumbleweed) CONTAINER="${BASE}/suse:opensuse-tumbleweed" ;; +esac + +# Use this variable to control whether root should be used +case "_${CONTAINER_UID0}" in + _1) userarg= ;; + _0|_) userarg="-u $(id -u) $userns_podman" ;; +esac + +# Save the commands for future use +cmd=$@ + +# If no command was specified, just drop us into a shell if we're interactive +[ $# -eq 0 ] && tty -s && cmd="/bin/bash" + +# Are we in an interactive terminal? +tty -s && termint=t + +# +# Fetch the latest version of the container in hub.docker.com, +# unless it's a newly created local copy. +# +if [[ "_${CONTAINER_NO_PULL}" != "_1" ]]; then + einfo "*** Ensuring ${CONTAINER} is up to date" + ${docker_cmd} pull ${CONTAINER} > /dev/null || \ + die "Failed to update container" +fi + +if hash greadlink > /dev/null 2>&1; then + READLINK=greadlink +elif [[ $(uname -s) == "Darwin" ]]; then + echo "Unable to forward SSH agent without coreutils installed" + unset SSH_AUTH_SOCK +else + READLINK=readlink +fi + +# Ensure we've got what we need for SSH_AUTH_SOCK +if [[ -n ${SSH_AUTH_SOCK} ]]; then + fullpath_sock=$(${READLINK} -f ${SSH_AUTH_SOCK} 2> /dev/null) + if [ $? -ne 0 ]; then + echo "Invalid SSH_AUTH_SOCK: ${SSH_AUTH_SOCK}" + unset SSH_AUTH_SOCK + else + SSH_AUTH_DIR=$(dirname ${fullpath_sock}) + SSH_AUTH_NAME=$(basename ${fullpath_sock}) + fi +fi + +# Figure out the base of what we want as our sources +# by using the top of the git repo +if [[ -z ${CONTAINER_PATH} ]]; then + CONTAINER_PATH=$(git rev-parse --show-toplevel) +fi + +# Kick off Docker +einfo "*** Launching container ..." +exec ${docker_cmd} run \ + ${userarg} \ + ${SSH_AUTH_SOCK:+-e SSH_AUTH_SOCK="/tmp/ssh-agent/${SSH_AUTH_NAME}"} \ + -v "${CONTAINER_PATH}":/build:rw \ + -v "${HOME}/.ssh":/root/.ssh:ro \ + ${SSH_AUTH_DIR:+-v "${SSH_AUTH_DIR}":/tmp/ssh-agent} \ + ${XEN_CONFIG_EXPERT:+-e XEN_CONFIG_EXPERT=${XEN_CONFIG_EXPERT}} \ + ${CONTAINER_ARGS} \ + -${termint}i --rm -- \ + ${CONTAINER} \ + ${cmd} diff --git a/automation/scripts/qemu-smoke-x86-64.sh b/automation/scripts/qemu-smoke-x86-64.sh new file mode 100755 index 0000000000..09152e3e9c --- /dev/null +++ b/automation/scripts/qemu-smoke-x86-64.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -ex + +# variant should be either pv or pvh +variant=$1 + +# Install QEMU +export DEBIAN_FRONTENT=noninteractive +apt-get -qy update +apt-get -qy install qemu-system-x86 + +# Clone and build XTF +git clone https://xenbits.xen.org/git-http/xtf.git +cd xtf && make -j$(nproc) && cd - + +case $variant in + pvh) k=test-hvm32pae-example extra="dom0-iommu=none dom0=pvh" ;; + *) k=test-pv32pae-example extra= ;; +esac + +rm -f smoke.serial +set +e +timeout -k 1 30 \ +qemu-system-x86_64 -nographic -kernel binaries/xen \ + -initrd xtf/tests/example/$k \ + -append "loglvl=all com1=115200,,8n1 console=com1 noreboot \ + console_timestamps=boot $extra" \ + -m 512 -monitor none -serial file:smoke.serial +set -e +grep -q 'Test result: SUCCESS' smoke.serial || exit 1 +exit 0 diff --git a/config.guess b/config.guess new file mode 100644 index 0000000000..4cd9454b35 --- /dev/null +++ b/config.guess @@ -0,0 +1,1658 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2019 Free Software Foundation, Inc. + +timestamp='2019-04-28' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2019 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)` + case "$UNAME_MACHINE_ARCH" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + then + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "$HP_ARCH" = "" ]; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ "$HP_ARCH" = hppa2.0w ] + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + *:GNU:*:*) + # the GNU system + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + MIPS_ENDIAN=el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + MIPS_ENDIAN= + #else + MIPS_ENDIAN= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.sub b/config.sub new file mode 100644 index 0000000000..f53af5a2da --- /dev/null +++ b/config.sub @@ -0,0 +1,1798 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2019 Free Software Foundation, Inc. + +timestamp='2019-01-05' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2019 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ + | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + os= + ;; + *) + basic_machine=$field1 + os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + alliant) + basic_machine=fx80-alliant + os= + ;; + altos | altos3068) + basic_machine=m68k-altos + os= + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + amiga) + basic_machine=m68k-unknown + os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=bsd + ;; + aros) + basic_machine=i386-pc + os=aros + ;; + aux) + basic_machine=m68k-apple + os=aux + ;; + balance) + basic_machine=ns32k-sequent + os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=linux + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=bsd + ;; + convex-c2) + basic_machine=c2-convex + os=bsd + ;; + convex-c32) + basic_machine=c32-convex + os=bsd + ;; + convex-c34) + basic_machine=c34-convex + os=bsd + ;; + convex-c38) + basic_machine=c38-convex + os=bsd + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + os= + ;; + da30) + basic_machine=m68k-da30 + os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + os= + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=hms + ;; + harris) + basic_machine=m88k-harris + os=sysv3 + ;; + hp300) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-pc + os=msys + ;; + mvs) + basic_machine=i370-ibm + os=mvs + ;; + nacl) + basic_machine=le32-unknown + os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=newsos + ;; + news1000) + basic_machine=m68030-sony + os=newsos + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + nh3000) + basic_machine=m68k-harris + os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=cxux + ;; + nindy960) + basic_machine=i960-intel + os=nindy + ;; + mon960) + basic_machine=i960-intel + os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sequent) + basic_machine=i386-sequent + os= + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + os= + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + os= + ;; + sun2os3) + basic_machine=m68000-sun + os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + os= + ;; + sun3os3) + basic_machine=m68k-sun + os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + os= + ;; + sun4os3) + basic_machine=sparc-sun + os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + os= + ;; + sv1) + basic_machine=sv1-cray + os=unicos + ;; + symmetry) + basic_machine=i386-sequent + os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=unicos + ;; + t90) + basic_machine=t90-cray + os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + os=tpf + ;; + udi29k) + basic_machine=a29k-amd + os=udi + ;; + ultra3) + basic_machine=a29k-nyu + os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=none + ;; + vaxv) + basic_machine=vax-dec + os=sysv + ;; + vms) + basic_machine=vax-dec + os=vms + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + os=${os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + os=${os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $os in + irix*) + ;; + *) + os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $os in + openstep*) + ;; + nextstep*) + ;; + ns2*) + os=nextstep2 + ;; + *) + os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + os=${os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` + ;; + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x$os != x ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux + ;; + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + solaris) + os=solaris2 + ;; + unixware*) + os=sysv4.2uw + ;; + gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # sysv* is not here because it comes later, after sysvr4. + gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | kopensolaris* | plan9* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | knetbsd* | mirbsd* | netbsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* \ + | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ + | linux-newlib* | linux-musl* | linux-uclibc* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* \ + | morphos* | superux* | rtmk* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + qnx*) + case $cpu in + x86 | i*86) + ;; + *) + os=nto-$os + ;; + esac + ;; + hiux*) + os=hiuxwe2 + ;; + nto-qnx*) + ;; + nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) + ;; + linux-dietlibc) + os=linux-dietlibc + ;; + linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + lynx*178) + os=lynxos178 + ;; + lynx*5) + os=lynxos5 + ;; + lynx*) + os=lynxos + ;; + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + opened*) + os=openedition + ;; + os400*) + os=os400 + ;; + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + wince*) + os=wince + ;; + utek*) + os=bsd + ;; + dynix*) + os=bsd + ;; + acis*) + os=aos + ;; + atheos*) + os=atheos + ;; + syllable*) + os=syllable + ;; + 386bsd) + os=bsd + ;; + ctix* | uts*) + os=sysv + ;; + nova*) + os=rtmk-nova + ;; + ns2) + os=nextstep2 + ;; + nsk*) + os=nsk + ;; + # Preserve the version number of sinix5. + sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + sinix*) + os=sysv4 + ;; + tpf*) + os=tpf + ;; + triton*) + os=sysv3 + ;; + oss*) + os=sysv3 + ;; + svr4*) + os=sysv4 + ;; + svr3) + os=sysv3 + ;; + sysvr4) + os=sysv4 + ;; + # This must come after sysvr4. + sysv*) + ;; + ose*) + os=ose + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint + ;; + zvmoe) + os=zvmoe + ;; + dicos*) + os=dicos + ;; + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $cpu in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac + ;; + nacl*) + ;; + ios) + ;; + none) + ;; + *-eabi) + ;; + *) + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $cpu-$vendor in + score-*) + os=elf + ;; + spu-*) + os=elf + ;; + *-acorn) + os=riscix1.2 + ;; + arm*-rebel) + os=linux + ;; + arm*-semi) + os=aout + ;; + c4x-* | tic4x-*) + os=coff + ;; + c8051-*) + os=elf + ;; + clipper-intergraph) + os=clix + ;; + hexagon-*) + os=elf + ;; + tic54x-*) + os=coff + ;; + tic55x-*) + os=coff + ;; + tic6x-*) + os=coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=tops20 + ;; + pdp11-*) + os=none + ;; + *-dec | vax-*) + os=ultrix4.2 + ;; + m68*-apollo) + os=domain + ;; + i386-sun) + os=sunos4.0.2 + ;; + m68000-sun) + os=sunos3 + ;; + m68*-cisco) + os=aout + ;; + mep-*) + os=elf + ;; + mips*-cisco) + os=elf + ;; + mips*-*) + os=elf + ;; + or32-*) + os=coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=sysv3 + ;; + sparc-* | *-sun) + os=sunos4.1.1 + ;; + pru-*) + os=elf + ;; + *-be) + os=beos + ;; + *-ibm) + os=aix + ;; + *-knuth) + os=mmixware + ;; + *-wec) + os=proelf + ;; + *-winbond) + os=proelf + ;; + *-oki) + os=proelf + ;; + *-hp) + os=hpux + ;; + *-hitachi) + os=hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=sysv + ;; + *-cbm) + os=amigaos + ;; + *-dg) + os=dgux + ;; + *-dolphin) + os=sysv3 + ;; + m68k-ccur) + os=rtu + ;; + m88k-omron*) + os=luna + ;; + *-next) + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs + ;; + *-gould) + os=sysv + ;; + *-highlevel) + os=bsd + ;; + *-encore) + os=bsd + ;; + *-sgi) + os=irix + ;; + *-siemens) + os=sysv4 + ;; + *-masscomp) + os=rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=uxpv + ;; + *-rom68k) + os=coff + ;; + *-*bug) + os=coff + ;; + *-apple) + os=macos + ;; + *-atari*) + os=mint + ;; + *-wrs) + os=vxworks + ;; + *) + os=none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $os in + riscix*) + vendor=acorn + ;; + sunos*) + vendor=sun + ;; + cnk*|-aix*) + vendor=ibm + ;; + beos*) + vendor=be + ;; + hpux*) + vendor=hp + ;; + mpeix*) + vendor=hp + ;; + hiux*) + vendor=hitachi + ;; + unos*) + vendor=crds + ;; + dgux*) + vendor=dg + ;; + luna*) + vendor=omron + ;; + genix*) + vendor=ns + ;; + clix*) + vendor=intergraph + ;; + mvs* | opened*) + vendor=ibm + ;; + os400*) + vendor=ibm + ;; + ptx*) + vendor=sequent + ;; + tpf*) + vendor=ibm + ;; + vxsim* | vxworks* | windiss*) + vendor=wrs + ;; + aux*) + vendor=apple + ;; + hms*) + vendor=hitachi + ;; + mpw* | macos*) + vendor=apple + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + vendor=atari + ;; + vos*) + vendor=stratus + ;; + esac + ;; +esac + +echo "$cpu-$vendor-$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/Docs.mk.in b/config/Docs.mk.in new file mode 100644 index 0000000000..e76e5cd5ff --- /dev/null +++ b/config/Docs.mk.in @@ -0,0 +1,9 @@ +-include $(XEN_ROOT)/config/Paths.mk + +# Tools +FIG2DEV := @FIG2DEV@ +POD2MAN := @POD2MAN@ +POD2HTML := @POD2HTML@ +POD2TEXT := @POD2TEXT@ +PANDOC := @PANDOC@ +PERL := @PERL@ diff --git a/config/FreeBSD.mk b/config/FreeBSD.mk new file mode 100644 index 0000000000..98a5117e60 --- /dev/null +++ b/config/FreeBSD.mk @@ -0,0 +1,9 @@ +include $(XEN_ROOT)/config/StdGNU.mk + +# No wget on FreeBSD base system +WGET = ftp +PKG_INSTALLDIR = ${prefix}/libdata/pkgconfig + +# Add the default pkg install path +APPEND_LIB += /usr/local/lib +APPEND_INCLUDES += /usr/local/include diff --git a/config/Linux.mk b/config/Linux.mk new file mode 100644 index 0000000000..2a84b6b0f3 --- /dev/null +++ b/config/Linux.mk @@ -0,0 +1,3 @@ +include $(XEN_ROOT)/config/StdGNU.mk + +SYSCONFIG_DIR = $(CONFIG_DIR)/$(CONFIG_LEAF_DIR) diff --git a/config/MiniOS.mk b/config/MiniOS.mk new file mode 100644 index 0000000000..32260ada91 --- /dev/null +++ b/config/MiniOS.mk @@ -0,0 +1,10 @@ +include $(XEN_ROOT)/config/StdGNU.mk +include $(XEN_ROOT)/extras/mini-os/Config.mk +CFLAGS += $(DEF_CFLAGS) $(ARCH_CFLAGS) +CPPFLAGS += $(DEF_CPPFLAGS) $(ARCH_CPPFLAGS) $(extra_incl) +ASFLAGS += $(DEF_ASFLAGS) $(ARCH_ASFLAGS) +LDFLAGS += $(DEF_LDFLAGS) $(ARCH_LDFLAGS) + +# Override settings for this OS +PTHREAD_LIBS = +nosharedlibs=y diff --git a/config/NetBSD.mk b/config/NetBSD.mk new file mode 100644 index 0000000000..cf766e5abc --- /dev/null +++ b/config/NetBSD.mk @@ -0,0 +1,3 @@ +include $(XEN_ROOT)/config/StdGNU.mk + +WGET = ftp diff --git a/config/NetBSDRump.mk b/config/NetBSDRump.mk new file mode 100644 index 0000000000..74755a1c36 --- /dev/null +++ b/config/NetBSDRump.mk @@ -0,0 +1,8 @@ +include $(XEN_ROOT)/config/StdGNU.mk + +PTHREAD_LIBS = + +WGET = ftp + +XENSTORE_XENSTORED=n +nosharedlibs=y diff --git a/config/OpenBSD.mk b/config/OpenBSD.mk new file mode 100644 index 0000000000..b421a1c840 --- /dev/null +++ b/config/OpenBSD.mk @@ -0,0 +1 @@ +include $(XEN_ROOT)/config/StdGNU.mk diff --git a/config/Paths.mk.in b/config/Paths.mk.in new file mode 100644 index 0000000000..416fc7aab9 --- /dev/null +++ b/config/Paths.mk.in @@ -0,0 +1,61 @@ +# Xen system configuration +# ======================== +# +# Xen uses a set of variables for system configuration and at build time, +# because of this these variables are defined on one master input source file +# and is generated after running ./configure. The master source is located +# on the xen source tree at under config/Paths.mk.in and it is used to +# generate shell or header files by the build system upon demand through the +# use of the helper makefile helper buildmakevars2file(). +# +# For more documentation you can refer to the wiki: +# +# https://wiki.xen.org/wiki/Category:Host_Configuration#System_wide_xen_configuration + +PACKAGE_TARNAME := @PACKAGE_TARNAME@ +prefix := @prefix@ +bindir := @bindir@ +sbindir := @sbindir@ +libdir := @libdir@ +libexecdir := @libexecdir@ +datarootdir := @datarootdir@ +mandir := @mandir@ +docdir := @docdir@ +dvidir := @dvidir@ +htmldir := @htmldir@ +pdfdir := @pdfdir@ +psdir := @psdir@ +includedir := @includedir@ +localstatedir := @localstatedir@ +sysconfdir := @sysconfdir@ + +LIBEXEC := @LIBEXEC@ +LIBEXEC_BIN := @LIBEXEC_BIN@ +LIBEXEC_LIB := @LIBEXEC_LIB@ +LIBEXEC_INC := @LIBEXEC_INC@ + +SHAREDIR := @SHAREDIR@ +MAN1DIR := $(mandir)/man1 +MAN8DIR := $(mandir)/man8 + +XEN_RUN_DIR := @XEN_RUN_DIR@ +XEN_LOG_DIR := @XEN_LOG_DIR@ +XEN_LIB_DIR := @XEN_LIB_DIR@ +XEN_LIB_STORED := @XEN_LIB_STORED@ +XEN_RUN_STORED := @XEN_RUN_STORED@ + +CONFIG_DIR := @CONFIG_DIR@ +INITD_DIR := @INITD_DIR@ +CONFIG_LEAF_DIR := @CONFIG_LEAF_DIR@ +BASH_COMPLETION_DIR := $(CONFIG_DIR)/bash_completion.d +XEN_LOCK_DIR := @XEN_LOCK_DIR@ +XEN_PAGING_DIR := @XEN_PAGING_DIR@ +XEN_DUMP_DIR := @XEN_DUMP_DIR@ +DEBUG_DIR := @DEBUG_DIR@ + +XENFIRMWAREDIR := @XENFIRMWAREDIR@ + +XEN_CONFIG_DIR := @XEN_CONFIG_DIR@ +XEN_SCRIPT_DIR := @XEN_SCRIPT_DIR@ + +PKG_INSTALLDIR := ${libdir}/pkgconfig diff --git a/config/StdGNU.mk b/config/StdGNU.mk new file mode 100644 index 0000000000..039274ea61 --- /dev/null +++ b/config/StdGNU.mk @@ -0,0 +1,37 @@ +AS = $(CROSS_COMPILE)as +LD = $(CROSS_COMPILE)ld +ifeq ($(clang),y) +CC = $(CROSS_COMPILE)clang +CXX = $(CROSS_COMPILE)clang++ +LD_LTO = $(CROSS_COMPILE)llvm-ld +else +CC = $(CROSS_COMPILE)gcc +CXX = $(CROSS_COMPILE)g++ +LD_LTO = $(CROSS_COMPILE)ld +endif +CPP = $(CC) -E +AR = $(CROSS_COMPILE)ar +RANLIB = $(CROSS_COMPILE)ranlib +NM = $(CROSS_COMPILE)nm +STRIP = $(CROSS_COMPILE)strip +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump +SIZEUTIL = $(CROSS_COMPILE)size + +# Allow git to be wrappered in the environment +GIT ?= git + +INSTALL = install +INSTALL_DIR = $(INSTALL) -d -m0755 -p +INSTALL_DATA = $(INSTALL) -m0644 -p +INSTALL_PROG = $(INSTALL) -m0755 -p + +BOOT_DIR ?= /boot +DEBUG_DIR ?= /usr/lib/debug + +SOCKET_LIBS = +UTIL_LIBS = -lutil + +SONAME_LDFLAG = -soname +SHLIB_LDFLAGS = -shared + diff --git a/config/Stubdom.mk.in b/config/Stubdom.mk.in new file mode 100644 index 0000000000..5990fc4e04 --- /dev/null +++ b/config/Stubdom.mk.in @@ -0,0 +1,39 @@ +-include $(XEN_ROOT)/config/Paths.mk + +# Path Programs +CMAKE := @CMAKE@ +FETCHER := @FETCHER@ + +# A debug build of stubdom? //FIXME: Someone make this do something +debug := @debug@ + +STUBDOM_TARGETS := @STUBDOM_TARGETS@ +STUBDOM_BUILD := @STUBDOM_BUILD@ +STUBDOM_INSTALL := @STUBDOM_INSTALL@ + +ZLIB_VERSION := @ZLIB_VERSION@ +ZLIB_URL := @ZLIB_URL@ + +LIBPCI_VERSION := @LIBPCI_VERSION@ +LIBPCI_URL := @LIBPCI_URL@ + +NEWLIB_VERSION := @NEWLIB_VERSION@ +NEWLIB_URL := @NEWLIB_URL@ + +LWIP_VERSION := @LWIP_VERSION@ +LWIP_URL := @LWIP_URL@ + +GRUB_VERSION := @GRUB_VERSION@ +GRUB_URL := @GRUB_URL@ + +OCAML_VERSION := @OCAML_VERSION@ +OCAML_URL := @OCAML_URL@ + +GMP_VERSION := @GMP_VERSION@ +GMP_URL := @GMP_URL@ + +POLARSSL_VERSION := @POLARSSL_VERSION@ +POLARSSL_URL := @POLARSSL_URL@ + +TPMEMU_VERSION := @TPMEMU_VERSION@ +TPMEMU_URL := @TPMEMU_URL@ diff --git a/config/SunOS.mk b/config/SunOS.mk new file mode 100644 index 0000000000..0fe5f45590 --- /dev/null +++ b/config/SunOS.mk @@ -0,0 +1,35 @@ +AS = $(CROSS_COMPILE)gas +LD = $(CROSS_COMPILE)gld +CC = $(CROSS_COMPILE)gcc +CPP = $(CROSS_COMPILE)gcc -E +CXX = $(CROSS_COMPILE)g++ +AR = $(CROSS_COMPILE)gar +RANLIB = $(CROSS_COMPILE)granlib +NM = $(CROSS_COMPILE)gnm +STRIP = $(CROSS_COMPILE)gstrip +OBJCOPY = $(CROSS_COMPILE)gobjcopy +OBJDUMP = $(CROSS_COMPILE)gobjdump +SIZEUTIL = $(CROSS_COMPILE)gsize + +SHELL = bash + +INSTALL = ginstall +INSTALL_DIR = $(INSTALL) -d -m0755 -p +INSTALL_DATA = $(INSTALL) -m0644 -p +INSTALL_PROG = $(INSTALL) -m0755 -p + +BOOT_DIR ?= /boot +DEBUG_DIR ?= /usr/lib/debug + +SunOS_LIBDIR = /usr/sfw/lib +SunOS_LIBDIR_x86_64 = /usr/sfw/lib/amd64 + +SOCKET_LIBS = -lsocket +PTHREAD_LIBS = -lpthread +UTIL_LIBS = + +SONAME_LDFLAG = -h +SHLIB_LDFLAGS = -R $(SunOS_LIBDIR) -shared + +CFLAGS += -Wa,--divide -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ + diff --git a/config/Tools.mk.in b/config/Tools.mk.in new file mode 100644 index 0000000000..23df47af8d --- /dev/null +++ b/config/Tools.mk.in @@ -0,0 +1,79 @@ +-include $(XEN_ROOT)/config/Paths.mk + +CONFIG_RUMP := @CONFIG_RUMP@ +ifeq ($(CONFIG_RUMP),y) +XEN_OS := NetBSDRump +endif + +# Tools path +BISON := @BISON@ +FLEX := @FLEX@ +PYTHON := @PYTHON@ +PYTHON_PATH := @PYTHONPATH@ +PY_NOOPT_CFLAGS := @PY_NOOPT_CFLAGS@ +PERL := @PERL@ +BASH := @BASH@ +XGETTTEXT := @XGETTEXT@ +AS86 := @AS86@ +LD86 := @LD86@ +BCC := @BCC@ +IASL := @IASL@ +AWK := @AWK@ +FETCHER := @FETCHER@ + +# Extra folder for libs/includes +PREPEND_INCLUDES := @PREPEND_INCLUDES@ +PREPEND_LIB := @PREPEND_LIB@ +APPEND_INCLUDES := @APPEND_INCLUDES@ +APPEND_LIB := @APPEND_LIB@ + +PTHREAD_CFLAGS := @PTHREAD_CFLAGS@ +PTHREAD_LDFLAGS := @PTHREAD_LDFLAGS@ +PTHREAD_LIBS := @PTHREAD_LIBS@ + +PTYFUNCS_LIBS := @PTYFUNCS_LIBS@ + +LIBNL3_LIBS := @LIBNL3_LIBS@ +LIBNL3_CFLAGS := @LIBNL3_CFLAGS@ +XEN_TOOLS_RPATH := @rpath@ + +# Download GIT repositories via HTTP or GIT's own protocol? +# GIT's protocol is faster and more robust, when it works at all (firewalls +# may block it). We make it the default, but if your GIT repository downloads +# fail or hang, please pass --enable-githttp to configure. +GIT_HTTP ?= @githttp@ + +# Optional components +XENSTAT_XENTOP := @monitors@ +OCAML_TOOLS := @ocamltools@ +FLASK_POLICY := @xsmpolicy@ +CONFIG_OVMF := @ovmf@ +CONFIG_ROMBIOS := @rombios@ +CONFIG_SEABIOS := @seabios@ +CONFIG_IPXE := @ipxe@ +CONFIG_QEMU_TRAD := @qemu_traditional@ +CONFIG_QEMU_XEN := @qemu_xen@ +CONFIG_QEMUU_EXTRA_ARGS:= @EXTRA_QEMUU_CONFIGURE_ARGS@ +CONFIG_LIBNL := @libnl@ +CONFIG_GOLANG := @golang@ + +CONFIG_SYSTEMD := @systemd@ +SYSTEMD_CFLAGS := @SYSTEMD_CFLAGS@ +SYSTEMD_LIBS := @SYSTEMD_LIBS@ +XEN_SYSTEMD_DIR := @SYSTEMD_DIR@ +XEN_SYSTEMD_MODULES_LOAD := @SYSTEMD_MODULES_LOAD@ +CONFIG_9PFS := @ninepfs@ + +LINUX_BACKEND_MODULES := @LINUX_BACKEND_MODULES@ + +#System options +ZLIB := @zlib@ +CONFIG_LIBICONV := @libiconv@ +EXTFS_LIBS := @EXTFS_LIBS@ +CURSES_LIBS := @CURSES_LIBS@ +TINFO_LIBS := @TINFO_LIBS@ +ARGP_LDFLAGS := @argp_ldflags@ + +FILE_OFFSET_BITS := @FILE_OFFSET_BITS@ + +CONFIG_PV_SHIM := @pvshim@ diff --git a/config/Toplevel.mk.in b/config/Toplevel.mk.in new file mode 100644 index 0000000000..4ecacbb37d --- /dev/null +++ b/config/Toplevel.mk.in @@ -0,0 +1,2 @@ +SUBSYSTEMS := @SUBSYSTEMS@ +GIT_HTTP ?= @githttp@ diff --git a/config/arm32.mk b/config/arm32.mk new file mode 100644 index 0000000000..f95228e3c0 --- /dev/null +++ b/config/arm32.mk @@ -0,0 +1,15 @@ +CONFIG_ARM := y +CONFIG_ARM_32 := y +CONFIG_ARM_$(XEN_OS) := y + +CONFIG_XEN_INSTALL_SUFFIX := + +# -march= -mcpu= + +# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb: +CFLAGS += -marm + +# Use only if calling $(LD) directly. +LDFLAGS_DIRECT += -EL + +IOEMU_CPU_ARCH ?= arm diff --git a/config/arm64.mk b/config/arm64.mk new file mode 100644 index 0000000000..aa45772b61 --- /dev/null +++ b/config/arm64.mk @@ -0,0 +1,14 @@ +CONFIG_ARM := y +CONFIG_ARM_64 := y +CONFIG_ARM_$(XEN_OS) := y + +CONFIG_XEN_INSTALL_SUFFIX := + +CFLAGS += #-marm -march= -mcpu= etc + +# Use only if calling $(LD) directly. +LDFLAGS_DIRECT += -EL + +IOEMU_CPU_ARCH ?= aarch64 + +EFI_DIR ?= /usr/lib64/efi diff --git a/config/x86_32.mk b/config/x86_32.mk new file mode 100644 index 0000000000..29d13f7773 --- /dev/null +++ b/config/x86_32.mk @@ -0,0 +1,15 @@ +CONFIG_X86 := y +CONFIG_X86_32 := y +CONFIG_X86_$(XEN_OS) := y + +CONFIG_MIGRATE := y +CONFIG_XCUTILS := y + +CFLAGS += -m32 -march=i686 + +# Use only if calling $(LD) directly. +LDFLAGS_DIRECT_OpenBSD = _obsd +LDFLAGS_DIRECT_FreeBSD = _fbsd +LDFLAGS_DIRECT += -melf_i386$(LDFLAGS_DIRECT_$(XEN_OS)) + +IOEMU_CPU_ARCH ?= i386 diff --git a/config/x86_64.mk b/config/x86_64.mk new file mode 100644 index 0000000000..85fa27ca69 --- /dev/null +++ b/config/x86_64.mk @@ -0,0 +1,27 @@ +CONFIG_X86 := y +CONFIG_X86_64 := y +CONFIG_X86_$(XEN_OS) := y + +CONFIG_MIGRATE := y +CONFIG_XCUTILS := y + +CONFIG_XEN_INSTALL_SUFFIX := .gz + +CFLAGS += -m64 + +SunOS_LIBDIR = $(SunOS_LIBDIR_x86_64) + +EFI_DIR ?= /usr/lib64/efi + +# Use only if calling $(LD) directly. +ifeq ($(XEN_OS),OpenBSD) +LDFLAGS_DIRECT += -melf_x86_64_obsd +else +ifeq ($(XEN_OS),FreeBSD) +LDFLAGS_DIRECT += -melf_x86_64_fbsd +else +LDFLAGS_DIRECT += -melf_x86_64 +endif +endif + +IOEMU_CPU_ARCH ?= x86_64 diff --git a/configure b/configure new file mode 100755 index 0000000000..9da3970cef --- /dev/null +++ b/configure @@ -0,0 +1,3618 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for Xen Hypervisor 4.14. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: xen-devel@lists.xen.org about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Xen Hypervisor' +PACKAGE_TARNAME='xen' +PACKAGE_VERSION='4.14' +PACKAGE_STRING='Xen Hypervisor 4.14' +PACKAGE_BUGREPORT='xen-devel@lists.xen.org' +PACKAGE_URL='https://www.xen.org/' + +ac_unique_file="./xen/common/kernel.c" +enable_option_checking=no +ac_subst_vars='LTLIBOBJS +LIBOBJS +SUBSYSTEMS +docs +stubdom +tools +xen +subdirs +githttp +DEBUG_DIR +XEN_DUMP_DIR +XEN_PAGING_DIR +XEN_LOCK_DIR +XEN_SCRIPT_DIR +XEN_CONFIG_DIR +INITD_DIR +CONFIG_DIR +SHAREDIR +XEN_LIB_DIR +XEN_RUN_STORED +XEN_LIB_STORED +XEN_LOG_DIR +XEN_RUN_DIR +XENFIRMWAREDIR +LIBEXEC_INC +LIBEXEC_LIB +LIBEXEC_BIN +LIBEXEC +CONFIG_LEAF_DIR +XENSTORED_PORT +XENSTORED_KVA +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_initddir +with_sysconfig_leaf_dir +with_libexec_leaf_dir +with_xen_dumpdir +with_rundir +with_debugdir +enable_githttp +enable_xen +enable_tools +enable_stubdom +enable_docs +' + ac_precious_vars='build_alias +host_alias +target_alias' +ac_subdirs_all='xen +tools +stubdom +docs' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Xen Hypervisor 4.14 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/xen] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Xen Hypervisor 4.14:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-githttp Download GIT repositories via HTTP (default is + DISABLED) + --disable-xen Disable build and install of xen + --disable-tools Disable build and install of tools + --enable-stubdom Enable build and install of stubdom + --disable-docs Disable build and install of docs + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-initddir=DIR Path to directory with sysv runlevel scripts. + [SYSCONFDIR/init.d] + --with-sysconfig-leaf-dir=SUBDIR + Name of subdirectory in /etc to store runtime + options for runlevel scripts and daemons such as + xenstored. This should be either "sysconfig" or + "default". [sysconfig] + --with-libexec-leaf-dir=SUBDIR + Name of subdirectory in libexecdir to use. + --with-xen-dumpdir=DIR Path to directory for domU crash dumps. + [LOCALSTATEDIR/lib/xen/dump] + --with-rundir=DIR Path to directory for runtime data. + [LOCALSTATEDIR/run] + --with-debugdir=DIR Path to directory for debug symbols. + [PREFIX/lib/debug] + +Report bugs to . +Xen Hypervisor home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Xen Hypervisor configure 4.14 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Xen Hypervisor $as_me 4.14, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_files="$ac_config_files config/Toplevel.mk config/Paths.mk" + + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + + + + + + + + + + + + + + + + + + + + + + + + +case "$host_os" in +*freebsd*) XENSTORED_KVA=/dev/xen/xenstored ;; +*) XENSTORED_KVA=/proc/xen/xsd_kva ;; +esac + + +case "$host_os" in +*freebsd*) XENSTORED_PORT=/dev/xen/xenstored ;; +*) XENSTORED_PORT=/proc/xen/xsd_port ;; +esac + + + + +test "x$prefix" = "xNONE" && prefix=$ac_default_prefix +test "x$exec_prefix" = "xNONE" && exec_prefix=${prefix} + +if test "$localstatedir" = '${prefix}/var' ; then + localstatedir=/var +fi + +bindir=`eval echo $bindir` +sbindir=`eval echo $sbindir` +libdir=`eval echo $libdir` + +if test "x$sysconfdir" = 'x${prefix}/etc' ; then + case "$host_os" in + *freebsd*) + sysconfdir=$prefix/etc + ;; + *solaris*) + if test "$prefix" = "/usr" ; then + sysconfdir=/etc + else + sysconfdir=$prefix/etc + fi + ;; + *) + sysconfdir=/etc + ;; + esac +fi + + +# Check whether --with-initddir was given. +if test "${with_initddir+set}" = set; then : + withval=$with_initddir; initddir_path=$withval +else + case "$host_os" in + *linux*) + if test -d $sysconfdir/rc.d/init.d ; then + initddir_path=$sysconfdir/rc.d/init.d + else + initddir_path=$sysconfdir/init.d + fi + ;; + *) + initddir_path=$sysconfdir/rc.d + ;; + esac +fi + + + +# Check whether --with-sysconfig-leaf-dir was given. +if test "${with_sysconfig_leaf_dir+set}" = set; then : + withval=$with_sysconfig_leaf_dir; config_leaf_dir=$withval +else + config_leaf_dir=sysconfig + if test ! -d /etc/sysconfig ; then config_leaf_dir=default ; fi +fi + +CONFIG_LEAF_DIR=$config_leaf_dir + + + +# Check whether --with-libexec-leaf-dir was given. +if test "${with_libexec_leaf_dir+set}" = set; then : + withval=$with_libexec_leaf_dir; libexec_subdir=$withval +else + libexec_subdir=$PACKAGE_TARNAME +fi + + + +# Check whether --with-xen-dumpdir was given. +if test "${with_xen_dumpdir+set}" = set; then : + withval=$with_xen_dumpdir; xen_dumpdir_path=$withval +else + xen_dumpdir_path=$localstatedir/lib/xen/dump +fi + + + +# Check whether --with-rundir was given. +if test "${with_rundir+set}" = set; then : + withval=$with_rundir; rundir_path=$withval +else + rundir_path=$localstatedir/run +fi + + + +# Check whether --with-debugdir was given. +if test "${with_debugdir+set}" = set; then : + withval=$with_debugdir; debugdir_path=$withval +else + debugdir_path=$prefix/lib/debug +fi + + +if test "$libexecdir" = '${exec_prefix}/libexec' ; then + case "$host_os" in + *netbsd*) ;; + *) + libexecdir='${exec_prefix}/lib' + ;; + esac +fi +LIBEXEC=`eval echo $libexecdir/$libexec_subdir` + + +LIBEXEC_BIN=${LIBEXEC}/bin + +LIBEXEC_LIB=${LIBEXEC}/lib + +LIBEXEC_INC=${LIBEXEC}/include + +XENFIRMWAREDIR=${LIBEXEC}/boot + + +XEN_RUN_DIR=$rundir_path/xen + + +XEN_LOG_DIR=$localstatedir/log/xen + + +XEN_LIB_STORED=$localstatedir/lib/xenstored + + +XEN_RUN_STORED=$rundir_path/xenstored + + +XEN_LIB_DIR=$localstatedir/lib/xen + + +SHAREDIR=$prefix/share + + +CONFIG_DIR=$sysconfdir + + +INITD_DIR=$initddir_path + + +XEN_CONFIG_DIR=$CONFIG_DIR/xen + + +XEN_SCRIPT_DIR=$XEN_CONFIG_DIR/scripts + + +case "$host_os" in +*freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;; +*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;; +*) XEN_LOCK_DIR=$localstatedir/lock ;; +esac + + +XEN_PAGING_DIR=$localstatedir/lib/xen/xenpaging + + +XEN_DUMP_DIR=$xen_dumpdir_path + + +DEBUG_DIR=$debugdir_path + + + +# Check whether --enable-githttp was given. +if test "${enable_githttp+set}" = set; then : + enableval=$enable_githttp; +fi + + +if test "x$enable_githttp" = "xno"; then : + + ax_cv_githttp="n" + +elif test "x$enable_githttp" = "xyes"; then : + + ax_cv_githttp="y" + +elif test -z $ax_cv_githttp; then : + + ax_cv_githttp="n" + +fi +githttp=$ax_cv_githttp + + + +case "$host_cpu" in + i[3456]86|x86_64) + arch_enable_stubdom=y + ;; + *) + arch_enable_stubdom=n + ;; +esac + +case "$host_os" in + freebsd*) + arch_enable_stubdom=n + ;; +esac + + + + +# Check whether --enable-xen was given. +if test "${enable_xen+set}" = set; then : + enableval=$enable_xen; + +if test "x$enableval" = "xyes"; then : + + +xen=y +SUBSYSTEMS="$SUBSYSTEMS xen" + + +else + +if test "x$enableval" = "xno"; then : + + +xen=n + + +fi + +fi + + +else + + +xen=y +SUBSYSTEMS="$SUBSYSTEMS xen" + + +fi + + +if test -e "xen/configure"; then : + +if test "x$xen" = "xy" || test "x$xen" = "x" ; then + subdirs="$subdirs xen" + +fi + +fi + + + + +# Check whether --enable-tools was given. +if test "${enable_tools+set}" = set; then : + enableval=$enable_tools; + +if test "x$enableval" = "xyes"; then : + + +tools=y +SUBSYSTEMS="$SUBSYSTEMS tools" + + +else + +if test "x$enableval" = "xno"; then : + + +tools=n + + +fi + +fi + + +else + + +tools=y +SUBSYSTEMS="$SUBSYSTEMS tools" + + +fi + + +if test -e "tools/configure"; then : + +if test "x$tools" = "xy" || test "x$tools" = "x" ; then + subdirs="$subdirs tools" + +fi + +fi + + + + +# Check whether --enable-stubdom was given. +if test "${enable_stubdom+set}" = set; then : + enableval=$enable_stubdom; + +if test "x$enableval" = "xyes"; then : + + +stubdom=y +SUBSYSTEMS="$SUBSYSTEMS stubdom" + + +else + +if test "x$enableval" = "xno"; then : + + +stubdom=n + + +fi + +fi + + +else + +if test "x$arch_enable_stubdom" = "xy"; then : + + +stubdom=y +SUBSYSTEMS="$SUBSYSTEMS stubdom" + + +else + + +stubdom=n + + +fi + +fi + + +if test -e "stubdom/configure"; then : + +if test "x$stubdom" = "xy" || test "x$stubdom" = "x" ; then + subdirs="$subdirs stubdom" + +fi + +fi + + + + +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; + +if test "x$enableval" = "xyes"; then : + + +docs=y +SUBSYSTEMS="$SUBSYSTEMS docs" + + +else + +if test "x$enableval" = "xno"; then : + + +docs=n + + +fi + +fi + + +else + + +docs=y +SUBSYSTEMS="$SUBSYSTEMS docs" + + +fi + + +if test -e "docs/configure"; then : + +if test "x$docs" = "xy" || test "x$docs" = "x" ; then + subdirs="$subdirs docs" + +fi + +fi + + + + + + +echo "Will build the following subsystems:" +for x in $SUBSYSTEMS; do + echo " $x" +done + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Xen Hypervisor $as_me 4.14, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to . +Xen Hypervisor home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Xen Hypervisor config.status 4.14 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/Toplevel.mk") CONFIG_FILES="$CONFIG_FILES config/Toplevel.mk" ;; + "config/Paths.mk") CONFIG_FILES="$CONFIG_FILES config/Paths.mk" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ac_sub_configure_args= + ac_prev= + eval "set x $ac_configure_args" + shift + for ac_arg + do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_sub_configure_args " '$ac_arg'" ;; + esac + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" + + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d "$srcdir/$ac_dir" || continue + + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 + $as_echo "$ac_msg" >&6 + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + cd "$ac_dir" + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ac_sub_configure=$ac_aux_dir/configure + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 +$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 + fi + + cd "$ac_popdir" + done +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000000..3aea407153 --- /dev/null +++ b/configure.ac @@ -0,0 +1,46 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.67]) +AC_INIT([Xen Hypervisor], m4_esyscmd([./version.sh ./xen/Makefile]), + [xen-devel@lists.xen.org], [xen], [https://www.xen.org/]) +AC_CONFIG_SRCDIR([./xen/common/kernel.c]) +AC_CONFIG_FILES([ + config/Toplevel.mk + config/Paths.mk +]) + +AC_CANONICAL_HOST + +m4_include([m4/features.m4]) +m4_include([m4/subsystem.m4]) +m4_include([m4/paths.m4]) + +AX_XEN_EXPAND_CONFIG() +AX_ARG_DEFAULT_DISABLE([githttp], [Download GIT repositories via HTTP]) + +dnl mini-os is only ported to certain platforms +case "$host_cpu" in + i[[3456]]86|x86_64) + arch_enable_stubdom=y + ;; + *) + arch_enable_stubdom=n + ;; +esac + +dnl Stubdomains need some work in order to compile on FreeBSD +case "$host_os" in + freebsd*) + arch_enable_stubdom=n + ;; +esac + +AX_SUBSYSTEM_DEFAULT_ENABLE([xen]) +AX_SUBSYSTEM_DEFAULT_ENABLE([tools]) +AX_SUBSYSTEM_CONDITIONAL([stubdom], $arch_enable_stubdom) +AX_SUBSYSTEM_DEFAULT_ENABLE([docs]) + +AX_SUBSYSTEM_FINISH + +AC_OUTPUT() diff --git a/docs/INDEX b/docs/INDEX new file mode 100644 index 0000000000..e673edd75c --- /dev/null +++ b/docs/INDEX @@ -0,0 +1,28 @@ +hypercall Hypercall Interfaces +hypercall/arm/index ARM +hypercall/x86_32/index x86_32 +hypercall/x86_64/index x86_64 + +man Man Pages + +misc Miscellaneous Documentation +misc/hvm-emulated-unplug Xen HVM emulated device unplug protocol +misc/console Xen PV Console notes +misc/xen-command-line Xen Hypervisor Command Line Options +misc/crashdb Xen crash debugger notes +misc/grant-tables A Rough Introduction to Using Grant Tables +misc/kexec_and_kdump Kexec and Kdump for Xen +misc/xenstore Xenstore protocol specification +misc/xenstore-paths Xenstore path documentation +misc/distro_mapping Distro Directory Layouts +misc/dump-core-format Xen Core Dump Format +misc/vtd VT-d HOWTO +misc/xen-error-handling Xen Error Handling +misc/xenpaging Xen Paging +misc/xsm-flask XSM/FLASK Configuration +misc/arm/booting How to boot Xen on ARM +misc/arm/early-printk Enabling early printk on ARM +misc/arm/passthrough Passthrough a device described in the Device Tree to a guest +misc/arm/device-tree/booting Device tree bindings to boot Xen +misc/arm/device-tree/passthrough Device tree binding to passthrough a device +features/dom0less.markdown Boot multiple domains from Xen in parallel diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..8de1efb6f5 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,244 @@ +XEN_ROOT=$(CURDIR)/.. +include $(XEN_ROOT)/Config.mk +-include $(XEN_ROOT)/config/Docs.mk + +VERSION := $(shell $(MAKE) -C $(XEN_ROOT)/xen --no-print-directory xenversion) +DATE := $(shell date +%Y-%m-%d) + +DOC_ARCHES := arm x86_32 x86_64 +MAN_SECTIONS := 1 5 7 8 + +# Documentation sources to build +MAN-SRC-y := $(sort $(basename $(wildcard man/*.pod man/*.pandoc))) + +RST-SRC-y := $(sort $(filter-out %index.rst,$(shell find * -type f -name '*.rst' -print))) + +TXTSRC-y := $(sort $(shell find misc -name '*.txt' -print)) + +PANDOCSRC-y := $(sort $(shell find designs/ features/ misc/ process/ specs/ \( -name '*.pandoc' -o -name '*.md' \) -print)) + +# Documentation targets +$(foreach i,$(MAN_SECTIONS), \ + $(eval DOC_MAN$(i) := $(patsubst man/%.$(i),man$(i)/%.$(i), \ + $(filter %.$(i),$(MAN-SRC-y))))) + +DOC_HTML := html/SUPPORT.html \ + $(patsubst %.pandoc,html/%.html,$(PANDOCSRC-y)) \ + $(patsubst %.md,html/%.html,$(PANDOCSRC-y)) \ + $(patsubst %.rst,html/%.html,$(RST-SRC-y)) \ + $(patsubst %,html/%.html,$(MAN-SRC-y)) \ + $(patsubst %.txt,html/%.txt,$(TXTSRC-y)) \ + $(patsubst %,html/hypercall/%/index.html,$(DOC_ARCHES)) +DOC_TXT := $(patsubst %.txt,txt/%.txt,$(TXTSRC-y)) \ + $(patsubst %.pandoc,txt/%.txt,$(PANDOCSRC-y)) \ + $(patsubst %.md,txt/%.txt,$(PANDOCSRC-y)) \ + $(patsubst %.rst,txt/%.txt,$(RST-SRC-y)) \ + $(patsubst %,txt/%.txt,$(MAN-SRC-y)) +DOC_PDF := $(patsubst %.pandoc,pdf/%.pdf,$(PANDOCSRC-y)) \ + $(patsubst %.md,pdf/%.pdf,$(PANDOCSRC-y)) \ + $(patsubst %.rst,pdf/%.pdf,$(RST-SRC-y)) + +# Top level build targets +.PHONY: all +all: build + +.PHONY: build +build: html txt pdf man-pages figs + +.PHONY: sphinx-html +sphinx-html: + sphinx-build -b html . sphinx/html + +.PHONY: html +html: $(DOC_HTML) html/index.html + +.PHONY: txt +txt: $(DOC_TXT) + +.PHONY: figs +figs: +ifneq ($(FIG2DEV),) + $(MAKE) -C figs +else + @echo "fig2dev (transfig) not installed; skipping figs." +endif + +.PHONY: pdf +pdf: $(DOC_PDF) + +.PHONY: clean +clean: clean-man-pages + $(MAKE) -C figs clean + rm -rf .word_count *.aux *.dvi *.bbl *.blg *.glo *.idx *~ + rm -rf *.ilg *.log *.ind *.toc *.bak *.tmp core + rm -rf html txt pdf sphinx/html + +.PHONY: distclean +distclean: clean + rm -rf $(XEN_ROOT)/config/Docs.mk config.log config.status config.cache \ + autom4te.cache + +# Top level install targets + +.PHONY: man-pages install-man-pages clean-man-pages uninstall-man-pages + +# Metarules for generating manpages. Run with $(1) substitued for section +define GENERATE_MANPAGE_RULES + +# Real manpages +man$(1)/%.$(1): man/%.$(1).pod Makefile +ifneq ($(POD2MAN),) + @$(INSTALL_DIR) $$(@D) + $(POD2MAN) --release=$(VERSION) --name=$$* -s $(1) -c "Xen" $$< $$@ +else + @echo "pod2man not installed; skipping $$@" +endif + +man$(1)/%.$(1): man/%.$(1).pandoc Makefile +ifneq ($(PANDOC),) + @$(INSTALL_DIR) $$(@D) + $(PANDOC) --standalone -V title=$$* -V section=$(1) \ + -V date="$(DATE)" -V footer="$(VERSION)" \ + -V header=Xen $$< -t man --output $$@ +else + @echo "pandoc not installed; skipping $$@" +endif + +# HTML manpages +# sed used to fix up links between man-pages +# 1) L -> L +# 2) -> +html/man/%.$(1).html: man/%.$(1).pod Makefile +ifneq ($(POD2HTML),) + @$(INSTALL_DIR) $$(@D) + sed -r -e 's%L<([^>]+)\(([1-9])\)>%L<\1(\2)|relative:\1.\2.html>%g' $$< | \ + $(POD2HTML) | \ + sed -r -e 's%( href=")relative:%\1%g' > $$@ +else + @echo "pod2html not installed; skipping $$@" +endif + +html/man/%.$(1).html: man/%.$(1).pandoc Makefile +ifneq ($(PANDOC),) + @$(INSTALL_DIR) $$(@D) + $(PANDOC) --standalone $$< -t html --toc --output $$@ +else + @echo "pandoc not installed; skipping $$@" +endif + +# Text manpages +txt/man/%.$(1).txt: man/%.$(1).pod Makefile +ifneq ($(POD2TEXT),) + @$(INSTALL_DIR) $$(@D) + $(POD2TEXT) $$< $$@ +else + @echo "pod2text not installed; skipping $$@" +endif + +txt/man/%.$(1).txt: man/%.$(1).pandoc Makefile +ifneq ($(PANDOC),) + @$(INSTALL_DIR) $$(@D) + $(PANDOC) --standalone $$< -t plain --output $$@ +else + @echo "pandoc not installed; skipping $$@" +endif + +# Build +.PHONY: man$(1)-pages +man$(1)-pages: $$(DOC_MAN$(1)) + +# Install +.PHONY: install-man$(1)-pages +install-man$(1)-pages: man$(1)-pages + $(INSTALL_DIR) $(DESTDIR)$(mandir) + cp -r man$(1) $(DESTDIR)$(mandir) + +# Clean +.PHONY: clean-man$(1)-pages +clean-man$(1)-pages: + rm -rf man$(1) + +# Uninstall +.PHONY: uninstall-man$(1)-pages +uninstall-man$(1)-pages: + rm -f $(addprefix $(DESTDIR)$(mandir)/,$(DOC_MAN$(1))) + +# Link buld/install/clean to toplevel rules +man-pages: man$(1)-pages +install-man-pages: install-man$(1)-pages +clean-man-pages: clean-man$(1)-pages +uninstall-man-pages: uninstall-man$(1)-pages + +endef + +# Generate manpage rules for each section +$(foreach i,$(MAN_SECTIONS),$(eval $(call GENERATE_MANPAGE_RULES,$(i)))) + +.PHONY: install-html +install-html: html txt figs + $(INSTALL_DIR) $(DESTDIR)$(docdir) + [ ! -d html ] || cp -R html $(DESTDIR)$(docdir) + +.PHONY: install +install: install-man-pages install-html + +.PHONY: uninstall-html +uninstall-html: + rm -rf $(DESTDIR)$(docdir) + +.PHONY: uninstall +uninstall: uninstall-man-pages uninstall-html + +# Individual file build targets +html/index.html: $(DOC_HTML) $(CURDIR)/gen-html-index INDEX + $(PERL) -w -- $(CURDIR)/gen-html-index -i INDEX html $(DOC_HTML) + +html/%.txt: %.txt + @$(INSTALL_DIR) $(@D) + $(INSTALL_DATA) $< $@ + + +# For non-x86 arches exclude the subarch whole x86 arch. +$(foreach i,$(filter-out x86_32 x86_64,$(DOC_ARCHES)),html/hypercall/$(i)/index.html): EXTRA_EXCLUDE := -X arch-x86 + +html/hypercall/%/index.html: $(CURDIR)/xen-headers Makefile + rm -rf $(@D) + $(INSTALL_DIR) $(@D) + $(PERL) -w $(CURDIR)/xen-headers -O $(@D) \ + -T 'arch-$* - Xen public headers' \ + $(patsubst %,-X arch-%,$(filter-out $*,$(DOC_ARCHES))) \ + $(patsubst %,-X xen-%,$(filter-out $*,$(DOC_ARCHES))) \ + $(EXTRA_EXCLUDE) \ + $(XEN_ROOT)/xen include/public include/xen/errno.h + +-include $(wildcard html/hypercall/*/.deps) + +txt/%.txt: %.txt + @$(INSTALL_DIR) $(@D) + $(INSTALL_DATA) $< $@ + +# Metarule for generating pandoc rules. +define GENERATE_PANDOC_RULE_RAW +$(1): $(2) +ifneq ($(PANDOC),) + @$(INSTALL_DIR) $$(@D) + $(PANDOC) --number-sections --toc --standalone $$< --output $$@ +else + @echo "pandoc not installed; skipping $$@" +endif +endef +define GENERATE_PANDOC_RULE +# $(1) is the target documentation format. $(2) is the source format. +$(call GENERATE_PANDOC_RULE_RAW,$(1)/%.$(1),%.$(2)) +endef + +$(foreach dst-fmt,pdf txt html,\ +$(foreach src-fmt,pandoc md rst,\ +$(eval $(call GENERATE_PANDOC_RULE,$(dst-fmt),$(src-fmt))))) + +$(eval $(call GENERATE_PANDOC_RULE_RAW,html/SUPPORT.html,$(XEN_ROOT)/SUPPORT.md)) + +ifeq (,$(findstring clean,$(MAKECMDGOALS))) +$(XEN_ROOT)/config/Docs.mk: + $(error You have to run ./configure before building docs) +endif diff --git a/docs/README.colo b/docs/README.colo new file mode 100644 index 0000000000..acb4ee5a0a --- /dev/null +++ b/docs/README.colo @@ -0,0 +1,9 @@ +COLO FT/HA (COarse-grain LOck-stepping Virtual Machines for Non-stop Service) +project is a high availability solution. Both primary VM (PVM) and secondary VM +(SVM) run in parallel. They receive the same request from client, and generate +response in parallel too. If the response packets from PVM and SVM are +identical, they are released immediately. Otherwise, a VM checkpoint (on demand) +is conducted. + +See the website at https://wiki.xen.org/wiki/COLO_-_Coarse_Grain_Lock_Stepping +for details. diff --git a/docs/README.remus b/docs/README.remus new file mode 100644 index 0000000000..e41e045a10 --- /dev/null +++ b/docs/README.remus @@ -0,0 +1,20 @@ +Remus provides fault tolerance for virtual machines by sending continuous +checkpoints to a backup, which will activate if the target VM fails. + +See the website at https://wiki.xen.org/wiki/Remus for details. + +Using Remus with libxl on Xen 4.5 and higher: + To enable network buffering, you need libnl 3.2.8 + or higher along with the development headers and command line utilities. + If your distro does not have the appropriate libnl3 version, you can find + the latest source tarball of libnl3 at http://www.carisma.slowglass.com/~tgr/libnl/ + +Disk replication: + VMs protected by Remus need to use DRBD based disk backends. Specifically, you + need a compile and install a custom version of DRBD, that is available publicly + at https://github.com/rshriram/remus-drbd + This code is based on DRBD 8.3.11 and uses a new replication protocol (named + protocol D) for asynchronous disk checkpoint replication. A protected VM's DRBD + disks on the primary and backup hosts need to be configured to use protocol D + as the replication protocol. An example resource configuration file can be found + in the aforementioned github repository. diff --git a/docs/README.source b/docs/README.source new file mode 100644 index 0000000000..f20fa92c28 --- /dev/null +++ b/docs/README.source @@ -0,0 +1,32 @@ +Sphinx documentation: + +All source rendered by Sphinx is licensed under CC-BY-4.0. + +You are free to: + Share: + Copy and redistribute the material in any medium or format. + Adapt: + Remix, transform, and build upon the material for any purpose, even + commercially. + +Under the following terms: + Attribution: + You must give appropriate credit, provide a link to the license, and + indicate if changes were made. You may do so in any reasonable manner, but + not in any way that suggests the licensor endorses you or your use. + No additional restrictions: + You may not apply legal terms or technological measures that legally + restrict others from doing anything the license permits. + +See https://creativecommons.org/licenses/by/4.0/ for full details. + +This includes: + * All ReStructured Text files: docs/*/*.rst + * The Sphinx configuration file: docs/conf.py + * Content in Sphinx-exclusive subdirs: docs/*-guide/* + + +Other documentation: + +There are a variety of text documents in various formats. These, given no +explicit license guidance, fall under Xen's default GPL-2.0 license. diff --git a/docs/admin-guide/index.rst b/docs/admin-guide/index.rst new file mode 100644 index 0000000000..54e6f65de3 --- /dev/null +++ b/docs/admin-guide/index.rst @@ -0,0 +1,8 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Admin Guide +=========== + +.. toctree:: + introduction + microcode-loading diff --git a/docs/admin-guide/introduction.rst b/docs/admin-guide/introduction.rst new file mode 100644 index 0000000000..6da2758d70 --- /dev/null +++ b/docs/admin-guide/introduction.rst @@ -0,0 +1,40 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Introduction +============ + +Xen is an open source, bare metal hypervisor. It runs as the most privileged +piece of software, and shares the resources of the hardware between virtual +machines. + +In Xen terminology, there are :term:`domains`, commonly abbreviated to +dom, which are identified by their numeric :term:`domid`. + +When Xen boots, dom0 is automatically started as well. Dom0 is a virtual +machine which, by default, is granted full permissions [1]_. A typical setup +might be: + +.. image:: xen-overview.drawio.svg + +Dom0 takes the role of :term:`control domain`, responsible for creating and +managing other virtual machines, and the role of :term:`hardware domain`, +responsible for hardware and marshalling guest I/O. + +Xen is deliberately minimal, and has no device drivers [2]_. Xen manages RAM, +schedules virtual CPUs on the available physical CPUs, and marshals +interrupts. + +Xen also provides a hypercall interface to guests, including event channels +(virtual interrupts), grant tables (shared memory), on which a lot of higher +level functionality is built. + +.. rubric:: Footnotes + +.. [1] A common misconception with Xen's architecture is that dom0 is somehow + different to other guests. The choice of id 0 is not an accident, and + follows in UNIX heritage. + +.. [2] This definition might be fuzzy. Xen can talk to common serial UARTs, + and knows how to drive various CPU internal devices such as IOMMUs, but + has no knowledge of network cards, disks, etc. All of that is the + hardware domains responsibility. diff --git a/docs/admin-guide/microcode-loading.rst b/docs/admin-guide/microcode-loading.rst new file mode 100644 index 0000000000..a07e25802f --- /dev/null +++ b/docs/admin-guide/microcode-loading.rst @@ -0,0 +1,152 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Microcode Loading +================= + +Like many other pieces of hardware, CPUs themselves have errata which are +discovered after shipping, and need to be addressed in the field. Microcode +can be considered as firmware for the processor, and updates are published as +needed by the CPU vendors. + +Microcode is included as part of the system firmware by an OEM, and a system +firmware update is the preferred way of obtaining updated microcode. However, +this is often not the most expedient way to get updates, so Xen supports +loading microcode itself. + +Distros typically package microcode updates for users, and may provide hooks +to cause microcode to be automatically loaded at boot time. Consult your dom0 +distro guidance for microcode loading. + +Microcode can make almost arbitrary changes to the processor, including to +software visible features. This includes removing features (e.g. the Haswell +TSX errata which necessitated disabling the feature entirely), or the addition +of brand new features (e.g. the Spectre v2 controls to work around speculative +execution vulnerabilities). + + +Boot time microcode loading +--------------------------- + +Where possible, microcode should be loaded at boot time. This allows the CPU +to be updated to its eventual configuration before Xen starts making setup +decisions based on the visible features. + +Xen will report during boot if it performed a microcode update:: + + [root@host ~]# xl dmesg | grep microcode + (XEN) microcode: CPU0 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU2 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU4 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU6 updated from revision 0x1a to 0x25, date = 2018-04-02 + +The exact details printed are system and microcode specific. After boot, the +current microcode version can obtained from with dom0:: + + [root@host ~]# head /proc/cpuinfo + processor : 0 + vendor_id : GenuineIntel + cpu family : 6 + model : 60 + model name : Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz + stepping : 3 + microcode : 0x25 + cpu MHz : 3392.148 + cache size : 8192 KB + physical id : 0 + + +Loading microcode from a single file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Xen handles microcode blobs in the binary form shipped by vendors, which is +also the format which the processor accepts. This format contains header +information which Xen and various userspace tools can use to identify the +correct blob for a specific CPU. + +Tools such as Dracut will identify the correct blob for the current CPU, which +will be a few kilobytes, for minimal overhead during boot. + +Additionally, Xen is capable of handling a number of blobs concatenated +together, and will locate the appropriate blob based on the header +information. + +This option is less efficient during boot, but may be preferred in situations +where the exact CPU details aren't known ahead of booting (e.g. install +media). + +The file containing the blob(s) needs to be accessible to Xen as early as +possible. + +* For multiboot/multiboot2 boots, this is achieved by loading the file as a + multiboot module. The ``ucode=$num`` command line option can be used to + identify which multiboot module contains the microcode, including negative + indexing to count from the end. + +* For EFI boots, there isn't really a concept of modules. A microcode file + can be specified in the EFI configuration file with ``ucode=$file``. Use of + this mechanism will override any ``ucode=`` settings on the command line. + + +Loading microcode from a Linux initrd +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For systems using a Linux based dom0, it usually suffices to install the +appropriate distro package, and add ``ucode=scan`` to Xen's command line. + +Xen is compatible with the Linux initrd microcode protocol. The initrd is +expected to be generated with an uncompressed CPIO archive at the beginning +which contains contains one of these two files:: + + kernel/x86/microcode/GenuineIntel.bin + kernel/x86/microcode/AuthenticAMD.bin + +The ``ucode=scan`` command line option will cause Xen to search through all +modules to find any CPIO archives, and search the archive for the applicable +file. Xen will stop searching at the first match. + + +Runtime microcode loading +------------------------- + +.. warning:: + + If at all possible, microcode updates should be done by firmware updates, + or at boot time. Not all microcode updates (or parts thereof) can be + applied at runtime. + + Given the proprietary nature of microcode, we are unable to make any claim + that runtime microcode loading is risk-free. Any runtime microcode loading + needs adequate testing on a development instance before being rolled out to + production systems. + +The ``xen-ucode`` utility can be used to initiate a runtime microcode load:: + + [root@host ~]# xen-ucode + xen-ucode: Xen microcode updating tool + Usage: xen-ucode + [root@host ~]# + +The details of microcode blobs (if even packaged to begin with) are specific +to the dom0 distribution. Consult your dom0 OS documentation for details. +One example with a Linux dom0 on a Haswell system might look like:: + + [root@host ~]# xen-ucode /lib/firmware/intel-ucode/06-3c-03 + [root@host ~]# + +It will pass the blob to Xen, which will check to see whether the blob is +correct for the processor, and newer than the running microcode. + +If these checks pass, the entire system will be rendezvoused and an update +will be initiated on all CPUs in parallel. As with boot time loading, +diagnostics will be put out onto the console:: + + [root@host ~]# xl dmesg | grep microcode + (XEN) microcode: CPU0 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU2 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU4 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) microcode: CPU6 updated from revision 0x1a to 0x25, date = 2018-04-02 + (XEN) 4 cores are to update their microcode + (XEN) microcode: CPU0 updated from revision 0x25 to 0x27, date = 2019-02-26 + (XEN) microcode: CPU4 updated from revision 0x25 to 0x27, date = 2019-02-26 + (XEN) microcode: CPU2 updated from revision 0x25 to 0x27, date = 2019-02-26 + (XEN) microcode: CPU6 updated from revision 0x25 to 0x27, date = 2019-02-26 diff --git a/docs/admin-guide/xen-overview.drawio.svg b/docs/admin-guide/xen-overview.drawio.svg new file mode 100644 index 0000000000..f120cdf77a --- /dev/null +++ b/docs/admin-guide/xen-overview.drawio.svg @@ -0,0 +1,97 @@ + + + + + + + + Xen + + + + Dom0 + + + + DomU + + + + DomU + + + + Hardware + + + + NIC + + + + Disk + + + + Systems Services + + + + Applications + + + + Applications + + + + Kernel + + + + Net + + + + Block + + + + Kernel + + + + Kernel + + + + Net + + + + Block + + + + Net + + + + Block + + + + + + + + + + + + + + + + + diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000000..50e41501db --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +# SPDX-License-Identifier: CC-BY-4.0 +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = u'Xen' +copyright = u'2019, The Xen development community' +author = u'The Xen development community' + +# Pull the Xen version straight out of the Makefile +try: + xen_ver = xen_subver = xen_extra = None + + for line in open(u"../xen/Makefile"): + if line.startswith(u"export XEN_VERSION"): + xen_ver = line.split(u"=")[1].strip() + elif line.startswith(u"export XEN_SUBVERSION"): + xen_subver = line.split(u"=")[1].strip() + elif line.startswith(u"export XEN_EXTRAVERSION"): + xen_extra = line.split(u"=")[1].split(u"$", 1)[0].strip() +except: + pass +finally: + if xen_ver and xen_subver and xen_extra: + version = xen_ver + u"." + xen_subver + release = version + xen_extra + else: + version = release = u"unknown version" + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +needs_sphinx = '1.4' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [u'sphinx/output', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = None + +primary_domain = 'c' +highlight_language = 'none' + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +try: + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +except ImportError: + sys.stderr.write('Warning: The Sphinx \'sphinx_rtd_theme\' HTML theme was not found. Make sure you have the theme installed to produce pretty HTML output. Falling back to the default theme.\n') + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Xendoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'Xen.tex', u'Xen Documentation', + u'The Xen development community', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'xen', u'Xen Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'Xen', u'Xen Documentation', + author, 'Xen', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] diff --git a/docs/configure b/docs/configure new file mode 100755 index 0000000000..9e3ed60462 --- /dev/null +++ b/docs/configure @@ -0,0 +1,3427 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for Xen Hypervisor Documentation 4.14. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: xen-devel@lists.xen.org about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Xen Hypervisor Documentation' +PACKAGE_TARNAME='xen' +PACKAGE_VERSION='4.14' +PACKAGE_STRING='Xen Hypervisor Documentation 4.14' +PACKAGE_BUGREPORT='xen-devel@lists.xen.org' +PACKAGE_URL='https://www.xen.org/' + +ac_unique_file="misc/xen-command-line.pandoc" +ac_subst_vars='LTLIBOBJS +LIBOBJS +PERL +PANDOC +POD2TEXT +POD2HTML +POD2MAN +FIG2DEV +DEBUG_DIR +XEN_DUMP_DIR +XEN_PAGING_DIR +XEN_LOCK_DIR +XEN_SCRIPT_DIR +XEN_CONFIG_DIR +INITD_DIR +CONFIG_DIR +SHAREDIR +XEN_LIB_DIR +XEN_RUN_STORED +XEN_LIB_STORED +XEN_LOG_DIR +XEN_RUN_DIR +XENFIRMWAREDIR +LIBEXEC_INC +LIBEXEC_LIB +LIBEXEC_BIN +LIBEXEC +CONFIG_LEAF_DIR +XENSTORED_PORT +XENSTORED_KVA +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_initddir +with_sysconfig_leaf_dir +with_libexec_leaf_dir +with_xen_dumpdir +with_rundir +with_debugdir +' + ac_precious_vars='build_alias +host_alias +target_alias +FIG2DEV +POD2MAN +POD2HTML +POD2TEXT +PANDOC +PERL' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Xen Hypervisor Documentation 4.14 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/xen] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Xen Hypervisor Documentation 4.14:";; + esac + cat <<\_ACEOF + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-initddir=DIR Path to directory with sysv runlevel scripts. + [SYSCONFDIR/init.d] + --with-sysconfig-leaf-dir=SUBDIR + Name of subdirectory in /etc to store runtime + options for runlevel scripts and daemons such as + xenstored. This should be either "sysconfig" or + "default". [sysconfig] + --with-libexec-leaf-dir=SUBDIR + Name of subdirectory in libexecdir to use. + --with-xen-dumpdir=DIR Path to directory for domU crash dumps. + [LOCALSTATEDIR/lib/xen/dump] + --with-rundir=DIR Path to directory for runtime data. + [LOCALSTATEDIR/run] + --with-debugdir=DIR Path to directory for debug symbols. + [PREFIX/lib/debug] + +Some influential environment variables: + FIG2DEV Path to fig2dev tool + POD2MAN Path to pod2man tool + POD2HTML Path to pod2html tool + POD2TEXT Path to pod2text tool + PANDOC Path to pandoc tool + PERL Path to Perl parser + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +Xen Hypervisor Documentation home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Xen Hypervisor Documentation configure 4.14 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Xen Hypervisor Documentation $as_me 4.14, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_files="$ac_config_files ../config/Docs.mk man/xl.cfg.5.pod man/xl.1.pod" + +ac_aux_dir= +for ac_dir in ../ "$srcdir"/../; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../ \"$srcdir\"/../" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +# M4 Macro includes + + + + + + + + + + + + + + +case "$host_os" in +*freebsd*) XENSTORED_KVA=/dev/xen/xenstored ;; +*) XENSTORED_KVA=/proc/xen/xsd_kva ;; +esac + + +case "$host_os" in +*freebsd*) XENSTORED_PORT=/dev/xen/xenstored ;; +*) XENSTORED_PORT=/proc/xen/xsd_port ;; +esac + + + + +test "x$prefix" = "xNONE" && prefix=$ac_default_prefix +test "x$exec_prefix" = "xNONE" && exec_prefix=${prefix} + +if test "$localstatedir" = '${prefix}/var' ; then + localstatedir=/var +fi + +bindir=`eval echo $bindir` +sbindir=`eval echo $sbindir` +libdir=`eval echo $libdir` + +if test "x$sysconfdir" = 'x${prefix}/etc' ; then + case "$host_os" in + *freebsd*) + sysconfdir=$prefix/etc + ;; + *solaris*) + if test "$prefix" = "/usr" ; then + sysconfdir=/etc + else + sysconfdir=$prefix/etc + fi + ;; + *) + sysconfdir=/etc + ;; + esac +fi + + +# Check whether --with-initddir was given. +if test "${with_initddir+set}" = set; then : + withval=$with_initddir; initddir_path=$withval +else + case "$host_os" in + *linux*) + if test -d $sysconfdir/rc.d/init.d ; then + initddir_path=$sysconfdir/rc.d/init.d + else + initddir_path=$sysconfdir/init.d + fi + ;; + *) + initddir_path=$sysconfdir/rc.d + ;; + esac +fi + + + +# Check whether --with-sysconfig-leaf-dir was given. +if test "${with_sysconfig_leaf_dir+set}" = set; then : + withval=$with_sysconfig_leaf_dir; config_leaf_dir=$withval +else + config_leaf_dir=sysconfig + if test ! -d /etc/sysconfig ; then config_leaf_dir=default ; fi +fi + +CONFIG_LEAF_DIR=$config_leaf_dir + + + +# Check whether --with-libexec-leaf-dir was given. +if test "${with_libexec_leaf_dir+set}" = set; then : + withval=$with_libexec_leaf_dir; libexec_subdir=$withval +else + libexec_subdir=$PACKAGE_TARNAME +fi + + + +# Check whether --with-xen-dumpdir was given. +if test "${with_xen_dumpdir+set}" = set; then : + withval=$with_xen_dumpdir; xen_dumpdir_path=$withval +else + xen_dumpdir_path=$localstatedir/lib/xen/dump +fi + + + +# Check whether --with-rundir was given. +if test "${with_rundir+set}" = set; then : + withval=$with_rundir; rundir_path=$withval +else + rundir_path=$localstatedir/run +fi + + + +# Check whether --with-debugdir was given. +if test "${with_debugdir+set}" = set; then : + withval=$with_debugdir; debugdir_path=$withval +else + debugdir_path=$prefix/lib/debug +fi + + +if test "$libexecdir" = '${exec_prefix}/libexec' ; then + case "$host_os" in + *netbsd*) ;; + *) + libexecdir='${exec_prefix}/lib' + ;; + esac +fi +LIBEXEC=`eval echo $libexecdir/$libexec_subdir` + + +LIBEXEC_BIN=${LIBEXEC}/bin + +LIBEXEC_LIB=${LIBEXEC}/lib + +LIBEXEC_INC=${LIBEXEC}/include + +XENFIRMWAREDIR=${LIBEXEC}/boot + + +XEN_RUN_DIR=$rundir_path/xen + + +XEN_LOG_DIR=$localstatedir/log/xen + + +XEN_LIB_STORED=$localstatedir/lib/xenstored + + +XEN_RUN_STORED=$rundir_path/xenstored + + +XEN_LIB_DIR=$localstatedir/lib/xen + + +SHAREDIR=$prefix/share + + +CONFIG_DIR=$sysconfdir + + +INITD_DIR=$initddir_path + + +XEN_CONFIG_DIR=$CONFIG_DIR/xen + + +XEN_SCRIPT_DIR=$XEN_CONFIG_DIR/scripts + + +case "$host_os" in +*freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;; +*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;; +*) XEN_LOCK_DIR=$localstatedir/lock ;; +esac + + +XEN_PAGING_DIR=$localstatedir/lib/xen/xenpaging + + +XEN_DUMP_DIR=$xen_dumpdir_path + + +DEBUG_DIR=$debugdir_path + + + + + + # Extract the first word of "fig2dev", so it can be a program name with args. +set dummy fig2dev; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_FIG2DEV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $FIG2DEV in + [\\/]* | ?:[\\/]*) + ac_cv_path_FIG2DEV="$FIG2DEV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_FIG2DEV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +FIG2DEV=$ac_cv_path_FIG2DEV +if test -n "$FIG2DEV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIG2DEV" >&5 +$as_echo "$FIG2DEV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if ! test -x "$ac_cv_path_FIG2DEV"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fig2dev is not available so some documentation won't be built" >&5 +$as_echo "$as_me: WARNING: fig2dev is not available so some documentation won't be built" >&2;} + +fi + + + + # Extract the first word of "pod2man", so it can be a program name with args. +set dummy pod2man; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POD2MAN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POD2MAN in + [\\/]* | ?:[\\/]*) + ac_cv_path_POD2MAN="$POD2MAN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POD2MAN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POD2MAN=$ac_cv_path_POD2MAN +if test -n "$POD2MAN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2MAN" >&5 +$as_echo "$POD2MAN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if ! test -x "$ac_cv_path_POD2MAN"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pod2man is not available so some documentation won't be built" >&5 +$as_echo "$as_me: WARNING: pod2man is not available so some documentation won't be built" >&2;} + +fi + + + + # Extract the first word of "pod2html", so it can be a program name with args. +set dummy pod2html; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POD2HTML+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POD2HTML in + [\\/]* | ?:[\\/]*) + ac_cv_path_POD2HTML="$POD2HTML" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POD2HTML="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POD2HTML=$ac_cv_path_POD2HTML +if test -n "$POD2HTML"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2HTML" >&5 +$as_echo "$POD2HTML" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if ! test -x "$ac_cv_path_POD2HTML"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pod2html is not available so some documentation won't be built" >&5 +$as_echo "$as_me: WARNING: pod2html is not available so some documentation won't be built" >&2;} + +fi + + + + # Extract the first word of "pod2text", so it can be a program name with args. +set dummy pod2text; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_POD2TEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $POD2TEXT in + [\\/]* | ?:[\\/]*) + ac_cv_path_POD2TEXT="$POD2TEXT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_POD2TEXT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POD2TEXT=$ac_cv_path_POD2TEXT +if test -n "$POD2TEXT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POD2TEXT" >&5 +$as_echo "$POD2TEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if ! test -x "$ac_cv_path_POD2TEXT"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pod2text is not available so some documentation won't be built" >&5 +$as_echo "$as_me: WARNING: pod2text is not available so some documentation won't be built" >&2;} + +fi + + + + # Extract the first word of "pandoc", so it can be a program name with args. +set dummy pandoc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PANDOC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PANDOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_PANDOC="$PANDOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PANDOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PANDOC=$ac_cv_path_PANDOC +if test -n "$PANDOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PANDOC" >&5 +$as_echo "$PANDOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if ! test -x "$ac_cv_path_PANDOC"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pandoc is not available so some documentation won't be built" >&5 +$as_echo "$as_me: WARNING: pandoc is not available so some documentation won't be built" >&2;} + +fi + + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x"${PERL}" = x"no" +then + as_fn_error $? "Unable to find perl, please install perl" "$LINENO" 5 +fi + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Xen Hypervisor Documentation $as_me 4.14, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to . +Xen Hypervisor Documentation home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Xen Hypervisor Documentation config.status 4.14 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "../config/Docs.mk") CONFIG_FILES="$CONFIG_FILES ../config/Docs.mk" ;; + "man/xl.cfg.5.pod") CONFIG_FILES="$CONFIG_FILES man/xl.cfg.5.pod" ;; + "man/xl.1.pod") CONFIG_FILES="$CONFIG_FILES man/xl.1.pod" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/docs/configure.ac b/docs/configure.ac new file mode 100644 index 0000000000..cb5a6eaa4c --- /dev/null +++ b/docs/configure.ac @@ -0,0 +1,32 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.67]) +AC_INIT([Xen Hypervisor Documentation], m4_esyscmd([../version.sh ../xen/Makefile]), + [xen-devel@lists.xen.org], [xen], [https://www.xen.org/]) +AC_CONFIG_SRCDIR([misc/xen-command-line.pandoc]) +AC_CONFIG_FILES([ +../config/Docs.mk +man/xl.cfg.5.pod +man/xl.1.pod +]) +AC_CONFIG_AUX_DIR([../]) + +# M4 Macro includes +m4_include([../m4/docs_tool.m4]) +m4_include([../m4/path_or_fail.m4]) +m4_include([../m4/features.m4]) +m4_include([../m4/paths.m4]) + +AX_XEN_EXPAND_CONFIG() + +AX_DOCS_TOOL_PROG([FIG2DEV], [fig2dev]) +AX_DOCS_TOOL_PROG([POD2MAN], [pod2man]) +AX_DOCS_TOOL_PROG([POD2HTML], [pod2html]) +AX_DOCS_TOOL_PROG([POD2TEXT], [pod2text]) +AX_DOCS_TOOL_PROG([PANDOC], [pandoc]) + +AC_ARG_VAR([PERL], [Path to Perl parser]) +AX_PATH_PROG_OR_FAIL([PERL], [perl]) + +AC_OUTPUT() diff --git a/docs/designs/argo.pandoc b/docs/designs/argo.pandoc new file mode 100644 index 0000000000..2ce253b654 --- /dev/null +++ b/docs/designs/argo.pandoc @@ -0,0 +1,448 @@ +# Argo + +## Introduction + +Argo is an interdomain communication mechanism. It provides Xen hypervisor +primitives to transmit data between VMs, by performing data copies into +receive memory rings registered by domains. It does not require memory +sharing between VMs and does not use the grant tables or Xenstore. + +Argo has requirements for performance isolation between domains, to prevent +negative performance impact from malicious or disruptive activity of other +domains, or even other VCPUs of the same domain operating other rings. + +## Hypervisor-Mediated data eXchange (HMX) + +This term references inter-VM communication protocols that have this +key architectural point: The hypervisor is responsible for performing the +write of data into the guest-accessible memory buffer, in the manner +according to the agreed transfer protocol. This structure ensures that +there is strength to the transport mechanism, because the transmitting side +of the communication is the hypervisor, which can be trusted by the receiver, +and the buffer is isolated from access by any other potential sources +outside the receiver. + +The receiver can trust that the hypervisor will: + +- Provide a protocol implementation adhering to hardware synchronization +requirements for concurrent access to system memory by communicating +components +- Deliver data only from an approved source, enforcing policy for Mandatory +Access Control. +- Indicate the correct sender of the data. +- Transmit only the intended data, adhering to the access protocol of the data +structure in the buffer. If the memory region is being used as a ring, then: + - Data writes will only occur within the ring region that is indicated as + available for incoming data by the ring indexes. + - The indicated length of data written will exactly match the length of + data actually written. + - The write for each piece of data will occur only once. + - Data will be written sequentially in the order that it is sent. +- Issue notification of data delivered correctly. + +This structure allows for augmentation by the hypervisor to identify the +sending entity within the source VM, and then provide the receiver with +assured context information about the data source. This enables the receiver +to make decisions based on fine-grained knowledge of the source of the data. + +This structure is also of strong interest for nested virtualization: +transport via the hypervisor can enable construction of efficient +communications between VMs at different levels of nesting. + +# Locking + +Since Argo operates a data path between domains, sections of this code are +*hot* when the communication paths are in use. To encourage high performance, a +goal is to limit mutual exclusion to only where required and enable significant +concurrency. + +Avoidance of deadlock is essential and since state must frequently be updated +that pertains to more than one domain, a locking protocol defines which locks +are needed and the order of their acquistion. + +## Structure + +The granular locking structure of Argo enables: + +1. Performance isolation of guests +2. Avoidance of DoS of rings by domains that are not authorized to send to them +3. Deadlock-free teardown of state across multiple domains on domain destroy +4. Performance of guests using Argo with concurrent operation of rings. + +Argo uses three per-domain locks to protect three separate data structures. +Access to the ring_hash data structure is confined to domains that a +ring-registering domain has authorized to send data via the ring. The complete +set of Argo locks is: + +* Global : `L1_global_argo_rwlock` +* Per-domain: `rings_L2_rwlock` +* Per-domain: `send_L2_lock` +* Per-domain: `wildcard_L2_lock` +* Per-ring: `L3_lock` + +## Protected State + +The data structures being protected by the locks are all per-domain. The only +global Argo state is the `L1_global_argo_rwlock` used to coordinate access to +data structures of other domains. + +### State: Rings registered and owned by a domain + +This includes the state to run that ring, such as memory frame numbers and +established mappings. Per-ring state is protected by its own lock, so that +multiple VCPUs of the same domain operating different rings do not inhibit the +performance of each other. + +The per-domain ring state also includes the list of pending notifications for +other domains that are waiting for ring space availability. + +### State: Partner rings for which this domain is the single allowed sender + +This state belonging to the permitted sender is written to when a ring is +registered by another domain. The lock that protects this state is subject to +locking at arbitrary frequency by those foreign domains when registering rings +-- which do not need any permission granted by this domain in order to register +a ring to communicate with it -- so it must not inhibit the domain's own +ability to use its own rings, to protect them from DoS. For this reason, this +state is protected by its own lock. + +### State: Pending notifications for wildcard rings registered by other domains + +This data structure is needed when a domain is destroyed, to cancel the +outstanding space availability notifications about the wildcard rings of other +domains that this domain has queried. + +Data is entered into this data structure by the domain that owns it, either by +a space-inhibited sendv or a notify operation. + +Data is removed from this data structure in one of three cases: when space +becomes available in the destination ring and the notification is sent, when +the ring is torn down, or when the awaiting domain is destroyed. + +In the case where a notification is sent, access to the data structure is +triggered by the ring owner domain, rather than the domain waiting for +notification. This data structure is protected by its own lock since doing so +entails less contention than the alternative of reusing an existing lock owned +by the domain. + +## Hierarchical Locking Model and Protocol + +The locking discipline within the Argo code is heirarchical and utilizes +reader/writer locks to enable increased concurrency when operations do not +conflict. None of the Argo locks are reentrant. + +The hierarchy: + +* There is a global rwlock (`L1`) to protect access to all of the per-domain +argo data structures. +* There is a rwlock per-domain (`rings_L2`) to protect the hashtable of the +per-ring data structures. +* There is a lock per ring (`L3`) to protect the per-ring data structure, +`struct argo_ring_info`. + +There are a two other per-domain L2 locks; their operation is similar and they +are described later. + +The protocol to safely acquire write access to the per-ring data structure, +`struct argo_ring_info`, is: + +1) Acquire a Read lock on L1. +2) Acquire a Read lock on L2. +3) Acquire L3. + +An alternative valid sequence is: + +1) Acquire a Read lock on L1. +2) Acquire a Write lock on L2. + +This second sequence grants write access to _all_ of the `argo_ring_info` +structs belonging to the domain, but at the expense of less concurrency: no +other operation can access those structs while the locks are held, which will +inhibit operations on those rings until the locks are released. + +Another alternative valid sequence is: + +1) Acquire a Write lock on L1. + +This grants write access to _all_ of the `argo_ring_info` structs belonging to +_all domains_, but again at the expense of far less concurrency: no other +operation can operate on Argo rings until the locks are released. + +## Lock Definitions + +The full set of locks that are directly operated upon by the Argo code are +described in the following section. + +### The global singleton lock: + +* `L1_global_argo_rwlock` + +The rationale for having a global lock is to be able to enforce system-wide +exclusion for a critical region and simplify the logic required to avoid +deadlock, for teardown of state across multiple domains when a domain is +destroyed. + +The majority of operations take a read-lock on this lock, allowing concurrent +Argo operations by many domains. + +The pointer d->argo on every domain is protected by this lock. A set of more +granular per-domain locks could be used to do that, but since domain start and +stop is expected to be a far less frequent operation than the other argo +operations, acquiring a single read lock to enable access to all the argo +structs of all domains simplifies the protocol. + +Points of write-locking on this lock: + +* `argo_destroy`, where: + * All of the domain's own rings are destroyed. + * All of the notifications pending for other domains are cancelled. + * All of the unicast partner rings owned by other domains for this domain to +send to, are destroyed. + * All of the notifications pending on those rings are cancelled. + * All of the notifications pending for this domain on wildcard rings owned +by other domains are cancelled. +* `argo_soft_reset`, for similar teardown operations as argo_destroy. +* `argo_init`, where the `d->argo` pointer is first populated. + * Since the write lock is taken here, there is serialization all concurrent +Argo operations around this single pointer write; this is the cost of using the +simpler one global lock approach. + +Enforcing that the write_lock is acquired on `L1_global_argo_rwlock` before +executing teardown, ensures that no teardown operations act concurrently and no +other Argo operations happen concurrently with a teardown. The teardown logic +is free to safely modify the Argo state across all domains without having to +acquire per-domain locks and deadlock cannot occur. + +### Per-Domain: Ring hash lock + +`rings_L2_rwlock` + +Protects: the per-domain ring hash table of `argo_ring_info` structs. + +Holding a read lock on `rings_L2` protects the ring hash table and the elements +in the hash table `d->argo->ring_hash`, and the `node` and `id` fields in +struct `argo_ring_info` in the hash table. + +Holding a write lock on `rings_L2` protects all of the elements of all the +struct `argo_ring_info` belonging to this domain. + +To take `rings_L2` you must already have `R(L1)`. `W(L1)` implies `W(rings_L2)` +and `L3`. + +Prerequisites: + +* `R(L1_global_argo_rwlock)` must be acquired before taking either read or +write on `rings_L2_rwlock`. +* `W(L1_global_argo_rwlock)` implies `W(rings_L2_rwlock)`, so if +`W(L1_global_argo_rwlock)` is held, then `rings_L2_rwlock` does not need to be +acquired, and all the data structures that `rings_L2_rwlock` protects can be +accessed as if `W(ring_L2_rwlock)` was held. + +Is accessed by the hypervisor on behalf of: + +* The domain that registered the ring. +* Any domain that is allowed to send to the ring -- so that's the partner +domain, for unicast rings, or any domain, for wildcard rings. + +### Send hash lock + +`send_L2_lock` + +Protects: the per-domain send hash table of `argo_send_info` structs. + +Is accessed by the hypervisor on behalf of: + +* Any domain that registers a ring that specifies the domain as the unicast +sender. +* The domain that has been allowed to send, as part of teardown when the domain +is being destroyed. + + +### Wildcard pending list lock + +`wildcard_L2_lock` + +Protects: the per-domain list of pending notifications to the domain from +wildcard rings owned by other domains. + +Is accessed by the hypervisor on behalf of: + +* The domain that issued a query to another about space availability in one of +its wildcard rings - this can be done by attempting a send operation when there +is insufficient ring space available at the time. +* Any domain that the domain has issued a query to about space availability in +one of their wildcard rings. + +### Per-Ring locks: + +* `L3_lock` + +This lock protects the members of a `struct ring_info` which is the primary +state for a domain's own registered ring. + + +## Reasoning Model + +A common model for reasoning about concurrent code focusses on accesses to +individual variables: if code touches this variable, see that it first acquires +the corresponding lock and then drops it afterwards. A challenge with this +model is in ensuring that the sequence of locks acquired within nested +functions, when operating on data from multiple domains with concurrent +operations, is safe from deadlock. + +An alternative method that is better suited to the Argo software is to consider +the execution path, the full sequence of locks acquired, accesses performed, +and locks released, from entering an operation, to the completion of the work. + +An example code path for an operation: + +`[entry] > -- [ take R(L1) ] -- [ take R(L2) ] -- loop [ take a L3 / drop L3 ] +-- [ drop R(L2) ] -- [ drop R(L1)] -- > [exit]` + +If a function implements a section of the path, it is important to know not +only what variables the function itself operates upon, but also the locking +state that will already have been established at the point when the function is +invoked, since this will affect what data the function can access. For this +reason, comments in the code, or ASSERTs that explicitly check lock state, +communicate what the locking state is expected and intended to be when that +code is invoked. See the macros defined to support this for Argo later in this +document. + + +## Macros to Validate and Document Lock State + +These macros encode the logic to verify that the locking has adhered to the +locking discipline. + +eg. On entry to logic that requires holding at least `R(rings_L2)`, this: + +`ASSERT(LOCKING_Read_rings_L2(d));` + +checks that the lock state is sufficient, validating that one of the following +must be true when executed: + +`R(rings_L2) && R(L1)` +or: `W(rings_L2) && R(L1)` +or: `W(L1)` + +The macros are defined thus: + +``` +#define LOCKING_Write_L1 (rw_is_write_locked(&L1_global_argo_rwlock)) +/* + * While LOCKING_Read_L1 will return true even if the lock is write-locked, + * that's OK because everywhere that a Read lock is needed with these macros, + * holding a Write lock there instead is OK too: we're checking that _at least_ + * the specified level of locks are held. + */ +#define LOCKING_Read_L1 (rw_is_locked(&L1_global_argo_rwlock)) + +#define LOCKING_Write_rings_L2(d) \ + ((LOCKING_Read_L1 && rw_is_write_locked(&(d)->argo->rings_L2_rwlock)) || \ + LOCKING_Write_L1) +/* + * Skip checking LOCKING_Write_rings_L2(d) within this LOCKING_Read_rings_L2 + * definition because the first clause that is testing R(L1) && R(L2) will also + * return true if R(L1) && W(L2) is true, because of the way that rw_is_locked + * behaves. This results in a slightly shorter and faster implementation. + */ +#define LOCKING_Read_rings_L2(d) \ + ((LOCKING_Read_L1 && rw_is_locked(&(d)->argo->rings_L2_rwlock)) || \ + LOCKING_Write_L1) +/* + * Skip checking LOCKING_Write_L1 within this LOCKING_L3 definition because + * LOCKING_Write_rings_L2(d) will return true for that condition. + */ +#define LOCKING_L3(d, r) \ + ((LOCKING_Read_L1 && rw_is_locked(&(d)->argo->rings_L2_rwlock) \ + && spin_is_locked(&(r)->L3_lock)) || LOCKING_Write_rings_L2(d)) + +#define LOCKING_send_L2(d) \ + ((LOCKING_Read_L1 && spin_is_locked(&(d)->argo->send_L2_lock)) || \ + LOCKING_Write_L1) +``` + +Here is an example of a macro in use: + +``` +static void +notify_ring(const struct domain *d, struct argo_ring_info *ring_info, + struct hlist_head *to_notify) +{ + uint32_t space; + + ASSERT(LOCKING_Read_rings_L2(d)); + + spin_lock(&ring_info->L3_lock); + + if ( ring_info->len ) + space = ringbuf_payload_space(d, ring_info); + else + space = 0; + + spin_unlock(&ring_info->L3_lock); + + if ( space ) + pending_find(d, ring_info, space, to_notify); +} + +``` + +In the above example, it can be seen that it is safe to acquire the `L3` lock +because _at least_ `R(rings_L2)` is already held, as documented and verified by +the macro. + +## FAQ / Other Considerations + +### Why not have a single per-domain lock? + +Due to performance isolation / DoS avoidance: if there is a single per-domain +lock, acquiring this lock will stall operations on other active rings owned by +the domain. A malicious domain can loop registering and unregistering rings, +without any consent by the targetted domain, which would experience decreased +throughput due to the contention on the single per-domain lock. The granular +locking structure of Argo prevents this. It also allows concurrent operation of +different rings by multiple VCPUs of the same domain without contention, to +avoid negative application performance interaction. + +## Rationale for Using a Singleton Global Lock: L1 + +### Teardown on domain destroy + +The single global lock enables exclusive access to the argo data structures +across domains when a domain is destroyed. Every unicast ring that the dying +domain is the authorized sender is torn down and any pending space-available +notifications in other domain's wildcard rings are cancelled. This requires +gaining safe access to the data structures on each of the domains involved. + +The 'send hashtable' data structure is needed in order to perform the teardown +of rings when a domain is destroyed. To populate it, whenever a unicast ring is +registered, the lock that protects that data structure must be taken +exclusively. + +There are granular per-domain locks which protect the per-domain data +structures. The global singleton L1 lock operates with-and-above the per-domain +locks and is used to obtain exclusive access to multiple domain's argo data +structures in the infrequent case where it is used -- for domain destroy -- +whilst otherwise allowing concurrent access, via acquiring it with 'read' +access, for the majority of the time. + +To perform the required state teardown on domain destruction, which can require +removing state from the data structures of multiple domains, a locking protocol +to obtain mutual exclusion and safe access to the state is required, without +deadlocking. + +Using the single global lock avoids the need for sequencing the acquisition of +multiple individual per-domain locks (and lower level data structure locks) to +prevent deadlock: taking W(L1) grants access to all and taking R(L1) ensures +that teardown of any domain will not interfere with any Argo hypercall +operation. It enables introducing granular locking without complex or +error-prone lock acquisition logic. + +# Future Work + +- Performance measurement and optimization +- Provide assurance of connection source context to destination +- Policy controls for reducing the duration of hypervisor mappings of +transmission rings, to improve resistance to data read attacks on +hypervisor memory diff --git a/docs/designs/dmop.pandoc b/docs/designs/dmop.pandoc new file mode 100644 index 0000000000..8e9f95af47 --- /dev/null +++ b/docs/designs/dmop.pandoc @@ -0,0 +1,175 @@ +DMOP +==== + +Introduction +------------ + +The aim of DMOP is to prevent a compromised device model from compromising +domains other than the one it is providing emulation for (which is therefore +likely already compromised). + +The problem occurs when you a device model issues an hypercall that +includes references to user memory other than the operation structure +itself, such as with Track dirty VRAM (as used in VGA emulation). +Is this case, the address of this other user memory needs to be vetted, +to ensure it is not within restricted address ranges, such as kernel +memory. The real problem comes down to how you would vet this address - +the idea place to do this is within the privcmd driver, without privcmd +having to have specific knowledge of the hypercall's semantics. + +The Design +---------- + +The privcmd driver implements a new restriction ioctl, which takes a domid +parameter. After that restriction ioctl is issued, all unaudited operations +on the privcmd driver will cease to function, including regular hypercalls. +DMOP hypercalls will continue to function as they can be audited. + +A DMOP hypercall consists of a domid (which is audited to verify that it +matches any restriction in place) and an array of buffers and lengths, +with the first one containing the specific DMOP parameters. These can +then reference further buffers from within in the array. Since the only +user buffers passed are that found with that array, they can all can be +audited by privcmd. + +The following code illustrates this idea: + +struct xen_dm_op { + uint32_t op; +}; + +struct xen_dm_op_buf { + XEN_GUEST_HANDLE(void) h; + unsigned long size; +}; +typedef struct xen_dm_op_buf xen_dm_op_buf_t; + +enum neg_errnoval +HYPERVISOR_dm_op(domid_t domid, + xen_dm_op_buf_t bufs[], + unsigned int nr_bufs) + +@domid is the domain the hypercall operates on. +@bufs points to an array of buffers where @bufs[0] contains a struct +dm_op, describing the specific device model operation and its parameters. +@bufs[1..] may be referenced in the parameters for the purposes of +passing extra information to or from the domain. +@nr_bufs is the number of buffers in the @bufs array. + +It is forbidden for the above struct (xen_dm_op) to contain any guest +handles. If they are needed, they should instead be in +HYPERVISOR_dm_op->bufs. + +Validation by privcmd driver +---------------------------- + +If the privcmd driver has been restricted to specific domain (using a + new ioctl), when it received an op, it will: + +1. Check hypercall is DMOP. + +2. Check domid == restricted domid. + +3. For each @nr_bufs in @bufs: Check @h and @size give a buffer + wholly in the user space part of the virtual address space. (e.g. + Linux will use access_ok()). + + +Xen Implementation +------------------ + +Since a DMOP buffers need to be copied from or to the guest, functions for +doing this would be written as below. Note that care is taken to prevent +damage from buffer under- or over-run situations. If the DMOP is called +with incorrectly sized buffers, zeros will be read, while extra is ignored. + +static bool copy_buf_from_guest(xen_dm_op_buf_t bufs[], + unsigned int nr_bufs, void *dst, + unsigned int idx, size_t dst_size) +{ + size_t size; + + if ( idx >= nr_bufs ) + return false; + + memset(dst, 0, dst_size); + + size = min_t(size_t, dst_size, bufs[idx].size); + + return !copy_from_guest(dst, bufs[idx].h, size); +} + +static bool copy_buf_to_guest(xen_dm_op_buf_t bufs[], + unsigned int nr_bufs, unsigned int idx, + void *src, size_t src_size) +{ + size_t size; + + if ( idx >= nr_bufs ) + return false; + + size = min_t(size_t, bufs[idx].size, src_size); + + return !copy_to_guest(bufs[idx].h, src, size); +} + +This leaves do_dm_op easy to implement as below: + +static int dm_op(domid_t domid, + unsigned int nr_bufs, + xen_dm_op_buf_t bufs[]) +{ + struct domain *d; + struct xen_dm_op op; + bool const_op = true; + long rc; + + rc = rcu_lock_remote_domain_by_id(domid, &d); + if ( rc ) + return rc; + + if ( !is_hvm_domain(d) ) + goto out; + + rc = xsm_dm_op(XSM_DM_PRIV, d); + if ( rc ) + goto out; + + if ( !copy_buf_from_guest(bufs, nr_bufs, &op, 0, sizeof(op)) ) + { + rc = -EFAULT; + goto out; + } + + switch ( op.op ) + { + default: + rc = -EOPNOTSUPP; + break; + } + + if ( !rc && + !const_op && + !copy_buf_to_guest(bufs, nr_bufs, 0, &op, sizeof(op)) ) + rc = -EFAULT; + + out: + rcu_unlock_domain(d); + + return rc; +} + +long do_dm_op(domid_t domid, + unsigned int nr_bufs, + XEN_GUEST_HANDLE_PARAM(xen_dm_op_buf_t) bufs) +{ + struct xen_dm_op_buf nat[MAX_NR_BUFS]; + + if ( nr_bufs > MAX_NR_BUFS ) + return -EINVAL; + + if ( copy_from_guest_offset(nat, bufs, 0, nr_bufs) ) + return -EFAULT; + + return dm_op(domid, nr_bufs, nat); +} diff --git a/docs/designs/non-cooperative-migration.md b/docs/designs/non-cooperative-migration.md new file mode 100644 index 0000000000..4b876d809f --- /dev/null +++ b/docs/designs/non-cooperative-migration.md @@ -0,0 +1,280 @@ +# Non-Cooperative Migration of Guests on Xen + +## Background + +The normal model of migration in Xen is driven by the guest because it was +originally implemented for PV guests, where the guest must be aware it is +running under Xen and is hence expected to co-operate. This model dates from +an era when it was assumed that the host administrator had control of at +least the privileged software running in the guest (i.e. the guest kernel) +which may still be true in an enterprise deployment but is not generally +true in a cloud environment. The aim of this design is to provide a model +which is purely host driven, requiring no co-operation from the software +running in the guest, and is thus suitable for cloud scenarios. + +PV guests are out of scope for this project because, as is outlined above, +they have a symbiotic relationship with the hypervisor and therefore a +certain level of co-operation is required. + +x86 HVM guests can already be migrated on Xen without guest co-operation +but only if they don’t have PV drivers installed[1] or are not in ACPI +power state S0. The reason for not expecting co-operation if the guest is +any sort of suspended state is obvious, but the reason co-operation is +expected if PV drivers are installed is due to the nature of PV protocols. + +## Xenstore Nodes and Domain ID + +The PV driver model consists of a *frontend* and a *backend*. The frontend +runs inside the guest domain and the backend runs inside a *service domain* +which may or may not be domain 0. The frontend and backend typically pass +data via memory pages which are shared between the two domains, but this +channel of communication is generally established using xenstore (the store +protocol itself being an exception to this for obvious chicken-and-egg +reasons). + +Typical protocol establishment is based on use of two separate xenstore +*areas*. If we consider PV drivers for the *netif* protocol (i.e. class vif) +and assume the guest has domid X, the service domain has domid Y, and the +vif has index Z then the frontend area will reside under the parent node: + +`/local/domain/Y/device/vif/Z` + +All backends, by convention, typically reside under parent node: + +`/local/domain/X/backend` + +and the normal backend area for vif Z would be: + +`/local/domain/X/backend/vif/Y/Z` + +but this should not be assumed. + +The toolstack will place two nodes in the frontend area to explicitly locate +the backend: + + * `backend`: the fully qualified xenstore path of the backend area + * `backend-id`: the domid of the service domain + +and similarly two nodes in the backend area to locate the frontend area: + + * `frontend`: the fully qualified xenstore path of the frontend area + * `frontend-id`: the domid of the guest domain + + +The guest domain only has write permission to the frontend area and +similarly the service domain only has write permission to the backend area, +but both ends have read permission to both areas. + +Under both frontend and backend areas is a node called *state*. This is key +to protocol establishment. Upon PV device creation the toolstack will set +the value of both state nodes to 1 (XenbusStateInitialising[2]). This +should cause enumeration of appropriate devices in both the guest and +service domains. The backend device, once it has written any necessary +protocol specific information into the xenstore backend area (to be read +by the frontend driver) will update the backend state node to 2 +(XenbusStateInitWait). From this point on PV protocols differ slightly; the +following illustration is true of the netif protocol. + +Upon seeing a backend state value of 2, the frontend driver will then read +the protocol specific information, write details of grant references (for +shared pages) and event channel ports (for signalling) that it has created, +and set the state node in the frontend area to 4 (XenbusStateConnected). +Upon see this frontend state, the backend driver will then read the grant +references (mapping the shared pages) and event channel ports (opening its +end of them) and set the state node in the backend area to 4. Protocol +establishment is now complete and the frontend and backend start to pass +data. + +Because the domid of both ends of a PV protocol forms a key part of +negotiating the data plane for that protocol (because it is encoded into +both xenstore nodes and node paths), and because guest’s own domid and the +domid of the service domain are visible to the guest in xenstore (and hence +ay cached internally), and neither are necessarily preserved during +migration, it is hence necessary to have the co-operation of the frontend +in re-negotiating the protocol using the new domid after migration. + +Moreover the backend-id value will be used by the frontend driver in +setting up grant table entries and event channels to communicate with the +service domain, so the co-operation of the guest is required to +re-establish these in the new host environment after migration. + +Thus if we are to change the model and support migration of a guest with PV +drivers, without the co-operation of the frontend driver code, the paths and +values in both the frontend and backend xenstore areas must remain unchanged +and valid in the new host environment, and the grant table entries and event +channels must be preserved (and remain operational once guest execution is +resumed). + +Because the service domain’s domid is used directly by the guest in setting +up grant entries and event channels, the backend drivers in the new host +environment must be provided by service domain with the same domid. Also, +because the guest can sample its own domid from the frontend area and use +it in hypercalls (e.g. HVMOP_set_param) rather than DOMID_SELF, the guest +domid must also be preserved to maintain the ABI. + +Furthermore, it will necessary to modify backend drivers to re-establish +communication with frontend drivers without perturbing the content of the +backend area or requiring any changes to the values of the xenstore state +nodes. + +## Other Para-Virtual State + +### Shared Rings + +Because the console and store protocol shared pages are actually part of +the guest memory image (in an E820 reserved region just below 4G in x86 +VMs) then the content will get migrated as part of the guest memory image. +Hence no additional code is require to prevent any guest visible change in +the content. + +### Shared Info + +There is already a record defined in *libxenctrl Domain Image Format* [3] +called `SHARED_INFO` which simply contains a complete copy of the domain’s +shared info page. It is not currently incuded in an HVM (type `0x0002`) +migration stream. It may be feasible to include it as an optional record +but it is not clear that the content of the shared info page ever needs +to be preserved for an HVM guest. + +For a PV guest the `arch_shared_info` sub-structure contains important +information about the guest’s P2M, but this information is not relevant for +an HVM guest where the P2M is not directly manipulated via the guest. The +other state contained in the `shared_info` structure relates the domain +wall-clock (the state of which should already be transferred by the `RTC` +HVM context information which contained in the `HVM_CONTEXT` save record) +and some event channel state (particularly if using the *2l* protocol). +Event channel state will need to be fully transferred if we are not going +to require the guest co-operation to re-open the channels and so it should +be possible to re-build a shared info page for an HVM guest from such other +state. + +Note that the shared info page also contains an array of +`XEN_LEGACY_MAX_VCPUS` (32 for x86) `vcpu_info` structures. A domain may +nominate a different guest physical address to use for the vcpu info. This +is mandatory if a domain wants to use more than XEN_LEGACY_MAX_VCPUS vCPUs +and optional otherwise. This mapping is not currently transferred in the +migration state so this will either need to be added into an existing save +record, or an additional type of save record will be needed. + +### Xenstore Watches + +As mentioned above, no domain Xenstore state is currently transferred in +the migration stream. There is a record defined in *libxenlight Domain +Image Format* [4] called `EMULATOR_XENSTORE_DATA` for transferring Xenstore +nodes relating to emulators but no record type is defined for nodes +relating to the domain itself, nor for registered *watches*. A XenStore +watch is a mechanism used by PV frontend and backend drivers to request a +notification if the value of a particular node (e.g. the other end’s state +node) changes, so it is important that watches continue to function after a +migration. One or more new save records will therefore be required to +transfer Xenstore state. It will also be necessary to extend the *store* +protocol[5] with mechanisms to allow the toolstack to acquire the list of +watches that the guest has registered and for the toolstack to register a +watch on behalf of a domain. + +### Event channels + +Event channels are essentially the para-virtual equivalent of interrupts. +They are an important part of post PV protocols. Normally a frontend driver +creates an *inter-domain* event channel between its own domain and the +domain running the backend, which it discovers using the `backend-id` node +in Xenstore (see above), by making a `EVTCHNOP_alloc_unbound` hypercall. +This hypercall allocates an event channel object in the hypervisor and +assigns a *local port* number which is then written into the frontend area +in Xenstore. The backend driver then reads this port number and *binds* to +the event channel by specifying it, and the value of `frontend-id`, as +*remote domain* and *remote port* (respectively) to a +`EVTCHNOP_bind_interdomain` hypercall. Once connection is established in +this fashion frontend and backend drivers can use the event channel as a +*mailbox* to notify each other when a shared ring has been updated with new +requests or response structures. + +Currently no event channel state is preserved on migration, requiring +frontend and backend drivers to create and bind a complete new set of event +channels in order to re-establish a protocol connection. Hence, one or more +new save records will be required to transfer event channel state in order +to avoid the need for explicit action by frontend drivers running in the +guest. Note that the local port numbers need to preserved in this state as +they are the only context the guest has to refer to the hypervisor event +channel objects. + +Note also that the PV *store* (Xenstore access) and *console* protocols +also rely on event channels which are set up by the toolstack. Normally, +early in migration, the toolstack running on the remote host would set up a +new pair of event channels for these protocols in the destination domain. +These may not be assigned the same local port numbers as the protocols +running in the source domain. For non-cooperative migration these channels +must either be created with fixed port numbers, or their creation must be +avoided and instead be included in the general event channel state +record(s). + +### Grant table + +The grant table is essentially the para-virtual equivalent of an IOMMU. For +example, the shared rings of a PV protocol are *granted* by a frontend +driver to the backend driver by allocating *grant entries* in the guest’s +table, filling in details of the memory pages and then writing the *grant +references* (the index values of the grant entries) into Xenstore. The +grant references of the protocol buffers themselves are typically written +directly into the request structures passed via a shared ring. + +The guest is responsible for managing its own grant table. No hypercall is +required to grant a memory page to another domain. It is sufficient to find +an unused grant entry and set bits in the entry to give read and/or write +access to a remote domain also specified in the entry along with the page +frame number. Thus the layout and content of the grant table logically +forms part of the guest state. + +Currently no grant table state is migrated, requiring a guest to separately +maintain any state that it wishes to persist elsewhere in its memory image +and then restore it after migration. Thus to avoid the need for such +explicit action by the guest, one or more new save records will be required +to migrate the contents of the grant table. + +# Outline Proposal + +* PV backend drivers will be modified to unilaterally re-establish +connection to a frontend if the backend state node is restored with value 4 +(XenbusStateConnected)[6]. + +* The toolstack choose a randomized domid for initial creation or default +migration, but preserve the source domid non-cooperative migration. +Non-Cooperative migration will have to be denied if the domid is +unavailable on the target host, but randomization of domid on creation +should hopefully minimize the likelihood of this. Non-Cooperative migration +to localhost will clearly not be possible. + +* `xenstored` should be modified to implement the new mechanisms needed. +See *Other Para-Virtual State* above. A further design document will +propose additional protocol messages. + +* Within the migration stream extra save records will be defined as +required. See *Other Para-Virtual State* above. A further design document +will propose modifications to the libxenlight and libxenctrl Domain Image +Formats. + +* An option should be added to the toolstack to initiate a non-cooperative +migration, instead of the (default) potentially co-operative migration. +Essentially this should skip the check to see if PV drivers and migrate as +if there are none present, but also enabling the extra save records. Note +that at least some of the extra records should only form part of a +non-cooperative migration stream. For example, migrating event channel +state would be counter productive in a normal migration as this will +essentially leak event channel objects at the receiving end. Others, such +as grant table state, could potentially harmlessly form part of a normal +migration stream. + +* * * +[1] PV drivers are deemed to be installed if the HVM parameter +*HVM_PARAM_CALLBACK_IRQ* has been set to a non-zero value. + +[2] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/include/public/io/xenbus.h + +[3] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=docs/specs/libxc-migration-stream.pandoc + +[4] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=docs/specs/libxl-migration-stream.pandoc + +[5] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=docs/misc/xenstore.txt + +[6] `xen-blkback` and `xen-netback` have already been modified in Linux to do +this. diff --git a/docs/designs/qemu-deprivilege.md b/docs/designs/qemu-deprivilege.md new file mode 100644 index 0000000000..81a5f5c05d --- /dev/null +++ b/docs/designs/qemu-deprivilege.md @@ -0,0 +1,322 @@ +# Introduction + +The goal of deprilvileging qemu is this: Even if there is a bug (for +example in qemu) which permits a domain to gain control of the device +model, the compromised device model process is prevented from +violating the system's overall security properties. Ie, a guest +cannot "escape" from the virtualisation by using a qemu bug. + +This document lists the various technical measures which we either +have taken, or plan to take to effect this goal. Some of them are +required to be considered secure (that is, there are known attack +vectors which they close); others are "just in case" (that is, there +are no known attack vectors, but we perform the restrictions to reduce +the possibility of unknown attack vectors). + +# Restrictions done + +The following restrictions are currently implemented. + +## Having qemu switch user + +'''Description''': As mentioned above, having QEMU switch to a +non-root user, one per domain id. Not being the root user limits what +a compromised QEMU process can do to the system, and having one user +per domain id limits what a comprimised QEMU process can do to the +QEMU processes of other VMs. + +'''Implementation''': The toolstack adds the following to the qemu command-line: + + -runas : + +'''How to test''': + + grep /proc//status [UG]id + +'''Testing Status''': Not tested + +## Xen library / file-descriptor restrictions + +'''Description''': Close and restrict Xen-related file descriptors. +Specifically: + * Close all xenstore-related file descriptors + * Make sure that all open instances of `privcmd` and `evtchn` file +descriptors have had `IOCTL_PRIVCMD_RESTRICT` and +`IOCTL_EVTCHN_RESTRICT_DOMID` ioctls called on them, respectively. + +'''Implementation''': Toolstack adds the following to the qemu command-line: + + -xen-domid-restrict + +'''How to test''': + +Use `fishdescriptor` to pull a file descriptor from a running QEMU, +then use `depriv-fd-checker` to check that it has the desired +properties, and that hypercalls which are meant to fail do fail. (In +Debian `fishdescriptor` can be found in the binary package +`chiark-scripts`; the `depriv-fd-checker` is included in the Xen +source tree.) + +'''Testing status''': Tested + +## Chroot + +'''Description''': Qemu runs in its own chroot, such that even if it +could call an 'open' command of some sort, there would be nothing for +it to see. + +'''Implementation''': The toolstack creates a directory in the libxl "run-dir"; e.g. +`/var/run/xen/qemu-root-` + +Then adds the following to the qemu command-line: + + -chroot /var/run/xen/qemu-root- + +'''How to test''': Check `/proc//root` + +'''Tested''': Not tested + +## Namespaces for unused functionality (Linux only) + +'''Description''': QEMU doesn't use the functionality associated with +mount and IPC namespaces. (IPC namespaces contol non-file-based IPC +mechanisms within the kernel; unix and network sockets are not +affected by this.) Making separate namespaces for these for QEMU +won't affect normal operation, but it does mean that even if other +restrictions fail, the process won't be able to even name system mount +points or existing non-file-based IPC descriptors to attempt to attack +them. + +'''Implementation''': + +In theory this could be done in QEMU (similar to -sandbox, -runas, +-chroot, and so on), but a patch doing this in QEMU was NAKed upstream +(see [qemu-namespaces]). They preferred that this was done as a setup step by +whatever executes QEMU; i.e., have the process which exec's QEMU first +call: + + unshare(CLONE_NEWNS | CLONE_NEWIPC) + +'''How to test''': Check `/proc//ns/[ipc,mnt]` + +'''Tested''': Not tested + +[qemu-namespaces]: https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg04723.html + +### Basic RLIMITs + +'''Description''': A number of limits on the resources that a given +process / userid is allowed to consume. These can limit the ability +of a compromised QEMU process to DoS domain 0 by exhausting various +resources available to it. + +'''Implementation''' + +Limits that can be implemented immediately without much effort: + - RLIMIT_FSIZE` (file size) to 256KiB. + +Probably not necessary but why not: + - RLIMIT_CORE: 0 + - RLIMIT_MSGQUEUE: 0 + - RLIMIT_LOCKS: 0 + - RLIMIT_MEMLOCK: 0 + +Note: mlock() is used by QEMU only when both "realtime" and "mlock" +are specified; this does not apply to QEMU running as a Xen DM. + +'''How to test''': Check `/proc//limits` + +'''Tested''': Not tested + +### libxl UID cleanup + +'''Description''': Domain IDs are reused, and thus restricted UIDs are +reused. If a compromised QEMU can fork (due to seccomp or +RLIMIT_NPROC limits being ineffective for some reason), it may avoid +being killed when its domain dies, then wait until the domain ID is +reused again, at which point it will have control over the domain in +question (which probably belongs to someone else). + +libxl should kill all UIDs associated with a domain both when the VM +is destroyed, and before starting a VM with the same UID. + +'''Implementation''': This is unnecessarily tricky. + +The kill() system call can have three kinds of targets: + - A single pid + - A process group + - "Every process except me to which I am allowed to send a signal" (-1) + +Targeting a single pid is racy and likely to be beaten by the +following loop: + + while(1) { + if(fork()) + _exit(0); + } + +That is, by the time you've read the process list and found the +process id you want to kill, that process has exited and there is a +new process whose pid you don't know about. + +Targeting a process group will be ineffective, as unprivileged +processes are allowed to make their own process groups. + +kill(-1) can be used but must be done with care. Consider the +following code, for example: + + setuid(target_uid); + kill(-1, 9); + +This looks like it will do the trick; but by setting all of the user +ids (effective, real, and saved), it opens the 'killing' process up to +being killed by the target process: + + while(1) { + if(fork()) + _exit(0); + else + kill(-1, 9); + } + +Fortunately there is an assymetry we can take advantage of. From the +POSIX spec: + +> For a process to have permission to send a signal to a process +> designated by pid, unless the sending process has appropriate +> privileges, the real or effective user ID of the sending process shall +> match the real or saved set-user-ID of the receiving process. + +The solution is to allocate a second "reaper" uid that is only used to kill +target processes. We set the euid of the killing process to the `target_uid`, +but the ruid of the killing process to `reaper_uid`, leaving the suid of the +killing process as 0: + + setresuid(reaper_uid, target_uid, 0); + kill(-1, 9); + +NOTE: We cannot use `setreuid(reaper_uid, target_uid)` here, as that +will set *both* euid *and* suid to `target_uid`, making the killing +process vulnerable to the target process again. + +Since this will kill all other `reaper_uid` processes as well, we must +either allocate a separate `reaper_uid` per domain, or use locking to +ensure that only one killing process is active at a time. + +# Restrictions / improvements still to do + +This lists potential restrictions still to do. It is meant to be +listed in order of ease of implementation, with low-hanging fruit +first. + +### Further RLIMITs + +RLIMIT_AS limits the total amount of memory; but this includes the +virtual memory which QEMU uses as a mapcache. xen-mapcache.c already +fiddles with this; it would be straightforward to make it *set* the +rlimit to what it thinks a sensible limit is. + +RLIMIT_NPROC limits total number of processes or threads. QEMU uses +threads for some devices, so this would require some thought. + +Other things that would take some cleverness / changes to QEMU to +utilize due to ordering constrants: + - RLIMIT_NOFILES (after all necessary files are opened) + +## libxl: Treat QMP connection as untrusted + +'''Description''': Currently libxl talks with QEMU via QMP; but its +interactions have not historically considered from a security point of +view. For example, qmp_synchronous_send() waits for a response from +QEMU, which a compromised QEMU could simply not send (thus preventing +the toolstack from making forward progress). + +'''Implementation''': Audit toolstack interactions with QEMU which +happen after the guest has started running, and assume QEMU has been +compromised. + +### seccomp filtering (Linux only) + +'''Description''': Turn on seccomp filtering to disable syscalls which +QEMU doesn't need. + +'''Implementation''': Enable from the command-line: + + -sandbox on,obsolete=deny,elevateprivileges=allow,spawn=deny,resourcecontrol=deny + +`elevateprivileges` is currently required to allow `-runas` to work. +Removing this requirement would mean making sure that the uid change +happened before the seccomp2 call, perhaps by changing the uid before +executing QEMU. (But this would then require other changes to create +the QMP socket, VNC socket, and so on). + +It should be noted that `-sandbox` is implemented as a blacklist, not +a whitelist; that is, it disables known-unsed functionality which may +be harmful, rather than disabling all functionality except that known +to be safe and needed. This is unfortunately necessary since qemu +doesn't know what system calls libraries might end up making. (See +[lwn-seccomp] for a more complete discussion.) + +This feature is not on by default and may not be available in all +environments. We therefore need to either: + 1. Require that this feature be enabled to build qemu + 2. Check for `-sandbox` support at runtime before + +[lwn-seccomp]: https://lwn.net/Articles/738694/ + +### Disks + +The chroot (and seccomp?) happens late enough such that QEMU can +initialize itself and open its disks. If you want to add a disk at run +time via or insert a CD, you can't pass a path because QEMU is +chrooted. Instead use the add-fd QMP command and use +/dev/fdset/ as the path. + +A further layer of restriction could be to set RLIMIT_NOFILES to '0', +and hand all disks over QMP. + +## Migration + +When calling xen-save-devices-state, since QEMU is running in a chroot +it is not useful to pass a filename (it doesn't even have write access +inside the chroot). Instead, give it an open fd using the add-fd +mechanism. + +Additionally, all the restrictions need to be applied to the qemu +started up on the post-migration side. One issue that needs to be +solved is how to signal the toolstack on restore that qemu is ready +for the domain to be started (since this is normally done via +xenstore, and at this point the xenstore connections will have been +closed). + +### Network namespacing (Linux only) + +Enter QEMU into its own network namespace (in addition to mount & IPC +namespaces): + + unshare(CLONE_NEWNET); + +QEMU does actually use the network namespace as a Xen DM for two +purposes: 1) To set up network tap devices 2) To open vnc connections. + +#### Network + +If QEMU runs in its own network namespace, it can't open the tap +device itself because the interface won't be visible outside of its +own namespace. So instead, have the toolstack open the device and pass +it as an fd on the command-line: + + -device rtl8139,netdev=tapnet0,mac=... -netdev tap,id=tapnet0,fd= + +#### VNC + +If QEMU runs in its own network namespace, it is not straightforward +to listen on a TCP socket outside of its own network namespace. One +option would be to use VNC over a UNIX socket: + + -vnc unix:/var/run/xen/vnc- + +However, this would break functionality in the general case; I think +we need to have the toolstack open a socket and pass the fd to QEMU +(which requires changes to QEMU). + diff --git a/docs/designs/xenstore-migration.md b/docs/designs/xenstore-migration.md new file mode 100644 index 0000000000..2ce2c836f5 --- /dev/null +++ b/docs/designs/xenstore-migration.md @@ -0,0 +1,411 @@ +# Xenstore Migration + +## Background + +The design for *Non-Cooperative Migration of Guests*[1] explains that extra +save records are required in the migrations stream to allow a guest running PV +drivers to be migrated without its co-operation. Moreover the save records must +include details of registered xenstore watches as well as content; information +that cannot currently be recovered from `xenstored`, and hence some extension +to the xenstored implementations will also be required. + +As a similar set of data is needed for transferring xenstore data from one +instance to another when live updating xenstored this document proposes an +image format for a 'migration stream' suitable for both purposes. + +## Proposal + +The image format consists of a _header_ followed by 1 or more _records_. Each +record consists of a type and length field, followed by any data mandated by +the record type. At minimum there will be a single record of type `END` +(defined below). + +### Header + +The header identifies the stream as a `xenstore` stream, including the version +of the specification that it complies with. + +All fields in this header must be in _big-endian_ byte order, regardless of +the setting of the endianness bit. + + +``` + 0 1 2 3 4 5 6 7 octet ++-------+-------+-------+-------+-------+-------+-------+-------+ +| ident | ++-------------------------------+-------------------------------| +| version | flags | ++-------------------------------+-------------------------------+ +``` + + +| Field | Description | +|-----------|---------------------------------------------------| +| `ident` | 0x78656e73746f7265 ('xenstore' in ASCII) | +| | | +| `version` | 0x00000001 (the version of the specification) | +| | | +| `flags` | 0 (LSB): Endianness: 0 = little, 1 = big | +| | | +| | 1-31: Reserved (must be zero) | + +### Records + +Records immediately follow the header and have the following format: + + +``` + 0 1 2 3 4 5 6 7 octet ++-------+-------+-------+-------+-------+-------+-------+-------+ +| type | len | ++-------------------------------+-------------------------------+ +| body +... +| | padding (0 to 7 octets) | ++-------+-------------------------------------------------------+ +``` + +NOTE: padding octets here and in all subsequent format specifications must be + written as zero and should be ignored when the stream is read. + + +| Field | Description | +|--------|------------------------------------------------------| +| `type` | 0x00000000: END | +| | 0x00000001: GLOBAL_DATA | +| | 0x00000002: CONNECTION_DATA | +| | 0x00000003: WATCH_DATA | +| | 0x00000004: TRANSACTION_DATA | +| | 0x00000005: NODE_DATA | +| | 0x00000006 - 0xFFFFFFFF: reserved for future use | +| | | +| `len` | The length (in octets) of `body` | +| | | +| `body` | The type-specific record data | + +Some records will depend on other records in the migration stream. Records +upon which other records depend must always appear earlier in the stream. + +The various formats of the type-specific data are described in the following +sections: + +\pagebreak + +### END + +The end record marks the end of the image, and is the final record +in the stream. + +``` + 0 1 2 3 4 5 6 7 octet ++-------+-------+-------+-------+-------+-------+-------+-------+ +``` + + +The end record contains no fields; its body length is 0. + +\pagebreak + +### GLOBAL_DATA + +This record is only relevant for live update. It contains details of global +xenstored state that needs to be restored. + +``` + 0 1 2 3 octet ++-------+-------+-------+-------+ +| rw-socket-fd | ++-------------------------------+ +| ro-socket-fd | ++-------------------------------+ +``` + + +| Field | Description | +|----------------|----------------------------------------------| +| `rw-socket-fd` | The file descriptor of the socket accepting | +| | read-write connections | +| | | +| `ro-socket-fd` | The file descriptor of the socket accepting | +| | read-only connections | + +xenstored will resume in the original process context. Hence `rw-socket-fd` and +`ro-socket-fd` simply specify the file descriptors of the sockets. Sockets +are not always used, however, and so -1 will be used to denote an unused +socket. + + +\pagebreak + +### CONNECTION_DATA + +For live update the image format will contain a `CONNECTION_DATA` record for +each connection to xenstore. For migration it will only contain a record for +the domain being migrated. + + +``` + 0 1 2 3 4 5 6 7 octet ++-------+-------+-------+-------+-------+-------+-------+-------+ +| conn-id | conn-type | flags | ++-------------------------------+---------------+---------------+ +| conn-spec +... ++---------------+---------------+-------------------------------+ +| in-data-len | out-resp-len | out-data-len | ++---------------+---------------+-------------------------------+ +| data +... +``` + + +| Field | Description | +|----------------|----------------------------------------------| +| `conn-id` | A non-zero number used to identify this | +| | connection in subsequent connection-specific | +| | records | +| | | +| `conn-type` | 0x0000: shared ring | +| | 0x0001: socket | +| | 0x0002 - 0xFFFF: reserved for future use | +| | | +| `flags` | A bit-wise OR of: | +| | 0001: read-only | +| | | +| `conn-spec` | See below | +| | | +| `in-data-len` | The length (in octets) of any data read | +| | from the connection not yet processed | +| | | +| `out-resp-len` | The length (in octets) of a partial response | +| | not yet written to the connection | +| | | +| `out-data-len` | The length (in octets) of any pending data | +| | not yet written to the connection, including | +| | a partial response (see `out-resp-len`) | +| | | +| `data` | Pending data: first in-data-len octets of | +| | read data, then out-data-len octets of | +| | written data (any of both may be empty) | + +In case of live update the connection record for the connection via which +the live update command was issued will contain the response for the live +update command in the pending not yet written data. + +\pagebreak + +The format of `conn-spec` is dependent upon `conn-type`. + +For `shared ring` connections it is as follows: + + +``` + 0 1 2 3 4 5 6 7 octet ++---------------+---------------+---------------+---------------+ +| domid | tdomid | evtchn | ++-------------------------------+-------------------------------+ +``` + + +| Field | Description | +|-----------|---------------------------------------------------| +| `domid` | The domain-id that owns the shared page | +| | | +| `tdomid` | The domain-id that `domid` acts on behalf of if | +| | it has been subject to an SET_TARGET | +| | operation [2] or DOMID_INVALID [3] otherwise | +| | | +| `evtchn` | The port number of the interdomain channel used | +| | by `domid` to communicate with xenstored | +| | | + +Since the ABI guarantees that entry 1 in `domid`'s grant table will always +contain the GFN of the shared page. + +For `socket` connections it is as follows: + + +``` ++---------------+---------------+---------------+---------------+ +| socket-fd | pad | ++-------------------------------+-------------------------------+ +``` + + +| Field | Description | +|-------------|-------------------------------------------------| +| `socket-fd` | The file descriptor of the connected socket | + +This type of connection is only relevant for live update, where the xenstored +resumes in the original process context. Hence `socket-fd` simply specify +the file descriptor of the socket connection. + +\pagebreak + +### WATCH_DATA + +The image format will contain a `WATCH_DATA` record for each watch registered +by a connection for which there is `CONNECTION_DATA` record previously present. + + +``` + 0 1 2 3 octet ++-------+-------+-------+-------+ +| conn-id | ++---------------+---------------+ +| wpath-len | token-len | ++---------------+---------------+ +| wpath +... +| token +... +``` + + +| Field | Description | +|-------------|-------------------------------------------------| +| `conn-id` | The connection that issued the `WATCH` | +| | operation [2] | +| | | +| `wpath-len` | The length (in octets) of `wpath` including the | +| | NUL terminator | +| | | +| `token-len` | The length (in octets) of `token` including the | +| | NUL terminator | +| | | +| `wpath` | The watch path, as specified in the `WATCH` | +| | operation | +| | | +| `token` | The watch identifier token, as specified in the | +| | `WATCH` operation | + +\pagebreak + +### TRANSACTION_DATA + +The image format will contain a `TRANSACTION_DATA` record for each transaction +that is pending on a connection for which there is `CONNECTION_DATA` record +previously present. + + +``` + 0 1 2 3 octet ++-------+-------+-------+-------+ +| conn-id | ++-------------------------------+ +| tx-id | ++-------------------------------+ +``` + + +| Field | Description | +|----------------|----------------------------------------------| +| `conn-id` | The connection that issued the | +| | `TRANSACTION_START` operation [2] | +| | | +| `tx-id` | The transaction id passed back to the domain | +| | by the `TRANSACTION_START` operation | + +\pagebreak + +### NODE_DATA + +For live update the image format will contain a `NODE_DATA` record for each +node in xenstore. For migration it will only contain a record for the nodes +relating to the domain being migrated. The `NODE_DATA` may be related to +a _committed_ node (globally visible in xenstored) or a _pending_ node (created +or modified by a transaction for which there is also a `TRANSACTION_DATA` +record previously present). + + +``` + 0 1 2 3 octet ++-------+-------+-------+-------+ +| conn-id | ++-------------------------------+ +| tx-id | ++---------------+---------------+ +| path-len | value-len | ++---------------+---------------+ +| access | perm-count | ++---------------+---------------+ +| perm1 | ++-------------------------------+ +... ++-------------------------------+ +| permN | ++---------------+---------------+ +| path +... +| value +... +``` + + +| Field | Description | +|--------------|------------------------------------------------| +| `conn-id` | If this value is non-zero then this record | +| | related to a pending transaction | +| | | +| `tx-id` | This value should be ignored if `conn-id` is | +| | zero. Otherwise it specifies the id of the | +| | pending transaction | +| | | +| `path-len` | The length (in octets) of `path` including the | +| | NUL terminator | +| | | +| `value-len` | The length (in octets) of `value` (which will | +| | be zero for a deleted node) | +| | | +| `access` | This value should be ignored if this record | +| | does not relate to a pending transaction, | +| | otherwise it specifies the accesses made to | +| | the node and hence is a bitwise OR of: | +| | | +| | 0x0001: read | +| | 0x0002: written | +| | | +| | The value will be zero for a deleted node | +| | | +| `perm-count` | The number (N) of node permission specifiers | +| | (which will be 0 for a node deleted in a | +| | pending transaction) | +| | | +| `perm1..N` | A list of zero or more node permission | +| | specifiers (see below) | +| | | +| `path` | The absolute path of the node | +| | | +| `value` | The node value (which may be empty or contain | +| | NUL octets) | + + +A node permission specifier has the following format: + + +``` + 0 1 2 3 octet ++-------+-------+-------+-------+ +| perm | pad | domid | ++-------+-------+---------------+ +``` + +| Field | Description | +|---------|-----------------------------------------------------| +| `perm` | One of the ASCII values `w`, `r`, `b` or `n` as | +| | specified for the `SET_PERMS` operation [2] | +| | | +| `domid` | The domain-id to which the permission relates | + +Note that perm1 defines the domain owning the code. See [4] for more +explanation of node permissions. + +* * * + +[1] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=docs/designs/non-cooperative-migration.md + +[2] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=docs/misc/xenstore.txt + +[3] See https://xenbits.xen.org/gitweb/?p=xen.git;a=blob;f=xen/include/public/xen.h;hb=HEAD#l612 + +[4] https://wiki.xen.org/wiki/XenBus diff --git a/docs/features/dom0less.pandoc b/docs/features/dom0less.pandoc new file mode 100644 index 0000000000..d798596cdf --- /dev/null +++ b/docs/features/dom0less.pandoc @@ -0,0 +1,135 @@ +Dom0less +======== + +"Dom0less" is a set of Xen features that enable the deployment of a Xen +system without an control domain (often referred to as "dom0"). Each +feature can be used independently from the others, unless otherwise +stated. + +Booting Multiple Domains from Device Tree +----------------------------------------- + +This feature enables Xen to create a set of DomUs at boot time. +Information about the DomUs to be created by Xen is passed to the +hypervisor via Device Tree. Specifically, the existing Device Tree based +Multiboot specification has been extended to allow for multiple domains +to be passed to Xen. See docs/misc/arm/device-tree/booting.txt for more +information about the Multiboot specification and how to use it. + +Currently, a control domain ("dom0") is still required, but in the +future it will become unnecessary when all domains are created +directly from Xen. Instead of waiting for the control domain to be fully +booted and the Xen tools to become available, domains created by Xen +this way are started right away in parallel. Hence, their boot time is +typically much shorter. + + +Configuration +------------- + +### Loading binaries into memory ### + +U-Boot needs to load not just Xen, the device tree binary, the dom0 kernel and +ramdisk. It also needs to load the kernel and ramdisk of any additional domains +to boot. For example if this is the bootcmd for Xen and Dom0: + + tftpb 0x1280000 xen.dtb + tftpb 0x0x80000 xen-Image + tftpb 0x1400000 xen.ub + tftpb 0x9000000 xen-rootfs.cpio.gz.u-boot + + bootm 0x1400000 0x9000000 0x1280000 + +If we want to add one DomU with Image-DomU as the DomU kernel +and ramdisk-DomU as DomU ramdisk: + + tftpb 0x1280000 xen.dtb + tftpb 0x80000 xen-Image + tftpb 0x1400000 xen.ub + tftpb 0x9000000 xen-rootfs.cpio.gz.u-boot + + tftpb 0x2000000 Image-DomU + tftpb 0x3000000 ramdisk-DomU + + bootm 0x1400000 0x9000000 0x1280000 + + +### Device Tree configuration ### + +In addition to loading the necessary binaries, we also need to advertise +the presence of the additional VM and its configuration. It is done via +device tree adding a node under /chosen as follows: + + domU1 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "xen,domain"; + memory = <0 0x20000>; + cpus = <1>; + vpl011; + + module@2000000 { + compatible = "multiboot,kernel", "multiboot,module"; + reg = <0x2000000 0xffffff>; + bootargs = "console=ttyAMA0"; + }; + + module@30000000 { + compatible = "multiboot,ramdisk", "multiboot,module"; + reg = <0x3000000 0xffffff>; + }; + }; + +Where memory is the memory of the VM in KBs, cpus is the number of +cpus. module@2000000 and module@3000000 advertise where the kernel and +ramdisk are in memory. + +Note: the size specified should exactly match the size of the Kernel/initramfs. +Otherwise, they may be unusable in Xen (for instance if they are compressed). + +See docs/misc/arm/device-tree/booting.txt for more information. + +Limitations +----------- + +Domains started by Xen at boot time currently have the following +limitations: + +- They cannot be properly shutdown or rebooted using xl. If one of them + crashes, the whole platform should be rebooted. + +- Some xl operations might not work as expected. xl is meant to be used + with domains that have been created by it. Using xl with domains + started by Xen at boot might not work as expected. + +- The GIC version is the native version. In absence of other + information, the GIC version exposed to the domains started by Xen at + boot is the same as the native GIC version. + +- No PV drivers. There is no support for PV devices at the moment. All + devices need to be statically assigned to guests. + +- Pinning vCPUs of domains started by Xen at boot can be + done from the control domain, using `xl vcpu-pin` as usual. It is not + currently possible to configure vCPU pinning without a control domain. + However, the NULL scheduler can be selected by passing `sched=null` to + the Xen command line. The NULL scheduler automatically assigns and + pins vCPUs to pCPUs, but the vCPU-pCPU assignments cannot be + configured. + +Notes +----- + +- 'xl console' command will not attach to the domain's console in case + of dom0less. DomU are domains created by Xen (similar to Dom0) and + therefore they are all managed by Xen and some of the commands may not work. + + A user is allowed to configure the key sequence to switch input. + Pressing the Xen "conswitch" (Ctrl-A by default) three times + switches input in case of dom0less mode. + +- Domains created by Xen will have no name at boot. Domain-0 has a name + thanks to the helper xen-init-dom0 called at boot by the initscript. + If you want to setup DomU name, then you will have to create the xenstore + node associated. By default DomU names are shown as '(null)' in the + xl domains list. diff --git a/docs/features/feature-levelling.pandoc b/docs/features/feature-levelling.pandoc new file mode 100644 index 0000000000..171a42c358 --- /dev/null +++ b/docs/features/feature-levelling.pandoc @@ -0,0 +1,216 @@ +% Feature Levelling +% Revision 1 + +\clearpage + +# Basics + +---------------- ---------------------------------------------------- + Status: **Supported** + + Architecture: x86 + + Component: Hypervisor, toolstack, guest +---------------- ---------------------------------------------------- + + +# Overview + +On native hardware, a kernel will boot, detect features, typically optimise +certain codepaths based on the available features, and expect the features to +remain available until it shuts down. + +The same expectation exists for virtual machines, and it is up to the +hypervisor/toolstack to fulfill this expectation for the lifetime of the +virtual machine, including across migrate/suspend/resume. + + +# User details + +Many factors affect the featureset which a VM may use: + +* The CPU itself +* The BIOS/firmware/microcode version and settings +* The hypervisor version and command line settings +* Further restrictions the toolstack chooses to apply + +A firmware or software upgrade might reduce the available set of features +(e.g. Intel disabling TSX in a microcode update for certain Haswell/Broadwell +processors), as may editing the settings. + +It is unsafe to make any assumption about features remaining consistent across +a host reboot. Xen recalculates all information from scratch each boot, and +provides the information for the toolstack to consume. + +`xl` currently has no facilities to help the user collect appropriate feature +information from relevant hosts and compute appropriate feature specifications +for use in host or domain configurations. (`xl` being a single-host +toolstack, it would in any case need external support for accessing remote +hosts eg via ssh, in the form of automation software like GNU parallel or +ansible.) + +# Technical details + +The `CPUID` instruction is used by software to query for features. In the +virtualisation usecase, guest software should query Xen rather than hardware +directly. However, `CPUID` is an unprivileged instruction which doesn't +fault, complicating the task of hiding hardware features from guests. + +Important files: + +* Hypervisor + * `xen/arch/x86/cpu/*.c` + * `xen/arch/x86/cpuid.c` + * `xen/include/asm-x86/cpuid-autogen.h` + * `xen/include/public/arch-x86/cpufeatureset.h` + * `xen/tools/gen-cpuid.py` +* `libxc` + * `tools/libxc/xc_cpuid_x86.c` + +## Ability to control CPUID + +### HVM + +HVM guests (using `Intel VT-x` or `AMD SVM`) will unconditionally exit to Xen +on all `CPUID` instructions, allowing Xen full control over all information. + +### PV + +The `CPUID` instruction is unprivileged, so executing it in a PV guest will +not trap, leaving Xen no direct ability to control the information returned. + +### Xen Forced Emulation Prefix + +Xen-aware PV software can make use of the 'Forced Emulation Prefix' + +> `ud2a; .ascii 'xen'; cpuid` + +which Xen recognises as a deliberate attempt to get the fully-controlled +`CPUID` information rather than the hardware-reported information. This only +works with cooperative software. + +### Masking and Override MSRs + +AMD CPUs from the `K8` onwards support _Feature Override_ MSRs, which allow +direct control of the values returned for certain `CPUID` leaves. These MSRs +allow any result to be returned, including the ability to advertise features +which are not actually supported. + +Intel CPUs between `Nehalem` and `SandyBridge` have differing numbers of +_Feature Mask_ MSRs, which are a simple AND-mask applied to all `CPUID` +instructions requesting specific feature bitmap sets. The exact MSRs, and +which feature bitmap sets they affect are hardware specific. These MSRs allow +features to be hidden by clearing the appropriate bit in the mask, but does +not allow unsupported features to be advertised. + +### CPUID Faulting + +Intel CPUs from `IvyBridge` onwards have _CPUID Faulting_, which allows Xen to +cause `CPUID` instruction executed in PV guests to fault. This allows Xen +full control over all information, exactly like HVM guests. + +## Compile time + +As some features depend on other features, it is important that, when +disabling a certain feature, we disable all features which depend on it. This +allows runtime logic to be simplified, by being able to rely on testing only +the single appropriate feature, rather than the entire feature dependency +chain. + +To speed up runtime calculation of feature dependencies, the dependency chain +is calculated and flattened by `xen/tools/gen-cpuid.py` to create +`xen/include/asm-x86/cpuid-autogen.h` from +`xen/include/public/arch-x86/cpufeatureset.h`, allowing the runtime code to +disable all dependent features of a specific disabled feature in constant +time. + +## Host boot + +As Xen boots, it will enumerate the features it can see. This is stored as +the *raw_featureset*. + +Errata checks and command line arguments are then taken into account to reduce +the *raw_featureset* into the *host_featureset*, which is the set of +features Xen uses. On hardware with masking/override MSRs, the default MSR +values are picked from the *host_featureset*. + +The *host_featureset* is then used to calculate the *pv_featureset* and +*hvm_featureset*, which are the maximum featuresets Xen is willing to offer +to PV and HVM guests respectively. + +In addition, Xen will calculate how much control it has over non-cooperative +PV `CPUID` instructions, storing this information as *levelling_caps*. + +## Domain creation + +The toolstack can query each of the calculated featureset via +`XEN_SYSCTL_get_cpu_featureset`, and query for the levelling caps via +`XEN_SYSCTL_get_cpu_levelling_caps`. + +These data should be used by the toolstack when choosing the eventual +featureset to offer to the guest. + +Once a featureset has been chosen, it is set (implicitly or explicitly) via +`XEN_DOMCTL_set_cpuid`. Xen will clamp the toolstacks choice to the +appropriate PV or HVM featureset. On hardware with masking/override MSRs, the +guest cpuid policy is reflected in the MSRs, which are context switched with +other vcpu state. + +# Limitations + +A guest which ignores the provided feature information and manually probes for +features will be able to find some of them. e.g. There is no way of forcibly +preventing a guest from using 1GB superpages if the hardware supports it. + +Some information simply cannot be hidden from guests. There is no way to +control certain behaviour such as the hardware MXCSR_MASK or x87 FPU exception +behaviour. + + +# Testing + +Feature levelling is a very wide area, and used all over the hypervisor. +Please ask on xen-devel for help identifying more specific tests which could +be of use. + + +# Known issues / Areas for improvement + +The feature querying and levelling functions should exposed in a +convenient-to-use way by `xl`. + +Xen currently has no concept of per-{socket,core,thread} CPUID information. +As a result, details such as APIC IDs, topology and cache information do not +match real hardware, and do not match the documented expectations in the Intel +and AMD system manuals. + +The CPU feature flags are the only information which the toolstack has a +sensible interface for querying and levelling. Other information in the CPUID +policy is important and should be levelled (e.g. maxphysaddr). + +The CPUID policy is currently regenerated from scratch by the receiving side, +once memory and vcpu content has been restored. This means that the receiving +Xen cannot verify the memory/vcpu content against the CPUID policy, and can +end up running a guest which will subsequently crash. The CPUID policy should +be at the head of the migration stream. + +MSRs are another source of features for guests. There is no general provision +for controlling the available MSRs. E.g. 64bit versions of Windows notice +changes in IA32_MISC_ENABLE, and suffer a BSOD 0x109 (Critical Structure +Corruption) + + +# References + +[Intel Flexmigration](http://www.intel.co.uk/content/dam/www/public/us/en/documents/application-notes/virtualization-technology-flexmigration-application-note.pdf) + +[AMD Extended Migration Technology](http://developer.amd.com/wordpress/media/2012/10/43781-3.00-PUB_Live-Virtual-Machine-Migration-on-AMD-processors.pdf) + + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2016-05-31 1 Xen 4.7 Document written +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/hypervisorfs.pandoc b/docs/features/hypervisorfs.pandoc new file mode 100644 index 0000000000..a0a0ead057 --- /dev/null +++ b/docs/features/hypervisorfs.pandoc @@ -0,0 +1,92 @@ +% Hypervisor FS +% Revision 1 + +\clearpage + +# Basics +---------------- --------------------- + Status: **Supported** + + Architectures: all + + Components: Hypervisor, toolstack +---------------- --------------------- + +# Overview + +The Hypervisor FS is a hierarchical name-value store for reporting +information to guests, especially dom0. It is similar to the Linux +kernel's sysfs. Entries and directories are created by the hypervisor, +while the toolstack is able to use a hypercall to query the entry +values or (if allowed by the hypervisor) to modify them. + +# User details + +With: + + xenhypfs ls + +the user can list the entries of a specific path of the FS. Using: + + xenhypfs cat + +the content of an entry can be retrieved. Using: + + xenhypfs write + +a writable entry can be modified. With: + + xenhypfs tree + +the complete Hypervisor FS entry tree can be printed. + +The FS paths are documented in `docs/misc/hypfs-paths.pandoc`. + +# Technical details + +Access to the hypervisor filesystem is done via the stable new hypercall +__HYPERVISOR_filesystem_op. This hypercall supports a sub-command +XEN_HYPFS_OP_get_version which will return the highest version of the +interface supported by the hypervisor. Additions to the interface need +to bump the interface version. The hypervisor is required to support the +previous interface versions, too (this implies that additions will always +require new sub-commands in order to allow the hypervisor to decide which +version of the interface to use). + +* hypercall interface specification + * `xen/include/public/hypfs.h` +* hypervisor internal files + * `xen/include/xen/hypfs.h` + * `xen/common/hypfs.c` +* `libxenhypfs` + * `tools/libs/libxenhypfs/*` +* `xenhypfs` + * `tools/misc/xenhypfs.c` +* path documentation + * `docs/misc/hypfs-paths.pandoc` + +# Testing + +Any new parameters or hardware mitigations should be verified to show up +correctly in the filesystem. + +# Areas for improvement + +* More detailed access rights +* Entries per domain and/or per cpupool + +# Known issues + +* None + +# References + +* None + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2020-01-23 1 Xen 4.14 Document written +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/intel_psr_cat_cdp.pandoc b/docs/features/intel_psr_cat_cdp.pandoc new file mode 100644 index 0000000000..1fb02ea1e6 --- /dev/null +++ b/docs/features/intel_psr_cat_cdp.pandoc @@ -0,0 +1,512 @@ +% Intel Cache Allocation Technology and Code and Data Prioritization Features +% Revision 1.17 + +\clearpage + +# Basics + +---------------- ---------------------------------------------------- + Status: **Tech Preview** + +Architecture(s): Intel x86 + + Component(s): Hypervisor, toolstack + + Hardware: L3 CAT: Haswell and beyond CPUs + CDP : Broadwell and beyond CPUs + L2 CAT: Atom codename Goldmont and beyond CPUs +---------------- ---------------------------------------------------- + +# Terminology + +* CAT Cache Allocation Technology +* CBM Capacity BitMasks +* CDP Code and Data Prioritization +* CMT Cache Monitoring Technology +* COS/CLOS Class of Service +* MSRs Machine Specific Registers +* PSR Intel Platform Shared Resource + +# Overview + +Intel provides a set of allocation capabilities including Cache Allocatation +Technology (CAT) and Code and Data Prioritization (CDP). + +CAT allows an OS or hypervisor to control allocation of a CPU's shared cache +based on application/domain priority or Class of Service (COS). Each COS is +configured using capacity bitmasks (CBMs) which represent cache capacity and +indicate the degree of overlap and isolation between classes. Once CAT is +configured, the processor allows access to portions of cache according to the +established COS. Intel Xeon processor E5 v4 family (and some others) introduce +capabilities to configure and make use of the CAT mechanism on the L3 cache. +Intel Goldmont processor provides support for control over the L2 cache. + +Code and Data Prioritization (CDP) Technology is an extension of CAT. CDP +enables isolation and separate prioritization of code and data fetches to +the L3 cache in a SW configurable manner, which can enable workload +prioritization and tuning of cache capacity to the characteristics of the +workload. CDP extends CAT by providing separate code and data masks per Class +of Service (COS). When SW configures to enable CDP, L3 CAT is disabled. + +# User details + +* Feature Enabling: + + Add "psr=cat" to boot line parameter to enable all supported level CAT + features. Add "psr=cdp" to enable L3 CDP but disables L3 CAT by SW. + +* xl interfaces: + + 1. `psr-cat-show [OPTIONS] domain-id`: + + Show L2 CAT or L3 CAT/CDP CBM of the domain designated by Xen domain-id. + + Option `-l`: + + `-l2`: Show cbm for L2 cache. + + `-l3`: Show cbm for L3 cache. + + If `-lX` is specified and LX is not supported, print error. + If no `-l` is specified, level 3 is the default option. + + 2. `psr-cat-set [OPTIONS] domain-id cbm`: + + Set L2 CAT or L3 CAT/CDP CBM to the domain designated by Xen domain-id. + + Option `-s`: Specify the socket to process, otherwise all sockets are + processed. + + Option `-l`: + + `-l2`: Specify cbm for L2 cache. + + `-l3`: Specify cbm for L3 cache. + + If `-lX` is specified and LX is not supported, print error. + If no `-l` is specified, level 3 is the default option. + + Option `-c` or `-d`: + + `-c`: Set L3 CDP code cbm. + + `-d`: Set L3 CDP data cbm. + + 3. `psr-hwinfo [OPTIONS]`: + + Show CMT & L2 CAT & L3 CAT/CDP HW information on every socket. + + Option `-m, --cmt`: Show Cache Monitoring Technology (CMT) hardware + info. + + Option `-a, --cat`: Show CAT/CDP hardware info. + +# Technical details + +L3 CAT/CDP and L2 CAT are all members of Intel PSR features, they share the base +PSR infrastructure in Xen. + +## Hardware perspective + +CAT/CDP defines a range of MSRs to assign different cache access patterns +which are known as CBMs, each CBM is associated with a COS. + +E.g. L2 CAT: + + +----------------------------+----------------+ + IA32_PQR_ASSOC | MSR (per socket) | Address | + +----+---+-------+ +----------------------------+----------------+ + | |COS| | | IA32_L2_QOS_MASK_0 | 0xD10 | + +----+---+-------+ +----------------------------+----------------+ + +-------------> | ... | ... | + +----------------------------+----------------+ + | IA32_L2_QOS_MASK_n | 0xD10+n (n<64) | + +----------------------------+----------------+ + +L3 CAT/CDP uses a range of MSRs from 0xC90 ~ 0xC90+n (n<128). + +L2 CAT uses a range of MSRs from 0xD10 ~ 0xD10+n (n<64), following the L3 +CAT/CDP MSRs, setting different L2 cache accessing patterns from L3 cache is +supported. + +Every MSR stores a CBM value. A capacity bitmask (CBM) provides a hint to the +hardware indicating the cache space a domain should be limited to as well as +providing an indication of overlap and isolation in the CAT-capable cache from +other domains contending for the cache. + +Sample cache capacity bitmasks for a bitlength of 8 are shown below. Please +note that all (and only) contiguous '1' combinations are allowed (e.g. FFFFH, +0FF0H, 003CH, etc.). + + +----+----+----+----+----+----+----+----+ + | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | + +----+----+----+----+----+----+----+----+ + COS0 | A | A | A | A | A | A | A | A | Default Bitmask + +----+----+----+----+----+----+----+----+ + COS1 | A | A | A | A | A | A | A | A | + +----+----+----+----+----+----+----+----+ + COS2 | A | A | A | A | A | A | A | A | + +----+----+----+----+----+----+----+----+ + + +----+----+----+----+----+----+----+----+ + | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | + +----+----+----+----+----+----+----+----+ + COS0 | A | A | A | A | A | A | A | A | Overlapped Bitmask + +----+----+----+----+----+----+----+----+ + COS1 | | | | | A | A | A | A | + +----+----+----+----+----+----+----+----+ + COS2 | | | | | | | A | A | + +----+----+----+----+----+----+----+----+ + + +----+----+----+----+----+----+----+----+ + | M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 | + +----+----+----+----+----+----+----+----+ + COS0 | A | A | A | A | | | | | Isolated Bitmask + +----+----+----+----+----+----+----+----+ + COS1 | | | | | A | A | | | + +----+----+----+----+----+----+----+----+ + COS2 | | | | | | | A | A | + +----+----+----+----+----+----+----+----+ + +We can get the CBM length through CPUID. The default value of CBM is calculated +by `(1ull << cbm_len) - 1`. That is a fully open bitmask, all ones bitmask. +The COS\[0\] always stores the default value without change. + +There is a `IA32_PQR_ASSOC` register which stores the COS ID of the VCPU. HW +enforces cache allocation according to the corresponding CBM. + +## The relationship between L3 CAT/CDP and L2 CAT + +HW may support all features. By default, CDP is disabled on the processor. +If the L3 CAT MSRs are used without enabling CDP, the processor operates in +a traditional CAT-only mode. When CDP is enabled: + +* the CAT mask MSRs are re-mapped into interleaved pairs of mask MSRs for + data or code fetches. + +* the range of COS for CAT is re-indexed, with the lower-half of the COS + range available for CDP. + +L2 CAT is independent of L3 CAT/CDP, which means L2 CAT can be enabled while +L3 CAT/CDP is disabled, or L2 CAT and L3 CAT/CDP are both enabled. + +As a requirement, the bits of CBM of CAT/CDP must be continuous. + +N.B. L2 CAT and L3 CAT/CDP share the same COS field in the same associate +register `IA32_PQR_ASSOC`, which means one COS is associated with a pair of +L2 CAT CBM and L3 CAT/CDP CBM. + +Besides, the max COS of L2 CAT may be different from L3 CAT/CDP (or other +PSR features in future). In some cases, a domain is permitted to have a COS +that is beyond one (or more) of PSR features but within the others. For +instance, let's assume the max COS of L2 CAT is 8 but the max COS of L3 +CAT is 16, when a domain is assigned 9 as COS, the L3 CAT CBM associated to +COS 9 would be enforced, but for L2 CAT, the HW works as default value is +set since COS 9 is beyond the max COS (8) of L2 CAT. + +## Design Overview + +* Core COS/CBM association + + When enforcing CAT/CDP, all cores of domains have the same default COS + (COS0) which is associated with the fully open CBM (all ones bitmask) to + access all cache. The default COS is used only in hypervisor and is + transparent to tool stack and user. + + System administrator can change PSR allocation policy at runtime by tool + stack. Since L2 CAT shares COS with L3 CAT/CDP, a COS corresponds to a + 2-tuple, like \[L2 CBM, L3 CBM\] with only-CAT enabled, when CDP is + enabled, one COS corresponds to a 3-tuple, like \[L2 CBM, L3 Code_CBM, + L3 Data_CBM\]. If neither L3 CAT nor L3 CDP is enabled, things would be + easier, one COS corresponds to one L2 CBM. + +* VCPU schedule + + When context switch happens, the COS of VCPU is written to per-thread MSR + `IA32_PQR_ASSOC`, and then hardware enforces cache allocation according to + the corresponding CBM. + +* Multi-sockets + + Different sockets may have different CAT/CDP capability (e.g. max COS) + although it is consistent on the same socket. So the capability of + per-socket CAT/CDP is specified. + + 'psr-cat-set' can set CBM for one domain per socket. On each socket, we + maintain a COS array for all domains. One domain uses one COS at one time. + One COS stores the CBM of the domain to work. So, when a VCPU of the domain + is migrated from socket 1 to socket 2, it follows configuration on socket 2. + + E.g. user sets domain 1 CBM on socket 1 to 0x7f which uses COS 9 but sets + domain 1 CBM on socket 2 to 0x3f which uses COS 7. When VCPU of this domain + is migrated from socket 1 to 2, the COS ID used is 7, that means 0x3f is the + CBM to work for this domain 1 now. + +## Implementation Description + +* Hypervisor interfaces: + + 1. Boot line parameter "psr=cat" enables L2 CAT and L3 CAT if hardware + supported. "psr=cdp" enables CDP if hardware supported. + + 2. SYSCTL: + + * XEN_SYSCTL_PSR_CAT_get_l3_info: Get L3 CAT/CDP information. + * XEN_SYSCTL_PSR_CAT_get_l2_info: Get L2 CAT information. + + 3. DOMCTL: + + * XEN_DOMCTL_PSR_CAT_OP_GET_L3_CBM: Get L3 CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_SET_L3_CBM: Set L3 CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_GET_L3_CODE: Get CDP Code CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_SET_L3_CODE: Set CDP Code CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_GET_L3_DATA: Get CDP Data CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_SET_L3_DATA: Set CDP Data CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_GET_L2_CBM: Get L2 CBM for a domain. + * XEN_DOMCTL_PSR_CAT_OP_SET_L2_CBM: Set L2 CBM for a domain. + +* xl interfaces: + + 1. psr-cat-show -lX domain-id + + Show LX cbm for a domain. + + => XEN_SYSCTL_PSR_CAT_get_l3_info / + XEN_SYSCTL_PSR_CAT_get_l2_info / + XEN_DOMCTL_PSR_CAT_OP_GET_L3_CBM / + XEN_DOMCTL_PSR_CAT_OP_GET_L3_CODE / + XEN_DOMCTL_PSR_CAT_OP_GET_L3_DATA / + XEN_DOMCTL_PSR_CAT_OP_GET_L2_CBM + + 2. psr-cat-set -lX domain-id cbm + + Set LX cbm for a domain. + + => XEN_DOMCTL_PSR_CAT_OP_SET_L3_CBM / + XEN_DOMCTL_PSR_CAT_OP_SET_L3_CODE / + XEN_DOMCTL_PSR_CAT_OP_SET_L3_DATA / + XEN_DOMCTL_PSR_CAT_OP_SET_L2_CBM + + 3. psr-hwinfo + + Show PSR HW information, including L3 CAT/CDP/L2 CAT + + => XEN_SYSCTL_PSR_CAT_get_l3_info / + XEN_SYSCTL_PSR_CAT_get_l2_info + +* Key data structure: + + 1. Feature properties + + static const struct feat_props { + unsigned int cos_num; + enum cbm_type type[PSR_MAX_COS_NUM]; + enum cbm_type alt_type; + bool (*get_feat_info)(const struct feat_node *feat, + uint32_t data[], unsigned int array_len); + void (*write_msr)(unsigned int cos, uint32_t val, + enum cbm_type type); + } *feat_props[PSR_SOCKET_FEAT_NUM]; + + Every feature has its own properties, e.g. some data and actions. A + feature property pointer array is declared to save every feature's + properties. + + * Member `cos_num` + + `cos_num` is the number of COS registers the feature uses, e.g. + L3/L2 CAT uses 1 register but CDP uses 2 registers. + + * Member `type` + + `type` is an array to save all 'enum cbm_type' values of the + feature. It is used with cos_num together to get/write a feature's + COS registers values one by one. + + * Member `alt_type` + + `alt_type` is 'alternative type'. When this 'alt_type' is input, + the feature does some special operations. + + * Member `get_feat_info` + + `get_feat_info` is used to return feature HW info through sysctl. + + * Member `write_msr` + + `write_msr` is used to write out feature MSR register. + + 2. Feature node + + struct feat_node { + unsigned int cos_max; + unsigned int cbm_len; + uint32_t cos_reg_val[MAX_COS_REG_CNT]; + }; + + When a PSR enforcement feature is enabled, it will be added into a + feature array. + + * Member `cos_max` + + `cos_max` is one of the hardware info of CAT. It means the max + number of COS registers. As L3 CAT/CDP/L2 CAT all have it, it is + declared in `feat_node`. + + * Member `cbm_len` + + `cbm_len` is one of the hardware info of CAT. It means the max + number of bits to set. + + * Member `cos_reg_val` + + `cos_reg_val` is an array to maintain the value set in all COS + registers of the feature. The array is indexed by COS ID. + + 3. Per-socket PSR features information structure + + struct psr_socket_info { + bool feat_init; + struct feat_node *features[PSR_SOCKET_FEAT_NUM]; + spinlock_t ref_lock; + unsigned int cos_ref[MAX_COS_REG_CNT]; + DECLARE_BITMAP(dom_ids, DOMID_IDLE + 1); + }; + + We collect all PSR allocation features information of a socket in this + `struct psr_socket_info`. + + * Member `feat_init` + + feat_init` is a flag, to indicate whether the CPU init on a socket + has been done. + + * Member `features` + + `features` is a pointer array to save all enabled features pointers + according to feature position defined in `enum psr_feat_type`. + + * Member `ref_lock` + + `ref_lock` is a spin lock to protect `cos_ref`. + + * Member `cos_ref` + + `cos_ref` is an array which maintains the reference of one COS. + It maps to cos_reg_val\[MAX_COS_REG_NUM\] in `struct feat_node`. + If one COS is used by one domain, the corresponding reference will + increase by one. If a domain releases the COS, the reference will + decrease by one. The array is indexed by COS ID. + + * Member `dom_ids` + + `dom_ids` is a bitmap, every bit corresponds to a domain. Index is + domain_id. It is used to help restore the cos_id of the domain to 0 + when a socket is offline and then online again. + +# Limitations + +CAT/CDP can only work on HW which enables it(check by CPUID). So far, there is +no HW which enables both L2 CAT and L3 CAT/CDP. But SW implementation has +considered such scenario to enable both L2 CAT and L3 CAT/CDP. + +# Testing + +We can execute above xl commands to verify L2 CAT and L3 CAT/CDP on different +HWs support them. + +For example: + + root@:~$ xl psr-hwinfo --cat + Cache Allocation Technology (CAT): L2 + Socket ID : 0 + Maximum COS : 3 + CBM length : 8 + Default CBM : 0xff + + root@:~$ xl psr-cat-cbm-set -l2 1 0x7f + + root@:~$ xl psr-cat-show -l2 1 + Socket ID : 0 + Default CBM : 0xff + ID NAME CBM + 1 ubuntu14 0x7f + +# Areas for improvement + +A hexadecimal number is used to set/show CBM for a domain now. Although this +is convenient to cover overlap/isolated bitmask requirement, it is not +user-friendly. + +To improve this, the libxl interfaces can be wrapped in libvirt to provide more +user-friendly interfaces to user, e.g. a percentage number of the cache to set +and show. + +# Known issues + +N/A + +# References + +"INTEL RESOURCE DIRECTOR TECHNOLOGY (INTEL RDT) ALLOCATION FEATURES" [Intel 64 and IA-32 Architectures Software Developer Manuals, vol3](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2016-08-12 1.0 Xen 4.9 Design document written + +2017-02-13 1.7 Xen 4.9 Changes: + + 1. Modify the design document to cover L3 + CAT/CDP and L2 CAT; + + 2. Fix typos; + + 3. Amend description of `feat_mask` to make + it clearer; + + 4. Other minor changes. + +2017-02-15 1.8 Xen 4.9 Changes: + + 1. Add content in 'Areas for improvement'; + + 2. Adjust revision number. + +2017-03-16 1.9 Xen 4.9 Changes: + + 1. Add 'CMT' in 'Terminology'; + + 2. Change 'feature list' to 'feature array'. + + 3. Modify data structure descriptions. + + 4. Adjust revision number. + +2017-05-03 1.11 Xen 4.9 Changes: + + 1. Modify data structure descriptions. + + 2. Adjust revision number. + +2017-07-13 1.14 Xen 4.10 Changes: + + 1. Fix a typo. + +2017-08-01 1.15 Xen 4.10 Changes: + + 1. Add 'alt_type' in 'feat_props' structure. + +2017-08-04 1.16 Xen 4.10 Changes: + + 1. Remove special character which may cause + html creation failure. + +2018-07-10 1.17 Xen 4.12 Changes: + + 1. Reformat complete document to enable PDF + creation. + +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/intel_psr_mba.pandoc b/docs/features/intel_psr_mba.pandoc new file mode 100644 index 0000000000..86df661ba8 --- /dev/null +++ b/docs/features/intel_psr_mba.pandoc @@ -0,0 +1,297 @@ +% Intel Memory Bandwidth Allocation (MBA) Feature +% Revision 1.8 + +\clearpage + +# Basics + +---------------- ---------------------------------------------------- + Status: **Tech Preview** + +Architecture(s): Intel x86 + + Component(s): Hypervisor, toolstack + + Hardware: MBA is supported on Skylake Server and beyond +---------------- ---------------------------------------------------- + +# Terminology + +* CAT Cache Allocation Technology +* CBM Capacity BitMasks +* CDP Code and Data Prioritization +* COS/CLOS Class of Service +* HW Hardware +* MBA Memory Bandwidth Allocation +* MSRs Machine Specific Registers +* PSR Intel Platform Shared Resource +* THRTL Throttle value or delay value + +# Overview + +The Memory Bandwidth Allocation (MBA) feature provides indirect and approximate +control over memory bandwidth available per-core. This feature provides OS/ +hypervisor the ability to slow misbehaving apps/domains by using a credit-based +throttling mechanism. + +# User details + +* Feature Enabling: + + Add "psr=mba" to boot line parameter to enable MBA feature. + +* xl interfaces: + + 1. `psr-mba-show [domain-id|domain-name]`: + + Show memory bandwidth throttling for domain. Under different modes, it + shows different type of data. + + There are two modes: + Linear mode: the input precision is defined as 100-(MBA_MAX). For instance, + if the MBA_MAX value is 90, the input precision is 10%. Values not an even + multiple of the precision (e.g., 12%) will be rounded down (e.g., to 10% + delay applied) by HW automatically. The response of throttling value is + linear. + + Non-linear mode: input delay values are powers-of-two from zero to the + MBA_MAX value from CPUID. In this case any values not a power of two will + be rounded down the next nearest power of two by HW automatically. The + response of throttling value is non-linear. + + For linear mode, it shows the decimal value. For non-linear mode, it shows + hexadecimal value. + + 2. `psr-mba-set [OPTIONS] `: + + Set memory bandwidth throttling for domain. + + Options: + '-s': Specify the socket to process, otherwise all sockets are processed. + + Throttling value set in register implies the approximate amount of delaying + the traffic between core and memory. Higher throttling value result in + lower bandwidth. The max throttling value (MBA_MAX) supported can be + obtained through CPUID inside hypervisor. Users can fetch the MBA_MAX value + using the `psr-hwinfo` xl command. + +# Technical details + +MBA is a member of Intel PSR features, it shares the base PSR infrastructure +in Xen. + +## Hardware perspective + + MBA defines a range of MSRs to support specifying a delay value (Thrtl) per + COS, with details below. + + ``` + +----------------------------+----------------+ + | MSR (per socket) | Address | + +----------------------------+----------------+ + | IA32_L2_QOS_Ext_BW_Thrtl_0 | 0xD50 | + +----------------------------+----------------+ + | ... | ... | + +----------------------------+----------------+ + | IA32_L2_QOS_Ext_BW_Thrtl_n | 0xD50+n | + +----------------------------+----------------+ + ``` + + When context switch happens, the COS ID of domain is written to per-hyper- + thread MSR `IA32_PQR_ASSOC`, and then hardware enforces bandwidth allocation + according to the throttling value stored in the Thrtl MSR register. + +## The relationship between MBA and CAT/CDP + + Generally speaking, MBA is completely independent of CAT/CDP, and any + combination may be applied at any time, e.g. enabling MBA with CAT + disabled. + + But it needs to be noticed that MBA shares COS infrastructure with CAT, + although MBA is enumerated by different CPUID leaf from CAT (which + indicates that the max COS of MBA may be different from CAT). In some + cases, a domain is permitted to have a COS that is beyond one (or more) + of PSR features but within the others. For instance, let's assume the max + COS of MBA is 8 but the max COS of L3 CAT is 16, when a domain is assigned + 9 as COS, the L3 CAT CBM associated to COS 9 would be enforced, but for MBA, + the HW works as default value is set since COS 9 is beyond the max COS (8) + of MBA. + +## Design Overview + +* Core COS/Thrtl association + + When enforcing Memory Bandwidth Allocation, all cores of domains have + the same default Thrtl MSR (COS0) which stores the same Thrtl (0). The + default Thrtl MSR is used only in hypervisor and is transparent to tool stack + and user. + + System administrators can change PSR allocation policy at runtime by + using the tool stack. Since MBA shares COS ID with CAT/CDP, a COS ID + corresponds to a 2-tuple, like [CBM, Thrtl] with only-CAT enabled, when CDP + is enabled, the COS ID corresponds to a 3-tuple, like [Code_CBM, Data_CBM, + Thrtl]. If neither CAT nor CDP is enabled, things are easier, since one COS + ID corresponds to one Thrtl. + +* VCPU schedule + + This part reuses CAT COS infrastructure. + +* Multi-sockets + + Different sockets may have different MBA capabilities (like max COS) + although it is consistent on the same socket. So the capability + of per-socket MBA is specified. + + This part reuses CAT COS infrastructure. + +## Implementation Description + +* Hypervisor interfaces: + + 1. Boot line param: "psr=mba" to enable the feature. + + 2. SYSCTL: + - XEN_SYSCTL_PSR_MBA_get_info: Get system MBA information. + + 3. DOMCTL: + - XEN_DOMCTL_PSR_MBA_OP_GET_THRTL: Get throttling for a domain. + - XEN_DOMCTL_PSR_MBA_OP_SET_THRTL: Set throttling for a domain. + +* xl interfaces: + + 1. psr-mba-show [domain-id] + Show system/domain runtime MBA throttling value. For linear mode, + it shows the decimal value. For non-linear mode, it shows hexadecimal + value. + => XEN_SYSCTL_PSR_MBA_get_info/XEN_DOMCTL_PSR_MBA_OP_GET_THRTL + + 2. psr-mba-set [OPTIONS] + Set bandwidth throttling for a domain. + => XEN_DOMCTL_PSR_MBA_OP_SET_THRTL + + 3. psr-hwinfo + Show PSR HW information, including L3 CAT/CDP/L2 CAT/MBA. + => XEN_SYSCTL_PSR_MBA_get_info + +* Key data structure: + + 1. Feature HW info + + ``` + struct { + unsigned int thrtl_max; + bool linear; + } mba; + + - Member `thrtl_max` + + `thrtl_max` is the max throttling value to be set, i.e. MBA_MAX. + + - Member `linear` + + `linear` means the response of delay value is linear or not. + + As mentioned above, MBA is a member of Intel PSR features, it shares the + base PSR infrastructure in Xen. For example, the 'cos_max' is a common HW + property for all features. So, for other data structure details, please + refer to 'intel_psr_cat_cdp.pandoc'. + +# Limitations + +MBA can only work on HW which supports it (check CPUID). + +# Testing + +We can execute these commands to verify MBA on different HWs supporting them. + +For example: + 1. User can get the MBA hardware info through 'psr-hwinfo' command. From + result, user can know if this hardware works under linear mode or non- + linear mode, the max throttling value (MBA_MAX) and so on. + + root@:~$ xl psr-hwinfo --mba + Memory Bandwidth Allocation (MBA): + Socket ID : 0 + Linear Mode : Enabled + Maximum COS : 7 + Maximum Throttling Value: 90 + Default Throttling Value: 0 + + 2. Then, user can set a throttling value to a domain. For example, set '10', + i.e 10% delay. + + root@:~$ xl psr-mba-set 1 10 + + 3. User can check the current configuration of the domain through + 'psr-mab-show'. For linear mode, the decimal value is shown. + + root@:~$ xl psr-mba-show 1 + Socket ID : 0 + Default THRTL : 0 + ID NAME THRTL + 1 ubuntu14 10 + +# Areas for improvement + +N/A + +# Known issues + +N/A + +# References + +"INTEL RESOURCE DIRECTOR TECHNOLOGY (INTEL RDT) ALLOCATION FEATURES" [Intel 64 and IA-32 Architectures Software Developer Manuals, vol3](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html) + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2017-01-10 1.0 Xen 4.9 Design document written +2017-07-10 1.1 Xen 4.10 Changes: + 1. Modify data structure according to latest + codes; + 2. Add content for 'Areas for improvement'; + 3. Other minor changes. +2017-08-09 1.2 Xen 4.10 Changes: + 1. Remove a special character to avoid error when + building pandoc. +2017-08-15 1.3 Xen 4.10 Changes: + 1. Add terminology 'HW'. + 2. Change 'COS ID of VCPU' to 'COS ID of domain'. + 3. Change 'COS register' to 'Thrtl MSR'. + 4. Explain the value shown for 'psr-mba-show' under + different modes. + 5. Remove content in 'Areas for improvement'. +2017-08-16 1.4 Xen 4.10 Changes: + 1. Add '<>' for mandatory argument. +2017-08-30 1.5 Xen 4.10 Changes: + 1. Modify words in 'Overview' to make it easier to + understand. + 2. Explain 'linear/non-linear' modes before mention + them. + 3. Explain throttling value more accurate. + 4. Explain 'MBA_MAX'. + 5. Correct some words in 'Design Overview'. + 6. Change 'mba_info' to 'mba' according to code + changes. Also, modify contents of it. + 7. Add context in 'Testing' part to make things + more clear. + 8. Remove 'n<64' to avoid out-of-sync. +2017-09-21 1.6 Xen 4.10 Changes: + 1. Add 'domain-name' as parameter of 'psr-mba-show/ + psr-mba-set'. + 2. Fix some wordings. + 3. Explain how user can know the MBA_MAX. + 4. Move the description of 'Linear mode/Non-linear + mode' into section of 'psr-mba-show'. + 5. Change 'per-thread' to 'per-hyper-thread'. +2017-09-29 1.7 Xen 4.10 Changes: + 1. Correct some words. + 2. Change 'xl psr-mba-set 1 0xa' to + 'xl psr-mba-set 1 10' +2017-10-08 1.8 Xen 4.10 Changes: + 1. Correct some words. +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/livepatch.pandoc b/docs/features/livepatch.pandoc new file mode 100644 index 0000000000..17f1cd0d05 --- /dev/null +++ b/docs/features/livepatch.pandoc @@ -0,0 +1,106 @@ +% Live Patching +% Revision 1 + +\clearpage + +# Basics + +---------------- ---------------------------------------------------- + Status: **Supported** + + Architecture: x86 + + Status: **Tech Preview/Experimental** + + Architecture: ARM + + Component: Hypervisor, toolstack +---------------- ---------------------------------------------------- + + +# Details + +Xen Live Patching has been available as tech preview feature since Xen +4.7 and has now had a couple of releases to stabilize. Xen Live patching +has been used by multiple vendors to fix several real-world security +issues without any severe bugs encountered. Additionally, there are now +tests in OSSTest that test live patching to ensure that no regressions +are introduced. + +Based on the amount of testing and usage it has had, we are ready to +declare live patching as a 'Supported' feature on x86. + +Live patching is slightly peculiar when it comes to support because it +allows the host administrator to break their system rather easily +depending on the content of the live patch. Because of this, it is +worth detailing the scope of security support: + +1) Unprivileged access to live patching operations: + Live patching operations should only be accessible to privileged + guests and it shall be treated as a security issue if this is not + the case. + +2) Bugs in the patch-application code such that vulnerabilities exist + after application: + If a correct live patch is loaded but it is not applied correctly + such that it might result in an insecure system (e.g. not all + functions are patched), it shall be treated as a security issue. + +3) Bugs in livepatch-build-tools creating an incorrect live patch that + results in an insecure host: + If livepatch-build-tools creates an incorrect live patch that + results in an insecure host, this shall not be considered a security + issue. A live patch should be checked to verify that it is valid + before loading. + +4) Loading an incorrect live patch that results in an insecure host or + host crash: + If a live patch (whether created using livepatch-build-tools or some + alternative) is loaded and it results in an insecure host or host + crash due to the content of the live patch being incorrect or the + issue being inappropriate to live patch, this is not considered as a + security issue. + +5) Bugs in the live patch parsing code (the ELF loader): + Bugs in the live patch parsing code such as out-of-bounds reads + caused by invalid ELF files are not considered to be security issues + because the it can only be triggered by a privileged domain. + +6) Bugs which allow a guest to prevent the application of a livepatch: + A guest should not be able to prevent the application of a live + patch. If an unprivileged guest can somehow prevent the application + of a live patch despite pausing it (xl pause ...), it shall be + treated as a security issue. + +Note: It is expected that live patches are tested in a test environment +before being used in production to avoid unexpected issues. In +particular, to avoid the issues described by (3), (4), & (5). + +There are also some generic security questions which are worth asking: + +1) Is guest->host privilege escalation possible? + +The new live patching sysctl subops are only accessible to privileged +domains and this is tested by OSSTest with an XTF test. +There is a caveat -- an incorrect live patch can introduce a guest->host +privilege escalation. + +2) Is guest user->guest kernel escalation possible? + +No, although an incorrect live patch can introduce a guest user->guest +kernel privilege escalation. + +3) Is there any information leakage? + +The new live patching sysctl subops are only accessible to privileged +domains so it is not possible for an unprivileged guest to access the +list of loaded live patches. This is tested by OSSTest with an XTF test. +There is a caveat -- an incorrect live patch can introduce an +information leakage. + +4) Can a Denial-of-Service be triggered? + +There are no known ways that an unprivileged guest can prevent a live +patch from being loaded. +Once again, there is a caveat that an incorrect live patch can introduce +an arbitrary denial of service. diff --git a/docs/features/migration.pandoc b/docs/features/migration.pandoc new file mode 100644 index 0000000000..719925818e --- /dev/null +++ b/docs/features/migration.pandoc @@ -0,0 +1,124 @@ +% Migration +% Revision 2 + +\clearpage + +# Basics +--------------- ------------- + Status: **Supported** + + Architecture: x86 + + Component: Toolstack +--------------- ------------- + +# Overview + +Migration is a mechanism to move a virtual machine while the VM is +running. Live migration moves a running virtual machine between two +physical servers, but the same mechanism can be used for non-live +migration (pause and copy) and suspend/resume from disk. + +# User details + +No hardware requirements, although hypervisor logdirty support is +required for live migration. + +From the command line, `xl migrate/save/restore` are the top level +interactions. e.g. + + xl create my-vm.cfg + xl migrate my-vm localhost + +or + + xl create my-vm.cfg + xl save my-vm /path/to/save/file + xl restore /path/to/save/file + +Xen 4.6 sees the introduction of Migration v2. There is no change for +people using `xl`, although the `libxl` API has had an extension. + +# Technical details + +Migration is formed of several layers. `libxc` is responsible for the +contents of the VM (ram, vcpus, etc) and the live migration loop, while +`libxl` is responsible for items such as emulator state. + +The format of the migration v2 stream is specified in two documents, and +is architecture neutral. Compatibility with legacy streams is +maintained via the `convert-legacy-stream` script which transforms a +legacy stream into a migration v2 stream. + +* Documents + * `docs/specs/libxc-migration-stream.pandoc` + * `docs/specs/libxl-migration-stream.pandoc` +* `libxc` + * `tools/libxc/xc_sr_*.[hc]` +* `libxl` + * `tools/libxl/libxl_stream_{read,write}.c` + * `tools/libxl/libxl_convert_callout.c` +* Scripts + * `tools/python/xen/migration/*.py` + * `tools/python/scripts/convert-legacy-stream` + * `tools/python/scripts/verify-stream-v2` + +## libxl + +With migration v2 support, LIBXL_HAVE_SRM_V2 and LIBXL_HAVE_SRM_V1 +are introduced to indicate support. `domain_restore_params` gains a new +parameter, `stream_version`, which is used to distinguish between legacy and +v2 migration streams, and hence whether legacy conversion is required. + +# Limitations + +Hypervisor logdirty support is incompatible with hardware passthrough, +as IOMMU faults cannot be used to track writes. + +While not a bug in migration specifically, VMs are very sensitive to +changes in cpuid information, and cpuid levelling support currently has +its issues. Extreme care should be taken when migrating VMs between +non-identical CPUs until the cpuid levelling improvements are complete. + +# Testing + +Changes in libxc should be tested with every guest type (32bit PV, 64bit +PV, HVM), while changes in libxl should test HVM guests with both +qemu-traditional and qemu-upstream. + +In general, testing can be done on a single host using `xl +save/restore` or `xl migrate $VM localhost`. + +Any changes to the conversion script should be tested in all upgrade +scenarios, which will involve starting with VMs from Xen 4.5 + +# Areas for improvement + +* Arm support +* Live looping parameters + +# Known issues + +* x86 HVM guest physmap operations (not reflected in logdirty bitmap) +* x86 HVM with PoD pages (attempts to map cause PoD allocations) +* x86 HVM with nested-virt (no relevant information included in the + stream) +* x86 PV ballooning (P2M marked dirty, target frame not marked) +* x86 PV P2M structure changes (not noticed, stale mappings used) for + guests not using the linear p2m layout + +# References + +Xen Developer Summit 2015 Presentation +[video](https://www.youtube.com/watch?v=RwiDeG21lrc) and +[slides](http://events.linuxfoundation.org/sites/events/files/slides/migv2.pdf) +for Migration v2 + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2015-10-24 1 Xen 4.6 Document written +2015-12-11 2 Xen 4.7 Support of linear p2m list +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/qemu-deprivilege.pandoc b/docs/features/qemu-deprivilege.pandoc new file mode 100644 index 0000000000..4ef119c821 --- /dev/null +++ b/docs/features/qemu-deprivilege.pandoc @@ -0,0 +1,136 @@ +% QEMU Deprivileging / dm_restrict +% Revision 1 + +\clearpage + +# Basics + +---------------- ---------------------------------------------------- + Status: **Tech Preview** + +Architecture(s): x86 + + Component(s): toolstack + +---------------- ---------------------------------------------------- + +# Overview + +By default, the QEMU device model is run in domain 0. If an attacker +can gain control of a QEMU process, it could easily take control of a +system. + +dm_restrict is a set of operations to restrict QEMU running in domain +0. It consists of two halves: + + 1. Mechanisms to restrict QEMU to only being able to affect its own +domain + 2. Mechanisms to restruct QEMU's ability to interact with domain 0. + +# User details + +## Getting the right versions of software + +Linux: 4.11+ + +Qemu: 3.0+ (Or the version that comes with Xen 4.12+) + +## Setting up a group and userid range + +For maximum security, libxl needs to run the devicemodel for each +domain under a user id (UID) corresponding to its domain id. There +are 32752 possible domain IDs, and so libxl needs 32752 user ids set +aside for it. Setting up a group for all devicemodels to run at is +also recommended. + +The simplest and most effective way to do this is to allocate a +contiguous block of UIDs, and create a single user named +`xen-qemuuser-range-base` with the first UID. For example, under +Debian: + + adduser --system --uid 131072 --group --no-create-home xen-qemuuser-range-base + +Two comments on this method: + + 1. Most modern systems have 32-bit UIDs, and so can in theory go up +to 2^31 (or 2^32 if uids are unsigned). POSIX only guarantees 16-bit +UIDs however; UID 65535 is reserved for an invalid value, and 65534 is +normally allocated to "nobody". + 2. Additionally, some container systems have proposed using the +upper 16 bits of the uid for a container ID. Using a multiple of 2^16 +for the range base (as is done above) will result in all UIDs being +interpreted by such systems as a single container ID. + +Another, less-secure way is to run all QEMUs as the same UID. To do +this, create a user named `xen-qemuuser-shared`; for example: + + adduser --no-create-home --system xen-qemuuser-shared + +A final way to set up a separate process for qemus is to allocate one +UID per VM, and set the UID in the domain config file with the +`device_model_user` argument. For example, suppose you have a VM +named `c6-01`. You might do the following: + + adduser --system --no-create-home --group xen-qemuuser-c6-01 + +And then in your config file, the following line: + + device_model_user="xen-qemuuser-c6-01" + +If you use this method, you should also allocate one "reaper" user to +be used for killing device models: + + adduser --system --no-create-home --group xen-qemuuser-reaper + +NOTE: It is important when using `device_model_user` that EACH VM HAVE +A SEPARATE UID, and that none of these UIDs map to root. xl will +throw an error a uid maps to zero, but not if multiple VMs have the +same uid. Multiple VMs with the same device model uid will cause +problems. + +It is also important that `xen-qemuuser-reaper` not have any processes +associated with it, as they will be destroyed when deprivileged qemu +processes are destroyed. + +## Domain config changes + +The core domain config change is to add the following line to the +domain configuration: + + dm_restrict=1 + +This will perform a number of restrictions, outlined below in the +'Technical details' section. + +# Technical details + +See docs/design/qemu-deprivilege.md for technical details. + +# Limitations + +The following features still need to be implemented: + +* Inserting a new cdrom while the guest is running (xl cdrom-insert) +* Support for qdisk backends + +A number of restrictions still need to be implemented. A compromised +device model may be able to do the following: + +* Delay or exploit weaknesses in the toolstack +* Launch "fork bombs" or other resource exhaustion attacks +* Make network connections on the management network +* Break out of the restrictions after migration + +Additionally, getting PCI passthrough to work securely would require a +significant rework of how passthrough works at the moment. It may be +implemented at some point but is not a near-term priority. + +See SUPPORT.md for security support status. + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2018-09-14 1 Xen 4.12 Imported from docs/misc +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/sched_credit.pandoc b/docs/features/sched_credit.pandoc new file mode 100644 index 0000000000..706513de6e --- /dev/null +++ b/docs/features/sched_credit.pandoc @@ -0,0 +1,100 @@ +% Credit Scheduler +% Revision 1 + +\clearpage + +# Basics +---------------- ---------------------------------------------------- + Status: **Supported** + + Component: Hypervisor +---------------- ---------------------------------------------------- + +# Overview + +Credit (also known as Credit1) is the old virtual CPU (vCPU) scheduler +of the Xen hypervisor. + +It is a general purpose, weighted fair-share scheduler. + +# User details + +Xen supports multiple schedulers. Credit is no longer the default. In +order to use it as the Xen scheduler the following parameter should be +passed to the hypervisor at boot: + + `sched=credit` + +Once the system is live, for creating a cpupool with Credit as its +scheduler, either compile a cpupool configuration file, as described +in `docs/man/xlcpupool.cfg.pod.5` (and as exemplified in +`tools/examples/cpupool`), or use just `xl` directly: + + xl cpupool-create name=\"pool1\" sched=\"credit\" cpus=[4,8] + +Two kind of interactions with the scheduler are possible: + +* checking or changing the global parameters, via, e.g.: + * `xl sched-credit -s` + * `xl sched-credit -s -p pool1` + * `xl sched-credit -s -t 20` +* checking or changing a VM's scheduling parameters, via, e.g.: + * `xl sched-credit -d vm1` + * `xl sched-credit -d vm1 -w 512` + +# Technical details + +Implementation entirely lives in the hypervisor. Xen has a pluggable, +hook based, architecture for schedulers. Thanks to this, Credit code +is all contained in `xen/common/sched_credit.c`. + +# Limitations + +In Credit, a vCPU has a priority, a status (i.e., active or inactive), +a weight and some credits... and all these things interact in a rather +involved way. Also, with years of use, things have gotten even more +complex (due to, e.g., the introduction of boosting, caps and vCPU +soft-affinity). + +Dealing with such complexity is starting to be an issue. Odd behavior +or subtle scheduling anomalies, that is not always possible to act upon, +have been identified already. [1][2][3] + +A certain lack of scalability and difficulties and weakness in dealing +with mixed workloads and VMs with low latency requirements are other +known problems. [4] For all these reasons, effort is ongoing to have +Credit2 become the new default scheduler. + +# Testing + +Any change to Credit code must to be tested by doing at least the following: + +* create a few virtual machine and verify that they boot and can + run some basic workload (e.g., login into them and run simple commands), +* shutdown/reboot the virtual machines, +* shutdown the system. + +Ideally, all the above steps should **also** be performed in a configuration +that includes cpupools, better if with pools using different schedulers, and +by also doing the following: + +* move the virtual machines between cpupools. + +# References + +* [potential non-ideal behavior on hyperthreaded systems](https://lists.xenproject.org/archives/html/xen-devel/2014-07/msg01848.html) [1] +* [long standing BOOST vs. migration bug](https://lists.xen.org/archives/html/xen-devel/2015-10/msg02851.html) [2] +* [priority handling issues](https://lists.xenproject.org/archives/html/xen-devel/2016-05/msg01362.html) [3] +* "Scheduler development update", XenSummit Asia 2009 [whitepaper](http://www-archive.xenproject.org/files/xensummit_intel09/George_Dunlap.pdf) [4] +* "Scheduling in Xen" [XPDS15 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/Faggioli_XenSummit.pdf) +* "The Credit Scheduler" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Credit_Scheduler) +* "Xen Project Schedulers" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Xen_Project_Schedulers) + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2016-10-14 1 Xen 4.8 Document written +2019-02-7 3 Xen 4.12 No longer default scheduler +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/sched_credit2.pandoc b/docs/features/sched_credit2.pandoc new file mode 100644 index 0000000000..436ff9f8f6 --- /dev/null +++ b/docs/features/sched_credit2.pandoc @@ -0,0 +1,108 @@ +% Credit2 Scheduler +% Revision 2 + +\clearpage + +# Basics +---------------- ---------------------------------------------------- + Status: **Supported** + + Component: Hypervisor +---------------- ---------------------------------------------------- + +# Overview + +Credit2 is the default virtual CPU (vCPU) scheduler available in the +Xen hypervisor. + +Credit2 was designed as a general purpose scheduler, with particular +focus on improving handling of mixed workloads, scalability and +support for low latency applications inside VMs. + +# User details + +Xen supports multiple schedulers. As said, Credit2 is the default, so +it is used automatically, unless the `sched=$SCHED` (with `$SCHED` +different than `credit2`) parameter is passed to Xen via the +bootloader. + +Other parameters are available for tuning the behavior of Credit2 +(see `docs/misc/xen-command-line.markdown` for a complete list and +for their meaning). + +Once the system is live, for creating a cpupool with Credit2 as +its scheduler, either compile a cpupool configuration file, as +described in `docs/man/xlcpupool.cfg.pod.5` (and as exemplified +in `tools/examples/cpupool`), or use just `xl` directly: + + xl cpupool-create name=\"pool1\" sched=\"credit2\" cpus=[1,2] + +Two kind of interactions with the scheduler are possible: + +* checking or changing the global parameters, via, e.g.: + * `xl sched-credit2 -s` + * `xl sched-credit2 -s -p pool1` + * `xl sched-credit2 -s -r 100` +* checking or changing a VM scheduling parameters, via, e.g.: + * `xl sched-credit2 -d vm1` + * `xl sched-credit2 -d vm1 -w 1024` + +# Technical details + +Implementation entirely lives in the hypervisor. Xen has a pluggable, +hook based, architecture for schedulers. Thanks to this, Credit2 code +is all contained in `xen/common/sched_credit2.c`. + +Global scheduling parameters, such as context switching rate +limiting, is only available from Xen 4.8 onward. In libxl, the +LIBXL_HAVE_SCHED_CREDIT2_PARAMS symbol is introduced to +indicate their availability. + +# Testing + +Any change done in Credit2 wants to be tested by doing at least the +following: + +* boot the system with `sched=credit2`, +* create a few virtual machine and verify that they boot and can + run some basic workload (e.g., login into them and run simple commands), +* shutdown/reboot the virtual machines, +* shutdown/reboot the system. + +Ideally, all the above steps should **also** be performed in a configuration +where Credit2 is used as the scheduler of a cpupool, and by also doing the +following: + +* move a virtual machine inside and outside a Credit2 cpupool. + +# Areas for improvement + +* vCPUs' reservations (similar to caps, but providing a vCPU with guarantees + about some pCPU time it will always be able to execute for); +* benchmarking for assessing the best combination of values for the various + parameters (`sched_credit2_migrate_resist`, `credit2_balance_over`, + `credit2_balance_under`) + +# Known issues + +* I/O oriented benchmarks (like network and disk throughput) have given + contradictory and non-conclusive results so far. Need to run more of + those. + +# References + +* "Scheduler development update", XenSummit Asia 2009 [whitepaper](http://www-archive.xenproject.org/files/xensummit_intel09/George_Dunlap.pdf) +* "Scheduling in Xen" [XPDS15 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/Faggioli_XenSummit.pdf) +* "Scope and Performance of Credit-2 Scheduler" [XPDS16 Presentation](http://www.slideshare.net/xen_com_mgr/xpds16-scope-and-performance-of-credit2-scheduler-anshul-makkar-ctirix-systems-uk-ltd) +* "The Credit2 Scheduler" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Credit2_Scheduler_Development) +* "Xen Project Schedulers" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Xen_Project_Schedulers) + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2016-10-14 1 Xen 4.8 Document written +2017-11-6 2 Xen 4.10 Soft-affinity and caps implemented +2019-02-7 3 Xen 4.12 Made the default scheduler +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/sched_rtds.pandoc b/docs/features/sched_rtds.pandoc new file mode 100644 index 0000000000..4ccf704b53 --- /dev/null +++ b/docs/features/sched_rtds.pandoc @@ -0,0 +1,122 @@ +% RTDS Scheduler +% Revision 1 + +\clearpage + +# Basics +---------------- ---------------------------------------------------- + Status: **Experimental** + + Component: Hypervisor +---------------- ---------------------------------------------------- + +# Overview + +RTDS is one of the virtual CPU (vCPU) scheduler available in the Xen +hypervisor. + +RTDS is a real-time scheduler, so its purpose is enabling +**deterministic** scheduling of the virtual machine's vCPUs. It has +been originally developed in the context of the RT-Xen project. + +# User details + +RTDS is not in use by default. In order to use it as the Xen scheduler +the following parameter should be passed to the hypervisor at boot: + + `sched=rtds` + +Once the system is live, for creating a cpupool with RTDS as its +scheduler, either compile a cpupool configuration file, as described +in `docs/man/xlcpupool.cfg.pod.5` (and as exemplified in +`tools/examples/cpupool`), or use just `xl` directly: + + xl cpupool-create name=\"pool-rt\" sched=\"rtds\" cpus=[4,5,6,8] + +For checking or changing a VM's scheduling parameters from xl, do +as follows: + * `xl sched-rtds -d vm-rt -v all` + * `xl sched-rtds -d vm-rt -v all -p 10000 -b 2500` + +It is possible, for a multiple vCPUs VM, to change the parameters of +each vCPU individually: + * `xl sched-rtds -d vm-rt -v 0 -p 20000 -b 10000 -e 1 -v 1 -p 45000 -b 12000 -e 0` + +# Technical details + +Implementation entirely lives in the hypervisor. Xen has a pluggable, +hook based, architecture for schedulers. Thanks to this, RTDS code +is all contained in `xen/common/sched_rtds.c`. + +In libxl, the availability of the RTDS scheduler is advertised by +the presence of the LIBXL_HAVE_SCHED_RTDS symbol. The ability of +specifying different scheduling parameters for each vcpu has been +introduced later, and is available if the following symbols are defined: + * LIBXL_HAVE_VCPU_SCHED_PARAMS, + * LIBXL_HAVE_SCHED_RTDS_VCPU_PARAMS, + * LIBXL_HAVE_SCHED_RTDS_VCPU_EXTRA. + +# Limitations + +RTDS is a special purpose scheduling. This is by design, and not at +all a limitation, but it is certainly something to keep in mind when +thinking about using it. The purpose of the scheduler is enabling +deterministic and statically analyzable behavior (as per the +real-time academic literature), according to the scheduling parameters +assigned to each vCPU. + +Using RTDS a the Xen scheduler, and/or for general purpose workloads +is definitely possible, but the vCPU scheduling parameters (of both +Domain0 and of the various VMs) would probably require tweaking, with +respect to their default values. + +# Testing + +Any change done in RTDS must be tested by doing the following: + +* create a cpupool with RTDS as its scheduler, +* create a few virtual machines a move them in and out of the pool, +* create a few virtual machines, directly inside the pool, and verify + that they boot and can run some basic workload (e.g., login into them + and run simple commands), +* shutdown/reboot the virtual machines, + +The fact that the system boots fine when passing `sched=rtds` to Xen +should also be verified. + +Finally, to check that the scheduler is working properly (although only +at a macroscopic level), the following should be done: + +* create a VM with 1 vCPU and put it in the RTDS cpupool, +* set the scheduling parameters such as it has a 50% reservation, with + `xl sched-rtds -d vm -v all -p 100000 -b 50000`, +* run a CPU-burning process inside the VM (e.g., `yes`), +* check with `xentop` (in Domain0) that the VM is getting no more than + 50% pCPU time. + +# Areas for improvement + +* performance assessment, especially focusing on what level of real-time + behavior the scheduler enables. + +# Known issues + +* OSSTest reports occasional failures on ARM. + +# References + +* "RT-Xen: Real-Time Virtualization" [XPDS14 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/2014_Xen_Developer_Summit_0.pdf) +* "Scheduling in Xen" [XPDS15 Presentation](http://events.linuxfoundation.org/sites/events/files/slides/Faggioli_XenSummit.pdf) +* [RT-Xen Project](https://sites.google.com/site/realtimexen/) +* [RTDS-Based-Scheduler](https://wiki.xenproject.org/wiki/RTDS-Based-Scheduler) +* "The RTDS Scheduler" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/RTDS-Based-Scheduler) +* "Xen Project Schedulers" [on the Xen-Project wiki](https://wiki.xenproject.org/wiki/Xen_Project_Schedulers) + +# History + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +2016-10-14 1 Xen 4.8 Document written +2017-08-31 2 Xen 4.10 Revise for work conserving feature +---------- -------- -------- ------------------------------------------- diff --git a/docs/features/template.pandoc b/docs/features/template.pandoc new file mode 100644 index 0000000000..82881e3d21 --- /dev/null +++ b/docs/features/template.pandoc @@ -0,0 +1,75 @@ +% Template for feature documents +% Revision $N + +\clearpage + +This is a suggested template for formatting of a Xen feature document in +tree. + +The purpose of this document is to provide a concrete support statement +for the feature (indicating its security status), as well as brief user +and technical documentation. + +# Basics + +A table with an overview of the support status and applicability. + +---------------- ---------------------------------------------------- + Status: e.g. **Supported**/**Tech Preview**/**Experimental** + +Architecture(s): e.g. x86, arm + + Component(s): e.g. Hypervisor, toolstack, guest + + Hardware: _where applicable_ +---------------- ---------------------------------------------------- + +# Overview + +A short description the feature, similar to an abstract for a +paper/presentation. + +# User details + +Information for a user attempting to use the feature. Should include +how to enable the feature (is it enabled by default? If not, how to turn +it on?), and how to interact with the feature (typically via `xl`). + +# Technical details + +Information for a developer or power user. Should include where to look +in-tree for detailed documents and code. + +# Limitations + +Information concerning incompatibilities with other features or hardware +combinations. + +# Testing + +Information concerning how to properly test changes affecting this feature. + +# Areas for improvement + +List of enhancements which could be undertaken, e.g. to improve the +feature itself, or improve interaction with other features. + +# Known issues + +List of known issues or bugs. For tech preview or experimental +features, this section must contain the list of items needing fixing for +its status to be upgraded. + +# References + +Relevant external references for this feature. + +# History + +A table of changes to the document, in chronological order. + +------------------------------------------------------------------------ +Date Revision Version Notes +---------- -------- -------- ------------------------------------------- +YYYY-MM-DD N Xen X.Y ... +---------- -------- -------- ------------------------------------------- diff --git a/docs/figs/Makefile b/docs/figs/Makefile new file mode 100644 index 0000000000..e128a4364f --- /dev/null +++ b/docs/figs/Makefile @@ -0,0 +1,15 @@ + +XEN_ROOT=$(CURDIR)/../.. +include $(XEN_ROOT)/Config.mk +-include $(XEN_ROOT)/config/Docs.mk + +TARGETS= network-bridge.png network-basic.png + +all: $(TARGETS) + +%.png: %.fig + $(FIG2DEV) -L png $< >$@.tmp + mv -f $@.tmp $@ + +clean: + rm -f *~ *.png diff --git a/docs/figs/network-basic.fig b/docs/figs/network-basic.fig new file mode 100644 index 0000000000..b343deff9f --- /dev/null +++ b/docs/figs/network-basic.fig @@ -0,0 +1,73 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +0 32 #c0c0c0 +6 4275 5160 6105 6315 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 6090 5175 4290 5175 4290 6075 6090 6075 6090 5175 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 4965 6075 5865 6075 5865 6300 4965 6300 4965 6075 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 6090 5400 5865 5400 5865 5625 6090 5625 +-6 +6 7170 5145 9000 6300 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 7185 5160 8985 5160 8985 6060 7185 6060 7185 5160 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 8310 6060 7410 6060 7410 6285 8310 6285 8310 6060 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 7185 5385 7410 5385 7410 5610 7185 5610 +-6 +6 900 4050 9225 4950 +4 0 0 50 -1 0 16 0.0000 4 195 1335 1170 4860 of the world\001 +4 0 0 50 -1 0 16 0.0000 4 240 1815 1080 4590 interface, to rest\001 +4 0 0 50 -1 0 16 0.0000 4 255 1890 990 4320 Physical network\001 +4 0 0 50 -1 0 16 0.0000 4 255 1485 4050 4860 guest's traffic\001 +4 0 0 50 -1 0 16 0.0000 4 195 1305 4050 4590 backend for\001 +4 0 0 50 -1 0 16 0.0000 4 195 1905 3960 4320 Virtual interface:\001 +4 0 0 50 -1 0 16 0.0000 4 195 1290 7515 4860 Xen drivers\001 +4 0 0 50 -1 0 16 0.0000 4 255 1290 7425 4590 provided by\001 +4 0 0 50 -1 0 16 0.0000 4 195 1905 7155 4320 Virtual interface:\001 +-6 +2 2 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 5 + 660 5160 2460 5160 2460 6060 660 6060 660 5160 +2 2 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 5 + 1785 6060 885 6060 885 6285 1785 6285 1785 6060 +2 1 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 4 + 660 5385 885 5385 900 5625 675 5625 +2 1 0 2 0 29 50 -1 -1 0.000 0 0 7 0 0 3 + 675 6300 675 4950 450 4950 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 7 0 0 2 + 6075 5490 7200 5490 +2 1 0 3 4 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 675 5490 0 5490 +2 1 0 3 4 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 0 2475 0 6525 +2 2 0 1 0 32 100 -1 20 0.000 0 0 7 0 0 5 + 675 2250 9675 2250 9675 6750 675 6750 675 2250 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6300 2925 900 2925 900 6525 6300 6525 6300 2925 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6975 6525 9450 6525 9450 2925 6975 2925 6975 6525 +2 2 0 1 7 7 125 -1 20 0.000 0 0 -1 0 0 5 + -225 2025 9900 2025 9900 6975 -225 6975 -225 2025 +4 0 0 50 -1 18 20 0.0000 4 240 735 1170 5490 ethN\001 +4 0 0 50 -1 18 20 0.0000 4 240 945 4500 5490 vifA.B\001 +4 0 0 50 -1 16 20 0.0000 4 315 1410 4500 5850 e.g. vif4.0\001 +4 0 0 50 -1 16 20 0.0000 4 315 1260 1125 5850 e.g. eth0\001 +4 0 0 50 -1 0 16 1.5708 4 255 1395 225 5400 physical link\001 +4 0 0 50 -1 18 20 0.0000 4 240 735 7875 5490 ethB\001 +4 0 0 50 -1 16 20 0.0000 4 315 1260 7650 5850 e.g. eth0\001 +4 0 0 50 -1 0 20 0.0000 4 300 1995 1530 3870 typically dom0\001 +4 0 0 50 -1 0 20 0.0000 4 285 3330 990 3420 Backend (driver) domain\001 +4 0 0 50 -1 0 20 0.0000 4 300 1785 7155 3420 guest domain\001 +4 0 0 50 -1 0 20 0.0000 4 300 1410 7155 3810 domU e.g.\001 +4 0 0 50 -1 16 20 0.0000 4 240 810 8550 3825 dom4\001 +4 0 0 50 -1 0 20 0.0000 4 300 1320 900 2700 Computer\001 +4 0 0 50 -1 0 16 1.5708 4 195 1350 6750 6210 virtual link\001 diff --git a/docs/figs/network-bridge.fig b/docs/figs/network-bridge.fig new file mode 100644 index 0000000000..63c6ac4b5b --- /dev/null +++ b/docs/figs/network-bridge.fig @@ -0,0 +1,125 @@ +#FIG 3.2 Produced by xfig version 3.2.5b +Landscape +Center +Metric +A4 +100.00 +Single +-2 +1200 2 +0 32 #ffc3ff +0 33 #c0c0c0 +6 -225 3825 2475 8325 +2 2 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 5 + 660 6735 2460 6735 2460 7635 660 7635 660 6735 +2 2 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 5 + 1785 7635 885 7635 885 7860 1785 7860 1785 7635 +2 1 0 2 0 29 50 -1 20 0.000 0 0 7 0 0 4 + 660 6960 885 6960 900 7200 675 7200 +2 1 0 2 0 29 50 -1 -1 0.000 0 0 7 0 0 3 + 675 7875 675 6525 450 6525 +2 1 0 3 4 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 675 7065 0 7065 +2 1 0 3 4 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 0 4050 0 8100 +4 0 0 50 -1 18 20 0.0000 4 240 675 1170 7065 eth0\001 +-6 +6 1936 4020 3149 5850 +2 2 0 2 0 32 50 -1 19 0.000 0 0 7 0 0 5 + 1951 5835 1951 4035 2898 4035 2898 5835 1951 5835 +2 2 0 2 0 32 50 -1 19 0.000 0 0 7 0 0 5 + 2898 4710 2898 5610 3134 5610 3134 4710 2898 4710 +2 1 0 2 0 32 50 -1 19 0.000 0 0 7 0 0 4 + 2187 5835 2187 5610 2424 5610 2424 5835 +-6 +6 4275 5160 6105 6315 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 6090 5175 4290 5175 4290 6075 6090 6075 6090 5175 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 4965 6075 5865 6075 5865 6300 4965 6300 4965 6075 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 6090 5400 5865 5400 5865 5625 6090 5625 +-6 +6 7170 5145 9000 6300 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 7185 5160 8985 5160 8985 6060 7185 6060 7185 5160 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 8310 6060 7410 6060 7410 6285 8310 6285 8310 6060 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 7185 5385 7410 5385 7410 5610 7185 5610 +-6 +6 4275 7815 6105 8970 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 6090 7830 4290 7830 4290 8730 6090 8730 6090 7830 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 4965 8730 5865 8730 5865 8955 4965 8955 4965 8730 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 6090 8055 5865 8055 5865 8280 6090 8280 +-6 +6 7170 7800 9000 8955 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 7185 7815 8985 7815 8985 8715 7185 8715 7185 7815 +2 2 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 5 + 8310 8715 7410 8715 7410 8940 8310 8940 8310 8715 +2 1 0 2 0 11 50 -1 28 0.000 0 0 7 0 0 4 + 7185 8040 7410 8040 7410 8265 7185 8265 +-6 +6 6975 6750 9450 9225 +6 6975 6750 9450 9225 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6975 9225 9450 9225 9450 6750 6975 6750 6975 9225 +4 0 0 50 -1 0 20 0.0000 4 270 705 7200 7200 guest\001 +4 0 0 50 -1 16 20 0.0000 4 240 810 8100 7200 dom7\001 +4 0 0 50 -1 16 20 0.0000 4 225 2070 7200 7650 198.51.100.32\001 +-6 +-6 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 4275 5625 3375 5625 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 4275 8325 3375 8325 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 3375 7200 2475 7200 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 -1 0 0 2 + 3375 9000 3375 5220 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 -1 0 0 3 + 2250 5850 2250 6300 3375 6300 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6300 2925 900 2925 900 9450 6300 9450 6300 2925 +2 2 0 1 0 33 100 -1 20 0.000 0 0 7 0 0 5 + 675 2250 9675 2250 9675 9675 675 9675 675 2250 +2 2 0 1 7 7 125 -1 20 0.000 0 0 7 0 0 5 + -225 9900 9900 9900 9900 2025 -225 2025 -225 9900 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 7 0 0 2 + 6075 5490 7200 5490 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6975 6525 9450 6525 9450 2925 6975 2925 6975 6525 +2 1 0 3 1 29 50 -1 -1 0.000 0 0 7 0 0 2 + 6075 8145 7200 8145 +2 2 0 1 0 7 70 -1 20 0.000 0 0 7 0 0 5 + 6975 6525 9450 6525 9450 5580 6975 5580 6975 6525 +2 2 0 1 0 29 50 -1 -1 0.000 0 0 -1 0 0 5 + 1395 4230 5670 4230 5670 9180 1395 9180 1395 4230 +4 0 0 50 -1 0 16 1.5708 4 255 1395 225 5400 physical link\001 +4 0 0 50 -1 0 20 0.0000 4 300 1320 900 2700 Computer\001 +4 0 0 50 -1 0 20 0.0000 4 285 3330 990 3420 Backend (driver) domain\001 +4 0 0 50 -1 0 16 1.5708 4 195 1515 3690 7560 virtual switch\001 +4 0 0 50 -1 16 20 0.0000 4 225 1890 1440 3960 198.51.100.1\001 +4 0 0 50 -1 18 20 1.5708 4 240 1095 2250 5400 xenbr0\001 +4 0 0 50 -1 0 16 1.5708 4 255 1185 2520 5490 O/S bridge\001 +4 0 0 50 -1 0 16 1.5708 4 195 990 2790 5310 interface\001 +4 0 0 50 -1 0 20 0.0000 4 300 840 4680 4590 bridge\001 +4 0 0 50 -1 0 20 0.0000 4 225 1185 3330 4590 Software\001 +4 0 0 50 -1 0 20 0.0000 4 300 1785 7155 3420 guest domain\001 +4 0 0 50 -1 0 20 0.0000 4 300 1410 7155 3810 domU e.g.\001 +4 0 0 50 -1 16 20 0.0000 4 240 810 8550 3825 dom4\001 +4 0 0 50 -1 18 20 0.0000 4 240 825 4500 5490 vif4.0\001 +4 0 0 50 -1 18 20 0.0000 4 240 675 7875 5490 eth0\001 +4 0 0 50 -1 16 20 0.0000 4 225 2070 7200 4950 198.51.100.27\001 +4 0 0 50 -1 0 16 0.0000 4 255 1080 4500 5850 (netback)\001 +4 0 0 50 -1 0 16 0.0000 4 255 1140 7560 5850 (netfront)\001 +4 0 0 50 -1 0 16 1.5708 4 195 1350 6750 6210 virtual link\001 +4 0 0 50 -1 0 16 0.0000 4 255 1080 4500 8505 (netback)\001 +4 0 0 50 -1 0 16 0.0000 4 255 1140 7560 8505 (netfront)\001 +4 0 0 50 -1 0 16 1.5708 4 195 1350 6750 8865 virtual link\001 +4 0 0 50 -1 18 20 0.0000 4 240 825 4500 8190 vif7.0\001 +4 0 0 50 -1 18 20 0.0000 4 240 675 7830 8190 eth0\001 diff --git a/docs/figs/xenlogo.eps b/docs/figs/xenlogo.eps new file mode 100644 index 0000000000..aa5f2f99dc --- /dev/null +++ b/docs/figs/xenlogo.eps @@ -0,0 +1,1479 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: (ImageMagick) +%%Title: (/homes/kaf24/xenlogo.eps) +%%CreationDate: (Tue Oct 28 13:52:11 2003) +%%BoundingBox: 155 324 445 461 +%%DocumentData: Clean7Bit +%%LanguageLevel: 1 +%%Pages: 1 +%%EndComments + +%%BeginDefaults +%%EndDefaults + +%%BeginProlog +% +% Display a color image. The image is displayed in color on +% Postscript viewers or printers that support color, otherwise +% it is displayed as grayscale. +% +/DirectClassPacket +{ + % + % Get a DirectClass packet. + % + % Parameters: + % red. + % green. + % blue. + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/DirectClassImage +{ + % + % Display a DirectClass image. + % + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { DirectClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayDirectClassPacket } image + } ifelse +} bind def + +/GrayDirectClassPacket +{ + % + % Get a DirectClass packet; convert to grayscale. + % + % Parameters: + % red + % green + % blue + % length: number of pixels minus one of this color (optional). + % + currentfile color_packet readhexstring pop pop + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/GrayPseudoClassPacket +{ + % + % Get a PseudoClass packet; convert to grayscale. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + color_packet 0 get 0.299 mul + color_packet 1 get 0.587 mul add + color_packet 2 get 0.114 mul add + cvi + /gray_packet exch def + compression 0 eq + { + /number_pixels 1 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add def + } ifelse + 0 1 number_pixels 1 sub + { + pixels exch gray_packet put + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassPacket +{ + % + % Get a PseudoClass packet. + % + % Parameters: + % index: index into the colormap. + % length: number of pixels minus one of this color (optional). + % + currentfile byte readhexstring pop 0 get + /offset exch 3 mul def + /color_packet colormap offset 3 getinterval def + compression 0 eq + { + /number_pixels 3 def + } + { + currentfile byte readhexstring pop 0 get + /number_pixels exch 1 add 3 mul def + } ifelse + 0 3 number_pixels 1 sub + { + pixels exch color_packet putinterval + } for + pixels 0 number_pixels getinterval +} bind def + +/PseudoClassImage +{ + % + % Display a PseudoClass image. + % + % Parameters: + % class: 0-PseudoClass or 1-Grayscale. + % + currentfile buffer readline pop + token pop /class exch def pop + class 0 gt + { + currentfile buffer readline pop + token pop /depth exch def pop + /grays columns 8 add depth sub depth mul 8 idiv string def + columns rows depth + [ + columns 0 0 + rows neg 0 rows + ] + { currentfile grays readhexstring pop } image + } + { + % + % Parameters: + % colors: number of colors in the colormap. + % colormap: red, green, blue color packets. + % + currentfile buffer readline pop + token pop /colors exch def pop + /colors colors 3 mul def + /colormap colors string def + currentfile colormap readhexstring pop pop + systemdict /colorimage known + { + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { PseudoClassPacket } false 3 colorimage + } + { + % + % No colorimage operator; convert to grayscale. + % + columns rows 8 + [ + columns 0 0 + rows neg 0 rows + ] + { GrayPseudoClassPacket } image + } ifelse + } ifelse +} bind def + +/DisplayImage +{ + % + % Display a DirectClass or PseudoClass image. + % + % Parameters: + % x & y translation. + % x & y scale. + % label pointsize. + % image label. + % image columns & rows. + % class: 0-DirectClass or 1-PseudoClass. + % compression: 0-none or 1-RunlengthEncoded. + % hex color packets. + % + gsave + /buffer 512 string def + /byte 1 string def + /color_packet 3 string def + /pixels 768 string def + + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + x y translate + currentfile buffer readline pop + token pop /x exch def + token pop /y exch def pop + currentfile buffer readline pop + token pop /pointsize exch def pop + /Times-Roman findfont pointsize scalefont setfont + x y scale + currentfile buffer readline pop + token pop /columns exch def + token pop /rows exch def pop + currentfile buffer readline pop + token pop /class exch def pop + currentfile buffer readline pop + token pop /compression exch def pop + class 0 gt { PseudoClassImage } { DirectClassImage } ifelse + grestore +} bind def +%%EndProlog +%%Page: 1 1 +%%PageBoundingBox: 155 324 445 461 +userdict begin +DisplayImage +155 324 +289.992 137.145 +12.000000 +302 143 +1 +1 +1 +8 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e6 +d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +aabccee6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6ceecffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +aac8ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e0 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffcea49e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb6bac4c8c8d6d6d6d6d6d6 +d6cfc8c8bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9ebcf8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8b6c4 +cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ed4ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6c8af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cf +b39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bdd6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfaf9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4 +daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9eb3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffda9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9ea4f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +c8a19e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e +9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffff8b09e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2a89e9e9e9e +9e9e9e9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e +9ec1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d2a89e9e9e9e9e9e9e9e9e9e9e9e9e9e9eecffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda9e +9e9e8027272727272727272727272b353535353535353535353535353535353535353535 +353535353535add6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c85035353535353535322727272727272727272727 +272727272d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f5fefffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff2a49e9e9e9e45000000000000000000000000000000000000 +00000000000000000000000000000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00003fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e27000000 +000000000000000000000000000000000000000000000000000000000000000000000050 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6930d0000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffd49e9e9e9e9e9e9e9413000000000000000000000000000000000000000000000000 +000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b0000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000fbfffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff8a49e9e9e9e9e9e9e9e8009000000000000000000 +000000000000000000000000000000000000000000000000000000000dadd6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000002fdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e +9e9e9e9e6200000000000000000000000000000000000000000000000000000000000000 +0000000000000028c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000006fffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e4500000000000000000000000000000000 +0000000000000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000fafffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9e9e9e2b00 +000000000000000000000000000000000000000000000000000000000000000000000000 +0085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000002fcfffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09e9e +9e9e9e9e9e9e9e9e9e9e9ea8c81a00000000000000000000000000000000000000000000 +0000000000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6c83500000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000005fefffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffaa9e9e9e9e9e9e9e9e9e9e9e9e9ecbd6ad0d00000000000000 +00000000000000000000000000000000000000000000000000000000000028d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000009fffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e +9e9ebad6d6d6850000000000000000000000000000000000000000000000000000000000 +0000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d685 +0d0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001fcfffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffaa9e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d65d0000000000000000000000000000 +00000000000000000000000000000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000049efffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6 +350000000000000000000000000000000000000000000000000000000000000000000000 +00000dbbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c83500000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000004faa +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb69e9e9e9e9e9e +9e9e9e9e9e9eacd6d6d6d6d6d6d6c81a0000000000000000000000000000000000000000 +000000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6ad1a000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000009769e9ee0ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff29e9e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6ad0d0000000000 +00000000000000000000000000000000000000000000000000000000000000005dd6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000001d949e9e9eb6ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9eb3d6d6 +d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000 +000000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +459e9e9e9e9e9ef2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa49e +9e9e9e9e9e9e9e9e9e9e9ecfd6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000 +000000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6 +d6d6d6c83500000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000096c9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6 +d6d635000000000000000000000000000000000000000000000000000000000000000000 +0000000035d6d6d6d6d6d6d6d6d6d6d6ad1a000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000001d8a9e9e9e9e9e9e9e9eaa +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e +9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6c81a000000000000000000000000000000000000 +000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6850d0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00003b949e9e9e9e9e9e9e9e9e9ee0ffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffff89e9e9e9e9e9e9e9e9e9e9e9ea5d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000 +00000000000000000000000000000000000000000000000000000000000000000000a0d6 +d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000d7b9e9e9e9e9e9e9e9e9e9e9e9ec2ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000000000000000 +0000000000000000000000000dc8d6d6d6d6c83500000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000001aadd6a59e9e9e9e9e +9e9e9e9e9e9ea4ffffffffffffffdfbf8f7f5f3f3f1f0000000000000000000000000000 +001f3f3f5f7f8fbfcfffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc9e9e9e9e9e +9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000000000000000 +00000000000000000000000000000000000000000000000000000035d6d6d6ad0d000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000042c8d6d6bd9e9e9e9e9e9e9e9e9e9e9e9ee6ffcf9f5f3f000000000000000000 +0000000000000000000000000000000000000000000000002f5f8fcfffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf8f7f +3f3f0f000000000000000000003f3f7f9fdfffffffffffffffffffffffffffffffffffff +ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d62800000000000000000000000000000000000000000000000000000000000000 +0000000000006bd685000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000078d6d6d6d6cf9e9e9e9e9e9e9e9e9e9e9e6c47 +1f0000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000f4f9fdfffffffffffffffffffffffffffffffffffffffffffffffffffff +ffbf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3fefffffffffff +ffffffffffffffaf6f2f000000000000000000000000000000000000000000001f6fcfff +ffffffffffffffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000000000000000 +000000000000000000000000000000000000000000350000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000da0d6d6d6d6d6 +d6a89e9e9e9e9e9e9e763b09000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000004f9fffffffffffffffffffff +ffffffffffffffffffffffffffffff6f0000000000000000000000000000000000000000 +000000000000001fffffffffffffffffffff9f4f00000000000000000000000000000000 +000000000000000000000000003fafffffffffffffffffffffffffffffffffffffffffce +9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad0000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000035c8d6d6d6d6d6d6d6bd9e9e9e9e94621300000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000f7fefffffffffffffffffffffffffffffffffffffffffffff3f000000000000 +0000000000000000000000000000000000000000004fffffffffffffffdf6f0f00000000 +00000000000000000000000000000000000000000000000000000000003fdfffffffffff +ffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000005dd6d6d6d6d6d6d6d6d6cf9e9e944f0900 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000f8fffffffffffffffffffffffffffff +ffffffffffffff000000000000000000000000000000000000000000000000000000008f +ffffffffffdf5f0000000000000000000000000000000000000000000000000000000000 +00000000000000000f9fffffffffffffffffffffffffffffffffff9e9e9e9e9e9e9e9e9e +9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000d93d6d6d6 +d6d6d6d6d6d6d6d69b4f0900000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +2fcfffffffffffffffffffffffffffffffffffffbf000000000000000000000000000000 +00000000000000000000000000bfffffffef5f0000000000000000000000000000000000 +0000000000000000000000000000000000000000000000009fffffffffffffffffffffff +ffffffffe69e9e9e9e9e9e9e9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6280000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000028bbd6d6d6d6d6d6d6d6d6d6d6850d00000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000f9fffffffffffffffffffffffffffffffffff8f00 +000000000000000000000000000000000000000000000000000000ffffff8f0f00000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000009fffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d0000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6ad3500 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000006fffffffff +ffffffffffffffffffffffff5f0000000000000000000000000000000000000000000000 +000000003fffef3f00000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000bfffffffffffffffffffffffffffc89e9e9e +9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000d85d6 +d6d6d6d6d6d6d6d6d6d66b00000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000005fffffffffffffffffffffffffffffff1f000000000000000000 +0000000000000000000000000000000000006fbf0f000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001fffffff +ffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000028add6d6d6d6d6d6d6d6d6d6c835000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000005fffffffffffffffffffff +ffffffef000000000000000000000000000000000000000000000000000000003f000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000009fffffffffffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9e +c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d650000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6ad +0d0000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000007fffffffffffffffffffffffffaf000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000002fffffffffffffffffffff +ffff9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d628000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +78d6d6d6d6d6d6d6d6d6d6d6850000000000000000000000000000000000000000000000 +000000000000000000000000001f3f3f3f3f3f3f00000000000000000000000000000000 +00000000000000000000000000000000000000bfffffffffffffffffffffff7f00000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000dfffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000dadd6d6d6d6d6d6d6d6d6d6d68500000000000000000000 +00000000000000000000000000000000000000000000000f5fafefffffffffffffffffcf +8f2f000000000000000000000000000000000000000000000000000000000000001fefff +ffffffffffffffffff3f0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000bfffffffffffffffffffffe69e9e9e9e9e9e +9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6ad00000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000035c8d6d6d6d6d6d6d6d6d6 +d6d68500000000000000000000000000000000000000000000000000000000000000001f +9fffffffffffffffffffffffffffffffbf3f000000000000000000000000000000000000 +0000000000000000000000007fffffffffffffffffffff0f000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000009fffffff +ffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00006bd6d6d6d6d6d6d6d6d6d6d6d6930000000000000000000000000000000000000000 +00000000000000000000000f8fffffffffffffffffffffffffffffffffffffff8f000000 +00000000000000000000000000000000000000000000000000000fefffffffffffffffff +cf0000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000008fffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6ad0d000000000000 +0000000000000000000000000000000000000000000000002fdfffffffffffffffffffff +ffffffffffffffffffffff9f000000000000000000000000000000000000000000000000 +00000000008fffffffffffffffff9f000000000000000000000000000000000000000000 +00000000000000000000000000000000000000003f3f3f3f3f0f00000000000000000000 +000000000000000000000000000000000000000000000000bfffffffffffffffffffffce +9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d62800000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000028bbd6d6d6d6d6d6d6 +d6d6d6d6d6c81a0000000000000000000000000000000000000000000000000000000000 +005fefffffffffffffffffffffffffffffffffffffffffffffff3f000000000000000000 +000000000000000000000000000000000000002fffffffffffffffff5f00000000000000 +0000000000000000000000000000000000000000000000000000000000001f6fcfffffff +ffffffffaf2f000000000000000000000000000000000000000000000000000000000000 +0000bfffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c80d00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000000000000000000000000000 +00000000000000000000000000005fffffffffffffffffffffffffffffffffffffffffff +ffffffffaf0000000000000000000000000000000000000000000000000000000000efff +ffffffffffff2f0000000000000000000000000000000000000000000000000000000000 +0000000000000f9fffffffffffffffffffffffef2f000000000000000000000000000000 +00000000000000000000000000000000cfffffffffffffffffffffb69e9e9e9e9e9e9e9e +9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6ad0000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d693000000 +0000000000000000000000000000000000000000000000000000002fefffffffffffffff +ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000 +000000000000000000000000bfffffffffffffff00000000000000000000000000000000 +000000000000000000000000000000000000004fefffffffffffffffffffffffffffaf00 +000000000000000000000000000000000000000000000000000000000000ffffffffffff +ffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000028add6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d61a00000000000000000000000000000000000000000000000000 +000000000fcfffffffffffffffffffffffffffffffffffffffffffffffffffffff1f0000 +00000000000000000000000000000000000000000000000000007fffffffffffffbf0000 +00000000000000000000000000000000000000000000000000000000000000008fffffff +ffffffffffffffffffffffffff0000000000000000000000000000000000000000000000 +000000000000001fffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b000000000000000000000000 +0000000000000000000000000000000000007fffffffffffffffffffffffffffffffffff +ffffffffffffffffffffff1f000000000000000000000000000000000000000000000000 +000000007fffffffffffff7f000000000000000000000000000000000000000000000000 +0000000000000000009fffffffffffffffffffffffffffffffffff000000000000000000 +0000000000000000000000000000000000000000003fffffffffffffffffffffffb69e9e +9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000078d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d60d00000000000000000000000000000000000000000000000000000000001fffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000 +0000000000000000000000000000000000004fffffffffffff4f00000000000000000000 +000000000000000000000000000000000000000000006fffffffffffffffffffffffffff +ffffffffff0000000000000000000000000000000000000000000000000000000000007f +ffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8500000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000001aadd6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d685000000000000000000000000000000000000000000 +0000000000000000009fffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffbf00000000000000000000000000000000000000000000000000000000003fffffff +ffffff0f000000000000000000000000000000000000000000000000000000000000003f +ffffffffffffffffffffffffffffffffffffcf0000000000000000000000000000000000 +00000000000000000000000000afffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e +9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad2800 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000001ac8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d62800000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000007fffffffffffdf00000000000000000000000000000000000000 +0000000000000000000000000fdfffffffffffffffffffffffffffffffffffffaf000000 +000000000000000000000000000000000000000000000000000000cfffffffffffffffff +ffffffb69e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6930d000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000a0d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6bb000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000007fffffffffffaf0000000000 +00000000000000000000000000000000000000000000000000007fffffffffffffffffff +ffffffffffffffffffff7f00000000000000000000000000000000000000000000000000 +0000000000ffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d65d000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000dc8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68500000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000afffffffffff6f000000000000000000000000000000000000000000000000000000 +0000000fefffffffffffffffffffffffffffffffffffffff3f0000000000000000000000 +0000000000000000000000000000000000003fffffffffffffffffffffffffce9e9e9e9e +9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8 +280000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000028d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6500000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000cfffffffffff3f00000000000000000000000000 +00000000000000000000000000000000007fffffffffffffffffffffffffffffffffffff +ffff0f00000000000000000000000000000000000000000000000000000000007fffffff +ffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9ebad6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6a00d00000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000005dd6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000ffffffffffff +00000000000000000000000000000000000000000000000000000000000000dfffffffff +ffffffffffffffffffffffffffffffdf0000000000000000000000000000000000000000 +00000000000000000000afffffffffffffffffffffffffce9e9e9e9e9e9e9e9e9e9e9eac +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d66b00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000093d6d6d6d6d6d6d6d6d6d6d6d6d6d60000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000003fffffffffffbf00000000000000000000000000000000000000000000 +00000000000000004fffffffffffffffffffffffffffffffffffffffffaf000000000000 +000000000000000000000000000000000000000000000000dfffffffffffffffffffffff +ffe69e9e9e9e9e9e9e9e9e9e9eacd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6c835000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000dbbd6d6d6d6d6d6d6d6d6d6 +d6d6d6000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000006fffffffffff8f0000000000000000 +000000000000000000000000000000000000000000009fffffffffffffffffffffffffff +ffffffffffffff7f00000000000000000000000000000000000000000000000000000000 +000fffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ed6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad1a0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000028c8d6d6d6d6d6d6d6d6d6d6d6d600000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000af +ffffffffff5f000000000000000000000000000000000000000000000000000000000000 +efffffffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000 +0000000000000000000000000000004fffffffffffffffffffffffffffff9e9e9e9e9e9e +9e9e9e9e9e9ed2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6780000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000050d6d6d6d6d6d6d6d6d6d6d6d60000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000dfffffffffff1f00000000000000000000000000000000 +000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffff0f +00000000000000000000000000000000000000000000000000000000007fffffffffffff +ffffffffffffffffa49e9e9e9e9e9e9e9e9e9e9ec8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6c85000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000085d6d6 +d6d6d6d6d6d6d6d6d6000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000001fffffffffffef000000 +0000000000000000000000000000000000000000000000000000006fffffffffffffffff +ffffffffffffffffffffffffdf0000000000000000000000000000000000000000000000 +00000000000000bfffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9ebad6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad28000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000dadd6d6d6d6d6d6d6d6d6d600000000000000000000000000 +0000000000000000000000000000000027737f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f9fffffffffffaf00000000000000000000000000000000000000000000000000 +00000000009fffffffffffffffffffffffffffffffffffffffff9f000000000000000000 +000000000000000000000000000000000000000000efffffffffffffffffffffffffffff +c89e9e9e9e9e9e9e9e9e9e9eafd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6850d0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6d6 +d60d000000000000000000000000000000000000000000000000000000003becffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000 +00000000000000000000000000000000000000cfffffffffffffffffffffffffffffffff +ffffffff6f00000000000000000000000000000000000000000000000000000000002fff +ffffffffffffffffffffffffffffd49e9e9e9e9e9e9e9e9e9e9ea1d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d65d0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000050d6d6d6d6d6d6d6d6d6350000000000000000000000000000000000000000 +00000000000000001dffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffff3f00000000000000000000000000000000000000000000000000000000000fffffff +ffffffffffffffffffffffffffffffffffff3f0000000000000000000000000000000000 +0000000000000000000000005fffffffffffffffffffffffffffffffe69e9e9e9e9e9e9e +9e9e9e9e9ecbd6d6d6d6d6d6d6d6d6d6d6d6bb2800000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000078d6d6d6d6d6d6d6d66b000000000000 +0000000000000000000000000000000000000000000000dfffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff0f00000000000000000000000000000000000000 +000000000000000000003fffffffffffffffffffffffffffffffffffffffffff00000000 +00000000000000000000000000000000000000000000000000008fffffffffffffffffff +ffffffffffffff9e9e9e9e9e9e9e9e9e9e9e9ebdd6d6d6d6d6d6d6d6d6d6d6a00d000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000ad +d6d6d6d6d6d6d6a000000000000000000000000000000000000000000000000000000000 +006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf000000000000 +0000000000000000000000000000000000000000000000007fffffffffffffffffffffff +ffffffffffffffffffbf0000000000000000000000000000000000000000000000000000 +00000000cfffffffffffffffffffffffffffffffffb69e9e9e9e9e9e9e9e9e9e9eafd6d6 +d6d6d6d6d6d6d6d66b000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000001ac8d6d6d6d6d6d6d60d00000000000000000000000000 +0000000000000000000000000000000fdfffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffff9f00000000000000000000000000000000000000000000000000000000 +0000bfffffffffffffffffffffffffffffffffffffffff8f000000000000000000000000 +000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffce +9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6d6d6d6d6d6c8350000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000042d6d6d6d6d6d6d6 +6b00000000000000000000000000000000000000000000000000000000003fffffffffff +ffffffffffffffffffffffffffffffffffffffcf3f3f3f3f5f7f7f7fafbfbfbfffffffff +ffffffffffffffffffffffffffffffffffffffffff5f0000000000000000000000000000 +00000000000000000000000000000000efffffffffffffffffffffffffffffffffffffff +ff5f00000000000000000000000000000000000000000000000000000000003fffffffff +ffffffffffffffffffffffffffe69e9e9e9e9e9e9e9e9e9e9e9ec1d6d6d6d6d6d6ad0d00 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000006bd6d6d6d6d6d6bb000000000000000000000000000000000000000000 +0000000000000000005fffffffffffffffffffffffffffffffffffffffffffffaf0f0000 +000000000000000000000000000f3f3f3f5f7f7f7fafbfbfbfffffffffffffffffffff2f +00000000000000000000000000000000000000000000000000000000001fffffffffffff +ffffffffffffffffffffffffffffff1f0000000000000000000000000000000000000000 +0000000000000000006fffffffffffffffffffffffffffffffffffffa49e9e9e9e9e9e9e +9e9e9e9eafd6d6d6d6d67800000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000005d35000000000000000000000000000000 +00000000000000000000000000000000000000000000a0d6d6d6d6d6d65d000000000000 +0000000000000000000000000000000000000000000000004fefffffffffffffffffffff +ffffffffffffffffdf4f0000000000000000000000000000000000000000000000000000 +00000000003fffffffffffffff0000000000000000000000000000000000000000000000 +000000000000005fffffffffffffffffffffffffffffffffffffffffef00000000000000 +0000000000000000000000000000000000000000000000afffffffffffffffffffffffff +ffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e9ed2d6d6c842000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000085d6c80d +000000000000000000000000000000000000000000000000000000000000000000000000 +0dc8d6d6d6d6d6c80d000000000000000000000000000000000000000000000000000000 +0000000f7fefffffffffffffffffffffffffffffcf5f0000000000000000000000000000 +0000000000000000000000000000000000002fefffffffffffffbf000000000000000000 +0000000000000000000000000000000000000000008fffffffffffffffffffffffffffff +ffffffffffffbf0000000000000000000000000000000000000000000000000000000000 +00dfffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e9ebdd6ad +280000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000dadd6d6d69300000000000000000000000000000000000000000000 +00000000000000000000000000000035d6d6d6d6d6d69300000000000000000000000000 +000000000000000000000000000000000000000f4f8fbfffffffffffffffbf9f6f1f0000 +000000000000000000000000000000000000000000000000000000000000000fefffffff +ffffffff7f000000000000000000000000000000000000000000000000000000000000cf +ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000 +00000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff89e +9e9e9e9e9e9e9e9e9e9e9ea5850d00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000028c8d6d6d6d6d64200000000000000 +0000000000000000000000000000000000000000000000000000000000005dd6d6d6d6d6 +d65d00000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000fcfffffffffffffffff4f0000000000000000000000000000000000 +00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff3f00 +000000000000000000000000000000000000000000000000000000004fffffffffffffff +ffffffffffffffffffffffffffbc9e9e9e9e9e9e9e9e9e9e9e3b00000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000050d6 +d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000000000 +00000000000000000093d6d6d6d6d6d65000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000002fdfffffffffffffffffff0f000000 +00000000000000000000000000000000000000000000000000003fffffffffffffffffff +ffffffffffffffffffffffff0f0000000000000000000000000000000000000000000000 +0000000000007fffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e +9e8a1d000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000078d6d6d6d6d6d6d6d6d6a00000000000000000000000000000 +00000000000000000000000000000000000000000000000dbbd6d6d6d6d6c82800000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000003fef +ffffffffffffffffffdf0000000000000000000000000000000000000000000000000000 +000000006fffffffffffffffffffffffffffffffffffffffffdf00000000000000000000 +0000000000000000000000000000000000000000bfffffffffffffffffffffffffffffff +ffffffffffffa49e9e9e9e9e9e9e6c090000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000da0d6d6d6d6d6d6d6d6d6d6d6 +5d0000000000000000000000000000000000000000000000000000000000000000000000 +000028d6d6d6d6d6d6c85000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000006fffffffffffffffffffffffaf000000000000000000000000 +000000000000000000000000000000000000afffffffffffffffffffffffffffffffffff +ffffff9f000000000000000000000000000000000000000000000000000000000000efff +ffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e450000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +28add6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000000000 +00000000000000000000000000000000005dd6d6d6d6d6d6d65d00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000fbfffffffffffffffffffffff +ff6f000000000000000000000000000000000000000000000000000000000000dfffffff +ffffffffffffffffffffffffffffffffff6f000000000000000000000000000000000000 +00000000000000000000002ffffffffffffffffffffffffffffffffffffffffffffff29e +9e9e9e942700000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000042c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000000000 +000000000000000000000000000000000000000000000000000000000000000085d6d6d6 +d6d6d6d6850d000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +6fefffffffffffffffffffffffffff3f0000000000000000000000000000000000000000 +0000000000000000001fffffffffffffffffffffffffffffffffffffffffff3f00000000 +000000000000000000000000000000000000000000000000005fffffffffffffffffffff +ffffffffffffffffffffffffffb69e9e7609000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000006bd6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000000000 +000000000000000000000dadd6d6d6d6d6d6d6bb35000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000003fcfffffffffffffffffffffffffffffff00000000000000 +00000000000000000000000000000000000000000000004fffffffffffffffffffffffff +ffffffffffffffffff000000000000000000000000000000000000000000000000000000 +0000008fffffffffffffffffffffffffffffffffffffffffffffffe69e58000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +00000d85d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000000000 +0000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6d6ac6c +130000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000003fbfffffffffffffffffffff +ffffffffffffbf0000000000000000000000000000000000000000000000000000000000 +007fffffffffffffffffffffffffffffffffffffffffbf00000000000000000000000000 +0000000000000000000000000000000000bfffffffffffffffffffffffffffffffffffff +ffffffffffef310000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6bb0d000000000000000000000000000000000000000000000000000000000000000000 +0000000050d6d6d6d6d6d6c49e9e9e6c2700000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000f +6fdfffffffffffffffffffffffffffffffffffff8f000000000000000000000000000000 +000000000000000000000000000000bfffffffffffffffffffffffffffffffffffffffff +8f000000000000000000000000000000000000000000000000000000000000ffffffffff +ffffffffffffffffffffffffffffffffffffcf1f00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000028c8d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000000000 +0000000000000000000000000000000000000085d6d6d6d6d2a59e9e9e9e9e8a45130000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000f5fafffffffffffffffffffffffffffffffffffffffffff5f00 +0000000000000000000000000000000000000000000000000000000000ffffffffffffff +ffffffffffffffffffffffffffff5f000000000000000000000000000000000000000000 +00000000000000003fffffffffffffffffffffffffffffffffffffffffffff9f0f000000 +000000000000000000000000000000000000000000000000000000000000000000000000 +000000000050d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200000000 +00000000000000000000000000000000000000000000000000000000000000000000add6 +d6d6b69e9e9e9e9e9e9e9e9e805831090000000000000000000000000000000000000000 +00000000000000000000000000000000000000000f4f8fcfffffffffffffffffffffffff +ffffffffffffffffffffffff1f0000000000000000000000000000000000000000000000 +0000000000002fffffffffffffffffffffffffffffffffffffffffff1f00000000000000 +000000000000000000000000000000000000000000006fffffffffffffffffffffffffff +ffffffffffffffef5f000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6c81a00000000000000000000000000000000000000000000000000 +0000000000000000000000001ac8d6c89e9e9e9e9e9e9e9e9e9e9e9e9eaacf9f7f3f1f00 +00000000000000000000000000000000000000000000000000000000002f3f7fafcfffff +ffffffffffffffffffffffffffffffffffffffffffffffffffef00000000000000000000 +00000000000000000000000000000000000000006fffffffffffffffffffffffffffffff +ffffffffffef000000000000000000000000000000000000000000000000000000000000 +9fffffffffffffffffffffffffffffffffffffffdf2f0000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000da0d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6a00000000000000000000000 +00000000000000000000000000000000000000000000000000000042d2a59e9e9e9e9e9e +9e9e9e9e9e9e9edaffffffffffffcfbf9f7f7f6f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f +7f7f7fafbfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7fbfff +ffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7fdfffffffffffffffffffffffffffffffffffffaf0f00 +000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000028bbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d65d0000000000000000000000000000000000000000000000000000000000000000 +0000000000005f9e9e9e9e9e9e9e9e9e9e9e9e9eb6ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffff6f00000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000050c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6280000000000000000000000000000000000 +000000000000000000000000000000000000000000809e9e9e9e9e9e9e9e9e9e9e9eecff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffef2f000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000006bd6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6ad000000 +000000000000000000000000000000000000000000000000000000000000000000000009 +949e9e9e9e9e9e9e9e9e9ec8ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf +0f0000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000d93d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d678000000000000000000000000000000000000000000000000 +0000000000000000000000000000279e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001aadd6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635000000000000000000 +00000000000000000000000000000000000000000000000000000000004f9e9e9e9e9e9e +9e9ee0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffef4f00000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000035 +c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6bb0d000000000000000000000000000000000000000000000000000000000000 +0000000000000000769e9e9e9e9e9ec2ffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffcf1f000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000005dd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69300000000000000000000000000000000 +00000000000000000000000000000000000000000000098a9e9e9e9eaaf8ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffff9f000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000085d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d64200 +000000000000000000000000000000000000000000000000000000000000000000000000 +001d9e9e9e9eecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffdf7f7f7f7f7f7f7f7f +7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f614f4f4f4f4f4f4f4f4f4f4f4f4f4f4f566b6b6b +6b6badd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6c86b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b +6b6b674f4f4f4f4f4f4f4f4f4f4f4f4f8a9e9ed4ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeca49e9e9e9e +9e9e9e9e9e9e9e9e9e9e9eb3d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cba89e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffe09e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eafd2d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a19e9e9e9e9e9e +9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffda9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9ea8cbd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6bd9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4f8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1c4d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d2af9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4 +ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +b3d2d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c8d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d2b69e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9edaffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb3d2d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8a59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9edaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffc29e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9ea1bad6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfac9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4daffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffc29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea4ecffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9ea5c1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cfb39e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9ea4ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +da9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1bacfd6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8af9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb0f8ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffeca49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9eafc1d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6cfbaa59e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b09e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1afc1d2d6d6d6d6d6d6d6d6d6d6d6d6d6 +d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6cbbaa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9ed4ffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffc89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9ea8b6c4cfd6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c8bdafa19e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaaecffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea1acb3bac4c8c8d6d6d6d6d6d6d6cfc8c8 +bdbaafa89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ebcf8ff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffff8c89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9ea4e0ffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffe6aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ec2f8ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +cea49e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eb6e6 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffff8c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2c29e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaadaffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffff2c29e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaada +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffffffffff8ceaa9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9eb6e0ffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffe0bc9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8f2ffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffffff8dabc9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaac8ecff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffff8e0c2aa9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e +9e9e9e9e9e9e9eb6d4ecffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffffffffffffffffffffffffffffffff2e0c8b6a49e9e9e9e9e9e9e9e +9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaabccee6ffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffff8e6d4cec2b6b6aa9e9e9e9e9e9e9e9eb6b6b6c8cee0e6ffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffff +end +%%PageTrailer +%%Trailer +%%EOF diff --git a/docs/gen-html-index b/docs/gen-html-index new file mode 100644 index 0000000000..4fad6db974 --- /dev/null +++ b/docs/gen-html-index @@ -0,0 +1,177 @@ +#!/usr/bin/env perl + +# +# Generate indexes for html documentation +# + +use strict; +use warnings; + +use Getopt::Long; +use IO::File; +use File::Basename; + +Getopt::Long::Configure('bundling'); + +@ARGV >= 2 or die; + +our @docs; +our @dirs; +our %index; + +our $outdir; +our $debug; + +GetOptions("i=s" => sub { read_index(@_);}, + "D" => \$debug) + or die; + +($outdir,@docs) = @ARGV; + +sub write_file ($$) { + my ($opath, $odata) = @_; + print STDOUT "Writing: $opath\n"; + my $out = new IO::File "$opath.new", '>' or die "$opath $!"; + print $out $odata or die $!; + rename "$opath.new", "$opath" or die "$opath $!"; +} + +sub make_page ($$$) { + my ($file,$title,$content) = @_; + my $o = ''; + my $h1; + if ( $title eq "" ) + { + $title = $h1 = "Xen Documentation"; + } + else + { + $h1 = "Xen Documentation - $title"; + $title = "Xen Documentation - $title"; + } + $o .= <$title + +

$h1

+
    +$content +
+ +END + write_file($file, $o); +} + +sub make_linktext ($) { + my ($l) = @_; + return "$1($2)" if $l =~ m,^man/(.*)\.([0-9].*)\.html,; + $l =~ s/.(?:html|txt)$//g; + return $index{$l} if exists $index{$l}; + + my $from_html; + eval { + require HTML::TreeBuilder::XPath; + my $tree = new HTML::TreeBuilder::XPath; + my $f = "$outdir/$l.html"; + open F, '<', $f or die "$l $f $!"; + $tree->parse_file(\*F) or die; + close F; + $from_html = $tree->findvalue("/html/head/title"); + }; + print "$l: get title: $@" if $@ && $debug; + return $from_html if $from_html; + + return basename($l); +} + +sub make_link ($$) { + my ($ref,$base) = @_; + + my $txt = make_linktext($ref); + $ref =~ s,^$base/,, if $base; #/ + + return "
  • $txt
  • \n"; +} + +sub make_links ($@) { + my ($dir,@docs) = @_; + my $idx = ''; + foreach my $of (sort { make_linktext($a) cmp make_linktext($b) } @docs) { + $idx .= make_link($of,$dir); + } + return $idx; +} + +sub read_index ($$) { + my ($opt, $val) = @_; + my $idx = new IO::File "$val", '<' or die "$val $!"; + while ($_ = $idx->getline()) { + s/^\s+//; + s/\s+$//; + next if m/^\#/; + next unless m/\S/; + m/^(\S+)\s+(\S.*)$/ or die; + $index{$1} = $2; + } +} + +sub uniq (@) { + my %h; + foreach (@_) { $h{$_} = 1; } + return keys %h; +} + +for (@docs) { s,^\Q$outdir\E/,, } + +@docs = grep { -e "$outdir/$_" && (make_linktext($_) ne "NO-INDEX") } @docs; + +my $top = ''; + +# Return a list of all directories leading to $path +sub dirs($) +{ + my ($path) = @_; + my @dirs; + while ( $path =~ m,/, ) + { + $path =~ m,/([^/]+)$,; + push @dirs, $`;#` + $path = $`;#` + } + return @dirs; +} + +foreach my $of (grep { !m{/} } @docs) { + $top .= make_link($of,''); +} + +foreach my $od (sort { $a cmp $b } uniq map { dirs($_) } @docs) { + my @d = (grep /^\Q$od\E/, @docs); + if ( @d == 1 and $d[0] eq "$od/index.html" ) + { + next if $d[0] =~ m,/,;#/ linked to from the subdirectory entry. + $top .= make_link("$od/index.html", 0); + } + else + { + my $links = make_links(undef,@d); + my $secttitle = make_linktext($od); + $top .= <$secttitle +
      +$links +
    +END + + $links = make_links($od,@d); + my $idx = ''; + $idx .= <$secttitle +
      +$links +
    +END + make_page("$outdir/$od/index.html", $secttitle, $idx); + } +} + +make_page("$outdir/index.html", "", $top); diff --git a/docs/glossary.rst b/docs/glossary.rst new file mode 100644 index 0000000000..8ddbdab160 --- /dev/null +++ b/docs/glossary.rst @@ -0,0 +1,52 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Glossary +======== + +.. Terms should appear in alphabetical order + +.. glossary:: + + control domain + A :term:`domain`, commonly dom0, with the permission and responsibility + to create and manage other domains on the system. + + domain + A domain is Xen's unit of resource ownership, and generally has at the + minimum some RAM and virtual CPUs. + + The terms :term:`domain` and :term:`guest` are commonly used + interchangeably, but they mean subtly different things. + + A guest is a single, end user, virtual machine. + + In some cases, e.g. during live migration, one guest will be comprised of + two domains for a period of time, while it is in transit. + + domid + The numeric identifier of a running :term:`domain`. It is unique to a + single instance of Xen, used as the identifier in various APIs, and is + typically allocated sequentially from 0. + + guest + The term 'guest' has two different meanings, depending on context, and + should not be confused with :term:`domain`. + + When discussing a Xen system as a whole, a 'guest' refer to a virtual + machine which is the "useful output" of running the system in the first + place (e.g. an end-user VM). Virtual machines providing system services, + (e.g. the control and/or hardware domains), are not considered guests in + this context. + + In the code, "guest context" and "guest state" is considered in terms of + the CPU architecture, and contrasted against hypervisor context/state. + In this case, it refers to all code running lower privilege privilege + level the hypervisor. As such, it covers all domains, including ones + providing system services. + + hardware domain + A :term:`domain`, commonly dom0, which shares responsibility with Xen + about the system as a whole. + + By default it gets all devices, including all disks and network cards, so + is responsible for multiplexing guest I/O. diff --git a/docs/guest-guide/index.rst b/docs/guest-guide/index.rst new file mode 100644 index 0000000000..5455c67479 --- /dev/null +++ b/docs/guest-guide/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Guest documentation +=================== + +.. toctree:: + :maxdepth: 2 + + x86/index diff --git a/docs/guest-guide/x86/hypercall-abi.rst b/docs/guest-guide/x86/hypercall-abi.rst new file mode 100644 index 0000000000..14c48929d7 --- /dev/null +++ b/docs/guest-guide/x86/hypercall-abi.rst @@ -0,0 +1,129 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Hypercall ABI +============= + +Hypercalls are system calls to Xen. Two modes of guest operation are +supported, and up to 6 individual parameters are supported. + +Hypercalls may only be issued by kernel-level software [1]_. + +Registers +--------- + +The registers used for hypercalls depends on the operating mode of the guest. + +.. list-table:: + :header-rows: 1 + + * - ABI + - Hypercall Index + - Parameters (1 - 6) + - Result + + * - 64bit + - RAX + - RDI RSI RDX R10 R8 R9 + - RAX + + * - 32bit + - EAX + - EBX ECX EDX ESI EDI EBP + - EAX + +32 and 64bit PV guests have an ABI fixed by their guest type. The ABI for an +HVM guest depends on whether the vCPU is operating in a 64bit segment or not +[2]_. + + +Parameters +---------- + +Different hypercalls take a different number of parameters. Each hypercall +potentially clobbers each of its parameter registers; a guest may not rely on +the parameter registers staying the same. A debug build of Xen checks this by +deliberately poisoning the parameter registers before returning back to the +guest. + + +Mode transfer +------------- + +The exact sequence of instructions required to issue a hypercall differs +between virtualisation mode and hardware vendor. + +.. list-table:: + :header-rows: 1 + + * - Guest + - Transfer instruction + + * - 32bit PV + - INT 0x82 + + * - 64bit PV + - SYSCALL + + * - Intel HVM + - VMCALL + + * - AMD HVM + - VMMCALL + +To abstract away the details, Xen implements an interface known as the +Hypercall Page. This allows a guest to make a hypercall without needing to +perform mode-specific or vendor-specific setup. + + +Hypercall Page +============== + +The hypercall page is a page of guest RAM into which Xen will write suitable +transfer stubs. + +Creating a hypercall page is an isolated operation from Xen's point of view. +It is the guests responsibility to ensure that the hypercall page, once +written by Xen, is mapped with executable permissions so it may be used. +Multiple hypercall pages may be created by the guest, if it wishes. + +The stubs are arranged by hypercall index, and start on 32-byte boundaries. +To invoke a specific hypercall, ``call`` the relevant stub [3]_: + +.. code-block:: none + + call hypercall_page + index * 32 + +There result is an ABI which is invariant of the exact operating mode or +hardware vendor. This is intended to simplify guest kernel interfaces by +abstracting away the details of how it is currently running. + + +Creating Hypercall Pages +------------------------ + +Guests which are started using the PV boot protocol may set set +``XEN_ELFNOTE_HYPERCALL_PAGE`` to have the nominated page written as a +hypercall page during construction. This mechanism is common for PV guests, +and allows hypercalls to be issued with no additional setup. + +Any guest can locate the Xen CPUID leaves and read the *hypercall transfer +page* information, which specifies an MSR that can be used to create +additional hypercall pages. When a guest physical address is written to the +MSR, Xen writes a hypercall page into the nominated guest page. This +mechanism is common for HVM guests which are typically started via legacy +means. + + +.. rubric:: Footnotes + +.. [1] For HVM guests, ``HVMOP_guest_request_vm_event`` may be configured to + be usable from userspace, but this behaviour is not default. + +.. [2] While it is possible to use compatibility mode segments in a 64bit + kernel, hypercalls issues from such a mode will be interpreted with the + 32bit ABI. Such a setup is not expected in production scenarios. + +.. [3] ``HYPERCALL_iret`` is special. It is only implemented for PV guests + and takes all its parameters on the stack. This stub should be + ``jmp``'d to, rather than ``call``'d. HVM guests have this stub + implemented as ``ud2a`` to prevent accidental use. diff --git a/docs/guest-guide/x86/index.rst b/docs/guest-guide/x86/index.rst new file mode 100644 index 0000000000..502968490d --- /dev/null +++ b/docs/guest-guide/x86/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +x86 +=== + +.. toctree:: + :maxdepth: 2 + + hypercall-abi diff --git a/docs/hypervisor-guide/code-coverage.rst b/docs/hypervisor-guide/code-coverage.rst new file mode 100644 index 0000000000..49c4a8ad3b --- /dev/null +++ b/docs/hypervisor-guide/code-coverage.rst @@ -0,0 +1,103 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Code Coverage +============= + +Xen can be compiled with coverage support. When configured, Xen will record +the coverage of its own basic blocks. Being a piece of system software rather +than a userspace, it can't automatically write coverage out to the filesystem, +so some extra steps are required to collect and process the data. + +.. warning:: + + ARM doesn't currently boot when the final binary exceeds 2MB in size, + and the coverage build tends to exceed this limit. + + +Compiling Xen +------------- + +Coverage support is dependent on the compiler and toolchain used. As Xen +isn't a userspace application, it can't use the compiler supplied library, and +instead has to provide some parts of the implementation itself. + +For x86, coverage support was introduced with GCC 3.4 or later, and Clang 3.9 +or later, and Xen is compatible with these. However, the compiler internal +formats do change occasionally, and this may involve adjustments to Xen. +While we do our best to keep up with these changes, Xen may not be compatible +with bleeding edge compilers. + +To build with coverage support, enable ``CONFIG_COVERAGE`` in Kconfig. The +build system will automatically select the appropriate format based on the +compiler in use. + +The resulting binary will record its own coverage while running. + + +Accessing the raw coverage data +------------------------------- + +The ``SYSCTL_coverage_op`` hypercall is used to interact with the coverage +data. A dom0 userspace helper, ``xenconv`` is provided as well, which thinly +wraps this hypercall. + +The ``read`` subcommand can be used to obtain the raw coverage data:: + + [root@host ~]# xencov read > coverage.dat + +This is toolchain-specific data and needs to be fed back to the appropriate +programs to post-process. + +Alternatively, the ``reset`` subcommand can be used reset all counters back to +0:: + + [root@host ~]# xencov reset + + +GCC coverage +------------ + +A build using GCC's coverage will result in ``*.gcno`` artefact for every +object file. The raw coverage data needs splitting to form the matching +``*.gcda`` files. + +An example of how to view the data is as follows. It uses ``lcov`` which is a +graphical frontend to ``gcov``. + +* Obtain the raw coverage data from the test host, and pull it back to the + build working tree. +* Use ``xencov_split`` to extract the ``*.gcda`` files. Note that full build + paths are used by the tools, so splitting needs to output relative to ``/``. +* Use ``geninfo`` to post-process the raw data. +* Use ``genhtml`` to render the results as HTML. +* View the results in a browser. + +:: + + xen.git/xen$ ssh root@host xencov read > coverage.dat + xen.git/xen$ ../tools/xencov_split coverage.dat --output-dir=/ + xen.git/xen$ geninfo . -o cov.info + xen.git/xen$ genhtml cov.info -o cov/ + xen.git/xen$ $BROWSER cov/index.html + +Clang coverage +-------------- + +An example of how to view the data is as follows. + +* Obtain the raw coverage data from the test host, and pull it back to the + build working tree. +* Use ``llvm-profdata`` to post-process the raw data. +* Use ``llvm-cov show`` in combination with ``xen-syms`` from the build to + render the results as HTML. +* View the results in a browser. + +:: + + xen.git/xen$ ssh root@host xencov read > xen.profraw + xen.git/xen$ llvm-profdata merge xen.profraw -o xen.profdata + xen.git/xen$ llvm-cov show -format=html -output-dir=cov/ xen-syms -instr-profile=xen.profdata + xen.git/xen$ $BROWSER cov/index.html + +Full documentation on Clang's coverage capabilities can be found at: +https://clang.llvm.org/docs/SourceBasedCodeCoverage.html diff --git a/docs/hypervisor-guide/index.rst b/docs/hypervisor-guide/index.rst new file mode 100644 index 0000000000..e4393b0697 --- /dev/null +++ b/docs/hypervisor-guide/index.rst @@ -0,0 +1,11 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +Hypervisor documentation +======================== + +.. toctree:: + :maxdepth: 2 + + code-coverage + + x86/index diff --git a/docs/hypervisor-guide/x86/how-xen-boots.rst b/docs/hypervisor-guide/x86/how-xen-boots.rst new file mode 100644 index 0000000000..ca77d7c8a3 --- /dev/null +++ b/docs/hypervisor-guide/x86/how-xen-boots.rst @@ -0,0 +1,101 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +How Xen Boots +============= + +This is an at-a-glance reference of Xen's booting capabilities and +expectations. + + +Build +----- + +A build of xen produces ``xen.gz`` and optionally ``xen.efi`` as final +artefacts. + + * For BIOS, Xen supports the Multiboot 1 and 2 protocols. + + * For EFI, Xen supports Multiboot 2 with EFI extensions, and native EFI64. + + * For virtualisation, Xen supports starting directly with the PVH boot + protocol. + + +Objects +~~~~~~~ + +To begin with, most object files are compiled and linked. This includes the +Multiboot 1 and 2 headers and entrypoints, including the Multiboot 2 tags for +EFI extensions. When ``CONFIG_PVH_GUEST`` is selected at build time, this +includes the PVH entrypoint and associated ELF notes. + +Depending on whether the compiler supports ``__attribute__((__ms_abi__))`` or +not, either an EFI stub is included which nops/fails applicable setup and +runtime calls, or full EFI support is included. + + +Protocols and entrypoints +~~~~~~~~~~~~~~~~~~~~~~~~~ + +All headers and tags are built in ``xen/arch/x86/boot/head.S`` + +The Multiboot 1 headers request aligned modules and memory information. Entry +is via the start of the binary image, which is the ``start`` symbol. This +entrypoint must be started in 32bit mode. + +The Multiboot 2 headers are more flexible, and in addition request that the +image be loaded as high as possible below the 4G boundary, with 2M alignment. +Entry is still via the ``start`` symbol as with MB1, and still in 32bit mode. + +Headers for the EFI MB2 extensions are also present. These request that +``ExitBootServices()`` not be called, and register ``__efi_mb2_start`` as an +alternative entrypoint, entered in 64bit mode. + +If ``CONFIG_PVH_GUEST`` was selected at build time, an Elf note is included +which indicates the ability to use the PVH boot protocol, and registers +``__pvh_start`` as the entrypoint, entered in 32bit mode. + + +xen.gz +~~~~~~ + +The objects are linked together to form ``xen-syms`` which is an ELF64 +executable with full debugging symbols. ``xen.gz`` is formed by stripping +``xen-syms``, then repackaging the result as an ELF32 object with a single +load section at 2MB, and ``gzip``-ing the result. Despite the ELF32 having a +fixed load address, its contents are relocatable. + +Any bootloader which unzips the binary and follows the ELF headers will place +it at the 2M boundary and jump to ``start`` which is the identified entry +point. However, Xen depends on being entered with the MB1 or MB2 protocols, +and will terminate otherwise. + +The MB2+EFI entrypoint depends on being entered with the MB2 protocol, and +will terminate if the entry protocol is wrong, or if EFI details aren't +provided, or if EFI Boot Services are not available. + + +xen.efi +~~~~~~~ + +When a PEI-capable toolchain is found, the objects are linked together and a +PE32+ binary is created. It can be run directly from the EFI shell, and has +``efi_start`` as its entry symbol. + +.. note:: + + xen.efi does contain all MB1/MB2/PVH tags included in the rest of the + build. However, entry via anything other than the EFI64 protocol is + unsupported, and won't work. + + +Boot +---- + +Xen, once loaded into memory, identifies its position in order to relocate +system structures. For 32bit entrypoints, this necessarily requires a call +instruction, and therefore a stack, but none of the ABIs provide one. + +Overall, given that on a BIOS-based system, the IVT and BDA occupy the first +5/16ths of the first page of RAM, with the rest free to use, Xen assumes the +top of the page is safe to use. diff --git a/docs/hypervisor-guide/x86/index.rst b/docs/hypervisor-guide/x86/index.rst new file mode 100644 index 0000000000..c10cd1d7c0 --- /dev/null +++ b/docs/hypervisor-guide/x86/index.rst @@ -0,0 +1,9 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +x86 +=== + +.. toctree:: + :maxdepth: 2 + + how-xen-boots diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000000..b75487a05d --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,61 @@ +.. SPDX-License-Identifier: CC-BY-4.0 + +The Xen Hypervisor documentation +================================ + +.. note:: + + Xen's Sphinx/RST documentation is a work in progress. The existing + documentation can be found at https://xenbits.xen.org/docs/ + +Xen is an open source, bare metal hypervisor. It runs as the most privileged +piece of software on the system, and shares the resources of the hardware +between virtual machines. See :doc:`admin-guide/introduction` for an +introduction to a Xen system. + +User documentation +------------------ + +This is documentation for an administrator of a Xen system. It is intended +for someone who is not necesserily a developer, has installed Xen from their +preferred distribution, and is attempting to run virtual machines and +configure the system. + +.. toctree:: + :maxdepth: 2 + + admin-guide/index + + +Guest documentation +------------------- + +This documentation concerns the APIs and ABIs available to guests. It is +intended for OS developers trying to use a Xen feature, and for Xen developers +to avoid breaking things. + +.. toctree:: + :maxdepth: 3 + + guest-guide/index + + +Hypervisor developer documentation +---------------------------------- + +This is documentation for a hypervisor developer. It is intended for someone +who is building Xen from source, and is running the new hypervisor in some +kind of development environment. + +.. toctree:: + :maxdepth: 2 + + hypervisor-guide/index + + +Miscellanea +----------- + +.. toctree:: + + glossary diff --git a/docs/man/xen-pci-device-reservations.7.pod b/docs/man/xen-pci-device-reservations.7.pod new file mode 100644 index 0000000000..9ddf3a18ad --- /dev/null +++ b/docs/man/xen-pci-device-reservations.7.pod @@ -0,0 +1,89 @@ +=head1 NAME + +xen-pci-device-reservations - Xen PCI device ID registry + +=head1 Description + +PCI vendor ID 0x5853 has been reserved for use by Xen systems in order to +advertise certain virtual hardware to guest virtual machines. The primary +use of this is with device ID 0x0001 to advertise the Xen Platform PCI +device - the presence of this virtual device enables a guest Operating +System (subject to the availability of suitable drivers) to make use of +paravirtualisation features such as disk and network devices etc. + +Some Xen vendors wish to provide alternative and/or additional guest drivers +that can bind to virtual devices[1]. This may be done using the Xen PCI +vendor ID of 0x5853 and Xen-vendor/device specific PCI device IDs. This file +records reservations made within the device ID range in order to avoid +multiple Xen vendors using conflicting IDs. + +=head1 Guidelines + +=over 4 + +=item 1. A vendor may request a range of device IDs by submitting a patch to + this file. + +=item 2. Vendor allocations should be in the range 0xc000-0xfffe to reduce the + possibility of clashes with community IDs assigned from the bottom up. + +=item 3. The vendor is responsible for allocations within the range and should + try to record specific device IDs in PCI ID databases such as + https://pci-ids.ucw.cz and https://devicehunt.com + +=back + +=head1 Reservations + + range | vendor/product + --------------+-------------------------------------------------------------- + 0x0001 | (Xen Platform PCI device) + 0x0002 | Citrix XenServer (grandfathered allocation for XenServer 6.1) + 0xc000-0xc0ff | Citrix XenServer + 0xc100-0xc1ff | Citrix XenClient + 0xc200-0xc2ff | XCP-ng Project (https://xcp-ng.org) + +=head1 Notes + +=over 4 + +=item 1. + +Upstream QEMU provides a parameterized device called xen-pvdevice that +can be used to host guest drivers. Execute: + + qemu-system-i386 -device xen-pvdevice,help + +for a list of all parameters. The following parameters are relevant to +driver binding: + +=over 4 + +=item vendor-id (default 0x5853) + +The PCI vendor ID and subsystem vendor ID of the device. + +=item device-id (must be specified) + +The PCI device ID and subsystem device ID of the device. + +=item revision (default 0x01) + +The PCI revision of the device + +=back + +Also the size parameter (default 0x400000) can be used to specify the +size of the single MMIO BAR that the device exposes. This area may be +used by drivers for mapping grant tables, etc. + +Note that the presence of the Xen Platform PCI device is generally a +pre-requisite for an additional xen-pvdevice as it is the platform +device that provides that IO ports necessary for unplugging emulated +devices. See hvm-emulated-unplug.markdown for details of the IO ports +and unplug protocol. + +libxl provides support for creation of a single additional xen-pvdevice. +See the vendor_device parameter in xl.cfg(5). + +=back diff --git a/docs/man/xen-pv-channel.7.pod b/docs/man/xen-pv-channel.7.pod new file mode 100644 index 0000000000..ab4577d1da --- /dev/null +++ b/docs/man/xen-pv-channel.7.pod @@ -0,0 +1,189 @@ +=encoding utf8 + +=head1 NAME + +xen-pv-channel - Xen PV Channels + +=head1 DESCRIPTION + +A channel is a low-bandwidth private byte stream similar to a serial +link. Typical uses of channels are + +=over + +=item 1. + +to provide initial configuration information to a VM on boot +(example use: CloudStack's cloud-early-config service) + + +=item 2. + +to signal/query an in-guest agent +(example use: oVirt's guest agent) + + +=back + +Channels are similar to virtio-serial devices and emulated serial links. +Channels are intended to be used in the implementation of libvirt s +when running on Xen. + +Note: if an application requires a high-bandwidth link then it should use +vchan instead. + + +=head2 How to use channels: an example + +Consider a cloud deployment where VMs are cloned from pre-made templates, +and customised on first boot by an in-guest agent which sets the IP address, +hostname, ssh keys etc. To install the system the cloud administrator would +first: + +=over + +=item 1. + +Install a guest as normal (no channel configuration necessary) + + +=item 2. + +Install the in-guest agent specific to the cloud software. This will +prepare the guest to communicate over the channel, and also prepare +the guest to be cloned safely (sometimes known as "sysprepping") + + +=item 3. + +Shutdown the guest + + +=item 4. + +Register the guest as a template with the cloud orchestration software + + +=item 5. + +Install the cloud orchestration agent in dom0 + + +=back + +At runtime, when a cloud tenant requests that a VM is created from the template, +the sequence of events would be: (assuming a Linux domU) + +=over + +=item 1. + +A VM is "cloned" from the template + + +=item 2. + +A unique Unix domain socket path in dom0 is allocated +(e.g. /my/cloud/software/talk/to/domain/) + + +=item 3. + +Domain configuration is created for the VM, listing the channel +name expected by the in-guest agent. In xl syntax this would be: + +channel = [ "connection=socket, name=org.my.cloud.software.agent.version1, path = /my/cloud/software/talk/to/domain/" ] + +=item 4. + +The VM is started + + +=item 5. + +In dom0 the cloud orchestration agent connects to the Unix domain +socket, writes a handshake message and waits for a reply + + +=item 6. + +Assuming the guest kernel has CONFIG_HVC_XEN_FRONTEND set then the console +driver will generate a hotplug event + + +=item 7. + +A udev rule is activated by the hotplug event. + +The udev rule would look something like: + +SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]", RUN+="xen-console-setup" + +where the "xen-console-setup" script would read the channel name and +make a symlink in /dev/xen-channel/org.my.cloud.software.agent.version1 +pointing to /dev/hvcN. N is the same number as the number in "/devices/console-[0-9]". +In other words, "/devices/console-2" maps to /dev/hvc2. + + +=item 8. + +The in-guest agent uses inotify to see the creation of the /dev/xen-channel +symlink and opens the device. + + +=item 9. + +The in-guest agent completes the handshake with the dom0 agent + + +=item 10. + +The dom0 agent transmits the unique VM configuration: hostname, IP +address, ssh keys etc etc + + +=item 11. + +The in-guest agent receives the configuration and applies it. + + +=back + +Using channels avoids having to use a temporary disk device or network +connection. + + +=head2 Design recommendations and pitfalls + +It's necessary to install channel-specific software (an "agent") into the guest +before you can use a channel. By default a channel will appear as a device +which could be mistaken for a serial port or regular console. It is known +that some software will proactively seek out serial ports and issue AT commands +at them; make sure such software is disabled! + +Since channels are identified by names, application authors must ensure their +channel names are unique to avoid clashes. We recommend that channel names +include parts unique to the application such as a domain names. To assist +prevent clashes we recommend authors add their names to our global channel +registry at the end of this document. + + +=head2 Limitations + +Hotplug and unplug of channels is not currently implemented. + + +=head2 Channel name registry + +It is important that channel names are globally unique. To help ensure +that no-one's name clashes with yours, please add yours to this list. + + Key: + N: Name + C: Contact + D: Short description of use, possibly including a URL to your software or API + + N: org.xenproject.guest.clipboard.0.1 + C: David Scott + D: Share clipboard data via an in-guest agent. See: + https://wiki.xenproject.org/wiki/Clipboard_sharing_protocol diff --git a/docs/man/xen-tscmode.7.pod b/docs/man/xen-tscmode.7.pod new file mode 100644 index 0000000000..1d81a3fe18 --- /dev/null +++ b/docs/man/xen-tscmode.7.pod @@ -0,0 +1,284 @@ +=head1 NAME + +xen-tscmode - Xen TSC (time stamp counter) and timekeeping discussion + +=head1 OVERVIEW + +As of Xen 4.0, a new config option called tsc_mode may be specified +for each domain. The default for tsc_mode handles the vast majority +of hardware and software environments. This document is targeted +for Xen users and administrators that may need to select a non-default +tsc_mode. + +Proper selection of tsc_mode depends on an understanding not only of +the guest operating system (OS), but also of the application set that will +ever run on this guest OS. This is because tsc_mode applies +equally to both the OS and ALL apps that are running on this +domain, now or in the future. + +Key questions to be answered for the OS and/or each application are: + +=over 4 + +=item * + +Does the OS/app use the rdtsc instruction at all? +(We will explain below how to determine this.) + +=item * + +At what frequency is the rdtsc instruction executed by either the OS +or any running apps? If the sum exceeds about 10,000 rdtsc instructions +per second per processor, we call this a "high-TSC-frequency" +OS/app/environment. (This is relatively rare, and developers of OS's +and apps that are high-TSC-frequency are usually aware of it.) + +=item * + +If the OS/app does use rdtsc, will it behave incorrectly if "time goes +backwards" or if the frequency of the TSC suddenly changes? If so, +we call this a "TSC-sensitive" app or OS; otherwise it is "TSC-resilient". + +=back + +This last is the US$64,000 question as it may be very difficult +(or, for legacy apps, even impossible) to predict all possible +failure cases. As a result, unless proven otherwise, any app +that uses rdtsc must be assumed to be TSC-sensitive and, as we +will see, this is the default starting in Xen 4.0. + +Xen's new tsc_mode parameter determines the circumstances under which +the family of rdtsc instructions are executed "natively" vs emulated. +Roughly speaking, native means rdtsc is fast but TSC-sensitive apps +may, under unpredictable circumstances, run incorrectly; emulated means +there is some performance degradation (unobservable in most cases), +but TSC-sensitive apps will always run correctly. Prior to Xen 4.0, +all rdtsc instructions were native: "fast but potentially incorrect." +Starting at Xen 4.0, the default is that all rdtsc instructions are +"correct but potentially slow". The tsc_mode parameter in 4.0 provides +an intelligent default but allows system administrator's to adjust +how rdtsc instructions are executed differently for different domains. + +The non-default choices for tsc_mode are: + +=over 4 + +=item * B (always emulate). + +All rdtsc instructions are emulated; this is the best choice when +TSC-sensitive apps are running and it is necessary to understand +worst-case performance degradation for a specific hardware environment. + +=item * B (never emulate). + +This is the same as prior to Xen 4.0 and is the best choice if it +is certain that all apps running in this VM are TSC-resilient and +highest performance is required. + +=item * B (PVRDTSCP). + +This mode has been removed. + +=back + +If tsc_mode is left unspecified (or set to B), a hybrid +algorithm is utilized to ensure correctness while providing the +best performance possible given: + +=over 4 + +=item * + +the requirement of correctness, + +=item * + +the underlying hardware, and + +=item * + +whether or not the VM has been saved/restored/migrated + +=back + +To understand this in more detail, the rest of this document must +be read. + +=head1 DETERMINING RDTSC FREQUENCY + +To determine the frequency of rdtsc instructions that are emulated, +an "xl" command can be used by a privileged user of domain0. The +command: + + # xl debug-key s; xl dmesg | tail + +provides information about TSC usage in each domain where TSC +emulation is currently enabled. + +=head1 TSC HISTORY + +To understand tsc_mode completely, some background on TSC is required: + +The x86 "timestamp counter", or TSC, is a 64-bit register on each +processor that increases monotonically. Historically, TSC incremented +every processor cycle, but on recent processors, it increases +at a constant rate even if the processor changes frequency (for example, +to reduce processor power usage). TSC is known by x86 programmers +as the fastest, highest-precision measurement of the passage of time +so it is often used as a foundation for performance monitoring. +And since it is guaranteed to be monotonically increasing and, at +64 bits, is guaranteed to not wraparound within 10 years, it is +sometimes used as a random number or a unique sequence identifier, +such as to stamp transactions so they can be replayed in a specific +order. + +On most older SMP and early multi-core machines, TSC was not synchronized +between processors. Thus if an application were to read the TSC on +one processor, then was moved by the OS to another processor, then read +TSC again, it might appear that "time went backwards". This loss of +monotonicity resulted in many obscure application bugs when TSC-sensitive +apps were ported from a uniprocessor to an SMP environment; as a result, +many applications -- especially in the Windows world -- removed their +dependency on TSC and replaced their timestamp needs with OS-specific +functions, losing both performance and precision. On some more recent +generations of multi-core machines, especially multi-socket multi-core +machines, the TSC was synchronized but if one processor were to enter +certain low-power states, its TSC would stop, destroying the synchrony +and again causing obscure bugs. This reinforced decisions to avoid use +of TSC altogether. On the most recent generations of multi-core +machines, however, synchronization is provided across all processors +in all power states, even on multi-socket machines, and provide a +flag that indicates that TSC is synchronized and "invariant". Thus +TSC is once again useful for applications, and even newer operating +systems are using and depending upon TSC for critical timekeeping +tasks when running on these recent machines. + +We will refer to hardware that ensures TSC is both synchronized and +invariant as "TSC-safe" and any hardware on which TSC is not (or +may not remain) synchronized as "TSC-unsafe". + +As a result of TSC's sordid history, two classes of applications use +TSC: old applications designed for single processors, and the most recent +enterprise applications which require high-frequency high-precision +timestamping. + +We will refer to apps that might break if running on a TSC-unsafe +machine as "TSC-sensitive"; apps that don't use TSC, or do use +TSC but use it in a way that monotonicity and frequency invariance +are unimportant as "TSC-resilient". + +The emergence of virtualization once again complicates the usage of +TSC. When features such as save/restore or live migration are employed, +a guest OS and all its currently running applications may be invisibly +transported to an entirely different physical machine. While TSC +may be "safe" on one machine, it is essentially impossible to precisely +synchronize TSC across a data center or even a pool of machines. As +a result, when run in a virtualized environment, rare and obscure +"time going backwards" problems might once again occur for those +TSC-sensitive applications. Worse, if a guest OS moves from, for +example, a 3GHz +machine to a 1.5GHz machine, attempts by an OS/app to measure time +intervals with TSC may without notice be incorrect by a factor of two. + +The rdtsc (read timestamp counter) instruction is used to read the +TSC register. The rdtscp instruction is a variant of rdtsc on recent +processors. We refer to these together as the rdtsc family of instructions, +or just "rdtsc". Instructions in the rdtsc family are non-privileged, but +privileged software may set a cpuid bit to cause all rdtsc family +instructions to trap. This trap can be detected by Xen, which can +then transparently "emulate" the results of the rdtsc instruction and +return control to the code following the rdtsc instruction. + +To provide a "safe" TSC, i.e. to ensure both TSC monotonicity and a +fixed rate, Xen provides rdtsc emulation whenever necessary or when +explicitly specified by a per-VM configuration option. TSC emulation is +relatively slow -- roughly 15-20 times slower than the rdtsc instruction +when executed natively. However, except when an OS or application uses +the rdtsc instruction at a high frequency (e.g. more than about 10,000 times +per second per processor), this performance degradation is not noticeable +(i.e. <0.3%). And, TSC emulation is nearly always faster than +OS-provided alternatives (e.g. Linux's gettimeofday). For environments +where it is certain that all apps are TSC-resilient (e.g. +"TSC-safeness" is not necessary) and highest performance is a +requirement, TSC emulation may be entirely disabled (tsc_mode==2). + +The default mode (tsc_mode==0) checks TSC-safeness of the underlying +hardware on which the virtual machine is launched. If it is +TSC-safe, rdtsc will execute at hardware speed; if it is not, rdtsc +will be emulated. Once a virtual machine is save/restored or migrated, +however, there are two possibilities: TSC remains native IF the source +physical machine and target physical machine have the same TSC frequency +(or, for HVM/PVH guests, if TSC scaling support is available); else TSC +is emulated. Note that, though emulated, the "apparent" TSC frequency +will be the TSC frequency of the initial physical machine, even after +migration. + +Finally, tsc_mode==1 always enables TSC emulation, regardless of +the underlying physical hardware. The "apparent" TSC frequency will +be the TSC frequency of the initial physical machine, even after migration. +This mode is useful to measure any performance degradation that +might be encountered by a tsc_mode==0 domain after migration occurs, +or a tsc_mode==3 domain when it is running on TSC-unsafe hardware. + +Note that while Xen ensures that an emulated TSC is "safe" across migration, +it does not ensure that it continues to tick at the same rate during +the actual migration. As an oversimplified example, if TSC is ticking +once per second in a guest, and the guest is saved when the TSC is 1000, +then restored 30 seconds later, TSC is only guaranteed to be greater +than or equal to 1001, not precisely 1030. This has some OS implications +as will be seen in the next section. + +=head1 TSC INVARIANT BIT and NO_MIGRATE + +Related to TSC emulation, the "TSC Invariant" bit is architecturally defined +in a cpuid bit on the most recent x86 processors. If set, TSC invariance +ensures that the TSC is "safe", that is it will increment at a constant rate +regardless of power events, will be synchronized across all processors, and +was properly initialized to zero on all processors at boot-time +by system hardware/BIOS. As long as system software never writes to TSC, +TSC will be safe and continuously incremented at a fixed rate and thus +can be used as a system "clocksource". + +This bit is used by some OS's, and specifically by Linux starting with +version 2.6.30(?), to select TSC as a system clocksource. Once selected, +TSC remains the Linux system clocksource unless manually overridden. In +a virtualized environment, since it is not possible to synchronize TSC +across all the machines in a pool or data center, a migration may "break" +TSC as a usable clocksource; while time will not go backwards, it may +not track wallclock time well enough to avoid certain time-sensitive +consequences. As a result, Xen can only expose the TSC Invariant bit +to a guest OS if it is certain that the domain will never migrate. +As of Xen 4.0, the "no_migrate=1" VM configuration option may be specified +to disable migration. If no_migrate is selected and the VM is running +on a physical machine with "TSC Invariant", Linux 2.6.30+ will safely +use TSC as the system clocksource. But, attempts to migrate or, once +saved, restore this domain will fail. + +There is another cpuid-related complication: The x86 cpuid instruction is +non-privileged. HVM domains are configured to always trap this instruction +to Xen, where Xen can "filter" the result. In a PV OS, all cpuid instructions +have been replaced by a paravirtualized equivalent of the cpuid instruction +("pvcpuid") and also trap to Xen. But apps in a PV guest that use a +cpuid instruction execute it directly, without a trap to Xen. As a result, +an app may directly examine the physical TSC Invariant cpuid bit and make +decisions based on that bit. + +=head1 HARDWARE TSC SCALING + +Intel VMX TSC scaling and AMD SVM TSC ratio allow the guest TSC read +by guest rdtsc/p increasing in a different frequency than the host +TSC frequency. + +If a HVM container in default TSC mode (tsc_mode=0) is created on a host +that provides constant TSC, its guest TSC frequency will be the same as +the host. If it is later migrated to another host that provides constant +TSC and supports Intel VMX TSC scaling/AMD SVM TSC ratio, its guest TSC +frequency will be the same before and after migration. + +For above HVM container in default TSC mode (tsc_mode=0), if above +hosts support rdtscp, both guest rdtsc and rdtscp instructions will be +executed natively before and after migration. + +=head1 AUTHORS + +Dan Magenheimer diff --git a/docs/man/xen-vbd-interface.7.pandoc b/docs/man/xen-vbd-interface.7.pandoc new file mode 100644 index 0000000000..ba0d159dfa --- /dev/null +++ b/docs/man/xen-vbd-interface.7.pandoc @@ -0,0 +1,135 @@ +Xen guest interface +------------------- + +A Xen guest can be provided with block devices. These are always +provided as Xen VBDs; for HVM guests they may also be provided as +emulated IDE, AHCI or SCSI disks. + +The abstract interface involves specifying, for each block device: + + * Nominal disk type: Xen virtual disk (aka xvd*, the default); SCSI + (sd*); IDE or AHCI (hd*). + + For HVM guests, each whole-disk hd* and and sd* device is made + available _both_ via emulated IDE resp. SCSI controller, _and_ as a + Xen VBD. The HVM guest is entitled to assume that the IDE or SCSI + disks available via the emulated IDE controller target the same + underlying devices as the corresponding Xen VBD (ie, multipath). + In hd* case with hdtype=ahci, disk will be AHCI via emulated + ich9 disk controller. + + For PV guests every device is made available to the guest only as a + Xen VBD. For these domains the type is advisory, for use by the + guest's device naming scheme. + + The Xen interface does not specify what name a device should have + in the guest (nor what major/minor device number it should have in + the guest, if the guest has such a concept). + + * Disk number, which is a nonnegative integer, + conventionally starting at 0 for the first disk. + + * Partition number, which is a nonnegative integer where by + convention partition 0 indicates the "whole disk". + + Normally for any disk _either_ partition 0 should be supplied in + which case the guest is expected to treat it as they would a native + whole disk (for example by putting or expecting a partition table + or disk label on it); + + _Or_ only non-0 partitions should be supplied in which case the + guest should expect storage management to be done by the host and + treat each vbd as it would a partition or slice or LVM volume (for + example by putting or expecting a filesystem on it). + + Non-whole disk devices cannot be passed through to HVM guests via + the emulated IDE or SCSI controllers. + + +Configuration file syntax +------------------------- + +The config file syntaxes are, for example + + d0 d0p0 xvda Xen virtual disk 0 partition 0 (whole disk) + d1p2 xvdb2 Xen virtual disk 1 partition 2 + d536p37 xvdtq37 Xen virtual disk 536 partition 37 + sdb3 SCSI disk 1 partition 3 + hdc2 IDE disk 2 partition 2 + +The d*p* syntax is not supported by xm/xend. + +To cope with guests which predate this specification we preserve the +existing facility to specify the xenstore numerical value directly by +putting a single number (hex, decimal or octal) in the domain config +file instead of the disk identifier; this number is written directly +to xenstore (after conversion to the canonical decimal format). + + +Concrete encoding in the VBD interface (in xenstore) +---------------------------------------------------- + +The information above is encoded in the concrete interface as an +integer (in a canonical decimal format in xenstore), whose value +encodes the information above as follows: + + 1 << 28 | disk << 8 | partition xvd, disks or partitions 16 onwards + 202 << 8 | disk << 4 | partition xvd, disks and partitions up to 15 + 8 << 8 | disk << 4 | partition sd, disks and partitions up to 15 + 3 << 8 | disk << 6 | partition hd, disks 0..1, partitions 0..63 + 22 << 8 | (disk-2) << 6 | partition hd, disks 2..3, partitions 0..63 + 2 << 28 onwards reserved for future use + other values less than 1 << 28 deprecated / reserved + +The 1<<28 format handles disks up to (1<<20)-1 and partitions up to +255. It will be used only where the 202<<8 format does not have +enough bits. + +Guests MAY support any subset of the formats above except that if they +support 1<<28 they MUST also support 202<<8. PV-on-HVM drivers MUST +support at least one of 3<<8 or 8<<8; 3<<8 is recommended. + +Some software has used or understood Linux-specific encodings for SCSI +disks beyond disk 15 partition 15, and IDE disks beyond disk 3 +partition 63. These vbds, and the corresponding encoded integers, are +deprecated. + +Guests SHOULD ignore numbers that they do not understand or +recognise. They SHOULD check supplied numbers for validity. + + +Notes on Linux as a guest +------------------------- + +Very old Linux guests (PV and PV-on-HVM) are able to "steal" the +device numbers and names normally used by the IDE and SCSI +controllers, so that writing "hda1" in the config file results in +/dev/hda1 in the guest. These systems interpret the xenstore integer +as + major << 8 | minor +where major and minor are the Linux-specific device numbers. Some old +configurations may depend on deprecated high-numbered SCSI and IDE +disks. This does not work in recent versions of Linux. + +So for Linux PV guests, users are recommended to supply xvd* devices +only. Modern PV drivers will map these to identically-named devices +in the guest. + +For Linux HVM guests using PV-on-HVM drivers, users are recommended to +supply as few hd* devices as possible, and for the rest of the disks, +to use pure xvd* devices starting at xvde. Modern PV-on-HVM drivers +will map provided hd* devices to the corresponding /dev/xvd* (for +example, hda is presented also as /dev/xvda). + +Some Linux HVM guests with broken PV-on-HVM drivers do not cope +properly if both hda and hdc are supplied, nor with both hda and xvda, +because they directly map the bottom 8 bits of the xenstore integer +directly to the Linux guest's device number and throw away the rest; +they can crash due to minor number clashes. With these guests, the +workaround is not to supply problematic combinations of devices. + + +Other frontend and backend options +---------------------------------- + +See xen/include/public/io/blkif.h for the full list of options. diff --git a/docs/man/xen-vtpm.7.pod b/docs/man/xen-vtpm.7.pod new file mode 100644 index 0000000000..d033072584 --- /dev/null +++ b/docs/man/xen-vtpm.7.pod @@ -0,0 +1,383 @@ +=head1 NAME + +xen-vtpm - Xen virtual Trusted Platform Module (vTPM) subsystem + +=head1 RUBRIC + +Copyright (c) 2010-2012 United States Government, as represented by +the Secretary of Defense. All rights reserved. +November 12 2012 +Authors: Matthew Fioravante (JHUAPL), Daniel De Graaf (NSA) + +This document describes the virtual Trusted Platform Module (vTPM) subsystem +for Xen. The reader is assumed to have familiarity with building and installing +Xen, Linux, and a basic understanding of the TPM and vTPM concepts. + +=head1 INTRODUCTION + +The goal of this work is to provide a TPM functionality to a virtual guest +operating system (a DomU). This allows programs to interact with a TPM in a +virtual system the same way they interact with a TPM on the physical system. +Each guest gets its own unique, emulated, software TPM. However, each of the +vTPM's secrets (Keys, NVRAM, etc) are managed by a vTPM Manager domain, which +seals the secrets to the Physical TPM. If the process of creating each of these +domains (manager, vTPM, and guest) is trusted, the vTPM subsystem extends the +chain of trust rooted in the hardware TPM to virtual machines in Xen. Each +major component of vTPM is implemented as a separate domain, providing secure +separation guaranteed by the hypervisor. The vTPM domains are implemented in +mini-os to reduce memory and processor overhead. + +This mini-os vTPM subsystem was built on top of the previous vTPM work done by +IBM and Intel corporation. + +=head1 DESIGN OVERVIEW + +The architecture of vTPM is described below: + + +------------------+ + | Linux DomU | ... + | | ^ | + | v | | + | xen-tpmfront | + +------------------+ + | ^ + v | + +------------------+ + | mini-os/tpmback | + | | ^ | + | v | | + | vtpm-stubdom | ... + | | ^ | + | v | | + | mini-os/tpmfront | + +------------------+ + | ^ + v | + +------------------+ + | mini-os/tpmback | + | | ^ | + | v | | + | vtpmmgr-stubdom | + | | ^ | + | v | | + | mini-os/tpm_tis | + +------------------+ + | ^ + v | + +------------------+ + | Hardware TPM | + +------------------+ + +=over 4 + +=item Linux DomU + +The Linux based guest that wants to use a vTPM. There many be +more than one of these. + +=item xen-tpmfront.ko + +Linux kernel virtual TPM frontend driver. This driver +provides vTPM access to a para-virtualized Linux based DomU. + +=item mini-os/tpmback + +Mini-os TPM backend driver. The Linux frontend driver +connects to this backend driver to facilitate +communications between the Linux DomU and its vTPM. This +driver is also used by vtpmmgr-stubdom to communicate with +vtpm-stubdom. + +=item vtpm-stubdom + +A mini-os stub domain that implements a vTPM. There is a +one to one mapping between running vtpm-stubdom instances and +logical vtpms on the system. The vTPM Platform Configuration +Registers (PCRs) are all initialized to zero. + +=item mini-os/tpmfront + +Mini-os TPM frontend driver. The vTPM mini-os domain +vtpm-stubdom uses this driver to communicate with +vtpmmgr-stubdom. This driver could also be used separately to +implement a mini-os domain that wishes to use a vTPM of +its own. + +=item vtpmmgr-stubdom + +A mini-os domain that implements the vTPM manager. +There is only one vTPM manager and it should be running during +the entire lifetime of the machine. This domain regulates +access to the physical TPM on the system and secures the +persistent state of each vTPM. + +=item mini-os/tpm_tis + +Mini-os TPM version 1.2 TPM Interface Specification (TIS) +driver. This driver used by vtpmmgr-stubdom to talk directly to +the hardware TPM. Communication is facilitated by mapping +hardware memory pages into vtpmmgr-stubdom. + +=item Hardware TPM + +The physical TPM that is soldered onto the motherboard. + +=back + +=head1 INSTALLATION + +=head2 Prerequisites: + +You must have an x86 machine with a TPM on the motherboard. The only extra +software requirement for compiling vTPM is cmake. You must use libxl to manage +domains with vTPMs; 'xm' is deprecated and does not support vTPMs. + +=head2 Compiling the Xen tree: + +Compile and install the Xen tree as usual; be sure that the vTPM domains are +enabled when you run configure. + +=head2 Compiling the LINUX dom0 kernel: + +Because the TPM manager uses direct access to the physical TPM, it may interfere +with access to the TPM by dom0. The simplest solution for this is to prevent +dom0 from accessing the physical TPM by compiling the kernel without a driver or +blacklisting the module. If dom0 needs a TPM but does not need to use it during +the boot process (i.e. it is not using IMA), a virtual TPM can be attached to +dom0 after the system is booted. + +Access to the physical TPM may be required in order to manage the NVRAM or to +perform other advanced operations where the vTPM is insufficient. In order to +prevent interference, the TPM Manager and dom0 should use different values for +the TPM's locality; since Linux always uses locality 0, using locality 2 for the +TPM Manager is recommended. If both Linux and the TPM Manager attempt to access +the TPM at the same time, the TPM device will return a busy status; some +applications will consider this a fatal error instead of retrying the command at +a later time. If a vTPM gets an error when loading its key, it will currently +generate a fresh vTPM image (with a new EK, SRK, and blank NVRAM). + + +=head2 Compiling the LINUX domU kernel: + +The domU kernel used by domains with vtpms must include the xen-tpmfront.ko +driver. It can be built directly into the kernel or as a module; however, some +features such as IMA require the TPM to be built in to the kernel. + + CONFIG_TCG_TPM=y + CONFIG_TCG_XEN=y + +=head1 VTPM MANAGER SETUP + +=head2 Manager disk image setup: + +The vTPM Manager requires a disk image to store its encrypted data. The image +does not require a filesystem and can live anywhere on the host disk. The image +is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image +but can support more than 20,000 vTPMs. + +=head2 Manager config file: + +The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen +virtual machine and requires a config file. The manager requires a disk image +for storage and permission to access the hardware memory pages for the TPM. The +disk must be presented as "hda", and the TPM memory pages are passed using the +iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per +locality) that start at physical address 0xfed40000. By default, the TPM manager +uses locality 0 (so only the page at 0xfed40 is needed); this can be changed on +the domain's command line. For full functionality in deep quotes, using +locality 2 is required to manipulate PCR 20-22. + +=head2 Starting and stopping the manager: + +The vTPM manager should be started at boot; you may wish to create an init +script to do this. If a domain builder is used, the TPM Manager should be +started by the domain builder to minimize the trusted computing base for the +vTPM manager's secrets. + +Once initialization is complete you should see the following: + + INFO[VTPM]: Waiting for commands from vTPM's: + +The TPM Manager does not respond to shutdown requests; use the destroy command +to shut it down. + +=head1 VTPM AND LINUX PVM SETUP + +=head2 vTPM disk image setup: + +The vTPM requires a disk image to store its persistent data (RSA keys, NVRAM, +etc). The image does not require a filesystem. The image does not need to be +large; 2 Mb should be sufficient. + +=head2 vTPM config file: + +The vTPM domain requires a configuration file like any other domain. The vTPM +requires a disk image for storage and a TPM frontend driver to communicate with +the manager. You are required to generate a uuid for this vtpm, which is +specified on the C line that describes its connection to the vTPM Manager. +The uuidgen application may be used to generate a uuid, or one from the output +of the C command may be used to create a vTPM +belonging to a specific group. + +If you wish to clear the vTPM data you can either recreate the disk image or +change the uuid. + +=head2 Linux Guest config file: + +The Linux guest config file needs to be modified to include the Linux tpmfront +driver. Add the following line: + + vtpm=["backend=domu-vtpm"] + +Currently only Linux guests are supported (PV or HVM with PV drivers). + +While attaching a vTPM after a guest is booted (using xl vtpm-attach) is +supported, the attached vTPM will not have a record of the boot of the attached +guest. Furthermore, if the vTPM has been freshly created, a malicious guest +could then extend any values into PCRs, potentially forging its boot +configuration. Attaching a vTPM to a running domain should only be used for +trusted domains or when measurements have already been sent to the vTPM from +another source. + +=head2 Using the vTPM in the guest: + +If xen-tpmfront was compiled as a module, it must be loaded it in the guest. + + # modprobe xen-tpmfront + +After the Linux domain boots and the xen-tpmfront driver is loaded, you should +see the following on the vtpm console: + + Info: VTPM attached to Frontend X/Y + +You can quickly test the vTPM by using the sysfs interface: + + # cat /sys/devices/vtpm-0/pubek + # cat /sys/devices/vtpm-0/pcrs + +If you have trousers and tpm_tools installed on the guest, the tpm_version +command should return the following: + +The version command should return the following: + + TPM 1.2 Version Info: + Chip Version: 1.2.0.7 + Spec Level: 2 + Errata Revision: 1 + TPM Vendor ID: ETHZ + TPM Version: 01010000 + Manufacturer Info: 4554485a + +You should also see the command being sent to the vtpm console as well as the +vtpm saving its state. You should see the vtpm key being encrypted and stored on +the vtpmmgr console. + +You may wish to write a script to start your vtpm and guest together and to +destroy the vtpm when the guest shuts down. + +=head1 INTEGRATION WITH PV-GRUB + +The vTPM currently starts up with all PCRs set to their default values (all +zeros for the lower 16). This means that any decisions about the +trustworthiness of the created domain must be made based on the environment that +created the vTPM and the domU; for example, a system that only constructs images +using a trusted configuration and guest kernel be able to provide guarantees +about the guests and any measurements done that kernel (such as the IMA TCB +log). Guests wishing to use a custom kernel in such a secure environment are +often started using the pv-grub bootloader as the kernel, which then can load +the untrusted kernel without needing to parse an untrusted filesystem and kernel +in dom0. If the pv-grub stub domain succeeds in connecting to a vTPM, it will +extend the hash of the kernel that it boots into PCR #4, and will extend the +command line and initrd into PCR #5 before booting so that a domU booted in this +way can attest to its early boot state. + +=head1 MORE INFORMATION + +See for more details about how the manager domain works, how to use +it, and its command line parameters. + +=head1 VTPM DOMAIN OPERATION + +The vtpm-stubdom is a mini-OS domain that emulates a TPM for the guest OS to +use. It is a small wrapper around the Berlios TPM emulator version 0.7.4. +Commands are passed from the linux guest via the mini-os TPM backend driver. +vTPM data is encrypted and stored via a disk image provided to the virtual +machine. The key used to encrypt the data along with a hash of the vTPM's data +is sent to the vTPM manager for secure storage and later retrieval. The vTPM +domain communicates with the manager using a mini-os tpm front/back device pair. + +=head1 VTPM DOMAIN COMMAND LINE ARGUMENTS + +Command line arguments are passed to the domain via the 'extra' parameter in the +VM config file. Each parameter is separated by white space. For example: + + extra="foo=bar baz" + +=head2 List of Arguments: + +=over 4 + +=item B= + +Controls the amount of logging printed to the console. +The possible values for are: + +=over 4 + +=item * error + +=item * info (default) + +=item * debug + +=back + +=item B + +Start the Berlios emulator in "clear" mode. (default) + +=item B + +Start the Berlios emulator in "save" mode. + +=item B + +Start the Berlios emulator in "deactivated" mode. +See the Berlios TPM emulator documentation for details +about the startup mode. For all normal use, always use clear +which is the default. You should not need to specify any of these. + +=item B=<1|0> + +Enable to disable the TPM maintenance commands. +These commands are used by tpm manufacturers and thus +open a security hole. They are disabled by default. + +=item B= + +Initialize the virtual Platform Configuration Registers +(PCRs) with PCR values from the hardware TPM. Each pcr specified by + will be initialized with the value of that same PCR in TPM +once at startup. By default all PCRs are zero initialized. +Possible values of are: + +=over + +=item * all: copy all pcrs + +=item * none: copy no pcrs (default) + +=item * : copy pcr n + +=item * : copy pcrs x to y (inclusive) + +=back + +These can also be combined by comma separation, for example: +C will copy pcrs 5, 12, 13, 14, 15, and 16. + +=back + +=head1 REFERENCES + +Berlios TPM Emulator: L diff --git a/docs/man/xen-vtpmmgr.7.pod b/docs/man/xen-vtpmmgr.7.pod new file mode 100644 index 0000000000..af825a7ffe --- /dev/null +++ b/docs/man/xen-vtpmmgr.7.pod @@ -0,0 +1,383 @@ +=head1 NAME + +xen-vtpmgr - Xen virtual TPM stubdomain + +=head1 Authors + +=over 4 + +=item Daniel De Graaf + +=item Quan Xu + +=back + +This document describes the operation and command line interface of +vtpmmgr-stubdom. See L for details on the vTPM subsystem as a +whole. + +=head1 Overview + +The TPM Manager has three primary functions: + +=over 4 + +=item 1. Securely store the encryption keys for vTPMs + +=item 2. Provide a single controlled path of access to the physical TPM + +=item 3. Provide evidence (via TPM Quotes) of the current configuration + +=back + +When combined with a platform that provides a trusted method for creating +domains, the TPM Manager provides assurance that the private keys in a vTPM are +only available in specific trusted configurations. + +The manager accepts commands from the vtpm-stubdom domains via the mini-os TPM +backend driver. The vTPM manager communicates directly with hardware TPM using +the mini-os tpm_tis driver. + +=head1 Boot Configurations and TPM Groups + +The TPM Manager's data is secured by using the physical TPM's seal operation, +which allows data to be bound to specific PCRs. These PCRs are populated in the +physical TPM during the boot process, either by the firmware/BIOS or by a +dynamic launch environment such as TBOOT. In order to provide assurance of the +system's security, the PCRs used to seal the TPM manager's data must contain +measurements for domains used to bootstrap the TPM Manager and vTPMs. + +Because these measurements are based on hashes, they will change any time that +any component of the system is upgraded. Since it is not possible to construct a +list of all possible future good measurements, the job of approving +configurations is delegated to a third party, referred to here as the system +approval agent (SAA). The SAA is identified by its public (RSA) signature key, +which is used to sign lists of valid configurations. A single TPM manager can +support multiple SAAs via the use of vTPM groups. Each group is associated with +a single SAA; this allows the creation of a multi-tenant environment where +tenants may not all choose to trust the same SAA. + +Each vTPM is bound to a vTPM group at the time of its creation. Each vTPM group +has its own AIK in the physical TPM for quotes of the hardware TPM state; when +used with a conforming Privacy CA, this allows each group on the system to form +the basis of a distinct identity. + +=head1 Initial Provisioning + +When the TPM Manager first boots up, it will create a stub vTPM group along with +entries for any vTPMs that communicate with it. This stub group must be +provisioned with an SAA and a boot configuration in order to survive a reboot. + +When a vTPM is connected to the TPM Manager using a UUID that is not recognized, +a slot will be created in group 0 for it. In the future, this auto-creation may +be restricted to specific UUIDs (such as the all-zero UUID) to enforce the use +of the TPM manager as the generator of the UUID. The first vTPM to be connected +is given administrative privileges for the TPM Manager, and should be attached +to dom0 or a control domain in order to send provisioning commands. + +Provisioning a vTPM group for the system requires the public key of the SAA and +privacy CA data used to certify the AIK (see the TPM spec for details). Once the +group is created, a signed list of boot measurements can be installed. The +initial group controls the ability to boot the system as a whole, and cannot be +deleted once provisioned. + +=head1 Command Line Arguments + +Command line arguments are passed to the domain via the 'extra' parameter in the +VM config file. Each parameter is separated by white space. For example: + + extra="foo=bar baz" + +Valid arguments: + +=over 4 + +=item owner_auth= + +=item srk_auth= + +Set the owner and SRK authdata for the TPM. If not specified, the +default is 160 zero bits (the well-known auth value). Valid values of + are: + +=over 4 + +=item well-known + +Use the well known auth (default) + +=item hash: + +Use the given 40-character ASCII hex string + +=item text: + +Use sha1 hash of . + +=back + +=item tpmdriver= + +Choose the driver used for communication with the hardware TPM. Values +other than tpm_tis should only be used for testing. + +The possible values of are: + +=over 4 + +=item tpm_tis + +Direct communication with a hardware TPM 1.2. The +domain must have access to TPM IO memory. (default) + +=item tpmfront + +Use the Xen tpmfront interface to talk to another +domain which provides access to the TPM. + +=back + +=back + +The following options only apply to the tpm_tis driver: + +=over 4 + +=item tpmiomem= + +The base address of the hardware memory pages of the TPM. +The default is 0xfed40000, as defined by the TCG's PC Client spec. + +=item tpmirq= + +The irq of the hardware TPM if using interrupts. A value of +"probe" can be set to probe for the irq. A value of 0 disables +interrupts and uses polling (default 0). + +=item tpmlocality= + +Attempt to use locality of the hardware TPM. +For full functionality of the TPM Manager, this should be set to "2". + +=back + +=head1 Platform Security Assumptions + +While the TPM Manager has the ability to check the hash of the vTPM requesting a +key, there is currently no trusted method to inform the TPM Manager of the hash +of each new domain. Because of this, the TPM Manager trusts the UUID key in +Xenstore to identify a vTPM in a trusted manner. The XSM policy may be used to +strengthen this assumption if the creation of vTPM-labeled domains is more +constrained (for example, only permitted to a domain builder service): the only +grants mapped by the TPM Manager should belong to vTPM domains, so restricting +the ability to map other domain's granted pages will prevent other domains from +directly requesting keys from the TPM Manager. The TPM Manager uses the hash of +the XSM label of the attached vTPM as the kernel hash, so vTPMs with distinct +labels may be further partitioned using vTPM groups. + +A domain with direct access to the hardware TPM will be able to decrypt the TPM +Manager's disk image if the haredware TPM's PCR values are in a permitted +configuration. To protect the TPM Manager's data, the list of permitted +configurations should be chosen to include PCRs that measure the hypervisor, +domain 0, the TPM Manager, and other critical configuration such as the XSM +policy. If the TPM Manager is configured to use locality 2 as recommended, it +is safe to permit the hardware domain to access locality 0 (the default in +Linux), although concurrent use of the TPM should be avoided as it can result in +unexpected busy errors from the TPM driver. The ability to access locality 2 of +the TPM should be enforced using IO memory labeling in the XSM policy; the +physical address 0xFED42xxx is always locality 2 for TPMs using the TIS driver. + +=head1 Appendix: unsecured migration process for vtpmmgr domain upgrade + +There is no direct upgrade supported from previous versions of the vtpmmgr +domain due to changes in the on-disk format and the method used to seal data. +If a vTPM domain supports migration, this feature should be used to migrate the +vTPM's data; however, the vTPM packaged with Xen does not yet support migration. + +If adding migration support to the vTPM is not desired, a simpler migration +domain usable only for local migration can be constructed. The migration process +would look like the following: + +=over 4 + +=item 1. Start the old vtpmmgr + +=item 2. Start the vTPM migration domain + +=item 3. Attach the vTPM migration domain's vtpm/0 device to the old vtpmmgr + +=item 4. Migration domain executes vtpmmgr_LoadHashKey on vtpm/0 + +=item 5. Start the new vtpmmgr, possibly shutting down the old one first + +=item 6. Attach the vTPM migration domain's vtpm/1 device to the new vtpmmgr + +=item 7. Migration domain executes vtpmmgr_SaveHashKey on vtpm/1 + +=back + +This requires the migration domain to be added to the list of valid vTPM kernel +hashes. In the current version of the vtpmmgr domain, this is the hash of the +XSM label, not the kernel. + +=head1 Appendix B: vtpmmgr on TPM 2.0 + +=head2 Manager disk image setup: + +The vTPM Manager requires a disk image to store its encrypted data. The image +does not require a filesystem and can live anywhere on the host disk. The image +is not large; the Xen 4.5 vtpmmgr is limited to using the first 2MB of the image +but can support more than 20,000 vTPMs. + + dd if=/dev/zero of=/home/vtpm2/vmgr bs=16M count=1 + +=head2 Manager config file: + +The vTPM Manager domain (vtpmmgr-stubdom) must be started like any other Xen +virtual machine and requires a config file. The manager requires a disk image +for storage and permission to access the hardware memory pages for the TPM. The +disk must be presented as "hda", and the TPM memory pages are passed using the +iomem configuration parameter. The TPM TIS uses 5 pages of IO memory (one per +locality) that start at physical address 0xfed40000. By default, the TPM manager +uses locality 0 (so only the page at 0xfed40 is needed). + +Add: + + extra="tpm2=1" + +extra option to launch vtpmmgr-stubdom domain on TPM 2.0, and ignore it on TPM +1.x. for example: + + kernel="/usr/lib/xen/boot/vtpmmgr-stubdom.gz" + memory=128 + disk=["file:/home/vtpm2/vmgr,hda,w"] + name="vtpmmgr" + iomem=["fed40,5"] + extra="tpm2=1" + + +=head2 Key Hierarchy + + +------------------+ + | vTPM's secrets | ... + +------------------+ + | ^ + | |(Bind / Unbind) +- - - - - -v |- - - - - - - - TPM 2.0 + +------------------+ + | SK + + +------------------+ + | ^ + v | + +------------------+ + | SRK | + +------------------+ + | ^ + v | + +------------------+ + | TPM 2.0 Storage | + | Primary Seed | + +------------------+ + +Now the secrets for the vTPMs are only being bound to the presence of thephysical +TPM 2.0. Since using PCRs to seal the data can be an important security feature +that users of the vtpmmgr rely on. I will replace TPM2_Bind/TPM2_Unbind with +TPM2_Seal/TPM2_Unseal to provide as much security as it did for TPM 1.2 in later +series of patch. + +=head2 Design Overview + +The architecture of vTPM subsystem on TPM 2.0 is described below: + + +------------------+ + | Linux DomU | ... + | | ^ | + | v | | + | xen-tpmfront | + +------------------+ + | ^ + v | + +------------------+ + | mini-os/tpmback | + | | ^ | + | v | | + | vtpm-stubdom | ... + | | ^ | + | v | | + | mini-os/tpmfront | + +------------------+ + | ^ + v | + +------------------+ + | mini-os/tpmback | + | | ^ | + | v | | + | vtpmmgr-stubdom | + | | ^ | + | v | | + | mini-os/tpm2_tis | + +------------------+ + | ^ + v | + +------------------+ + | Hardware TPM 2.0 | + +------------------+ + +=over 4 + +=item Linux DomU + +The Linux based guest that wants to use a vTPM. There many be +more than one of these. + +=item xen-tpmfront.ko + +Linux kernel virtual TPM frontend driver. This driver +provides vTPM access to a para-virtualized Linux based DomU. + +=item mini-os/tpmback + +Mini-os TPM backend driver. The Linux frontend driver +connects to this backend driver to facilitate +communications between the Linux DomU and its vTPM. This +driver is also used by vtpmmgr-stubdom to communicate with +vtpm-stubdom. + +=item vtpm-stubdom + +A mini-os stub domain that implements a vTPM. There is a +one to one mapping between running vtpm-stubdom instances and +logical vtpms on the system. The vTPM Platform Configuration +Registers (PCRs) are all initialized to zero. + +=item mini-os/tpmfront + +Mini-os TPM frontend driver. The vTPM mini-os domain +vtpm-stubdom uses this driver to communicate with +vtpmmgr-stubdom. This driver could also be used separately to +implement a mini-os domain that wishes to use a vTPM of +its own. + +=item vtpmmgr-stubdom + +A mini-os domain that implements the vTPM manager. +There is only one vTPM manager and it should be running during +the entire lifetime of the machine. This domain regulates +access to the physical TPM on the system and secures the +persistent state of each vTPM. + +=item mini-os/tpm2_tis + +Mini-os TPM version 2.0 TPM Interface Specification (TIS) +driver. This driver used by vtpmmgr-stubdom to talk directly +to the hardware TPM 2.0. Communication is facilitated by mapping +hardware memory pages into vtpmmgr-stubdom. + +=item Hardware TPM 2.0 + +The physical TPM 2.0 that is soldered onto the motherboard. + +=back + +Noted: + functionality for a virtual guest operating system (a DomU) is still TPM 1.2. diff --git a/docs/man/xenhypfs.1.pod b/docs/man/xenhypfs.1.pod new file mode 100644 index 0000000000..d5553b1150 --- /dev/null +++ b/docs/man/xenhypfs.1.pod @@ -0,0 +1,60 @@ +=head1 NAME + +xenhypfs - Xen tool to access Xen hypervisor file system + +=head1 SYNOPSIS + +B I [I] [I] + +=head1 DESCRIPTION + +The B program is used to access the Xen hypervisor file system. +It can be used to show the available entries, to show their contents and +(if allowed) to modify their contents. + +=head1 SUBCOMMANDS + +=over 4 + +=item B I + +List the available entries below I. + +=item B [I<-b>] I + +Show the contents of the entry specified by I. Non-printable characters +other than white space characters (like tab, new line) will be shown as +B<\xnn> (B being a two digit hex number) unless the option B<-b> is +specified. + +=item B I I + +Set the contents of the entry specified by I to I. + +=item B + +Show all the entries of the file system as a tree. + +=back + +=head1 RETURN CODES + +=over 4 + +=item B<0> + +Success + +=item B<1> + +Invalid usage (e.g. unknown subcommand, unknown option, missing parameter). + +=item B<2> + +Entry not found while traversing the tree. + +=item B<3> + +Access right violation. + +=back diff --git a/docs/man/xenstore-chmod.1.pod b/docs/man/xenstore-chmod.1.pod new file mode 100644 index 0000000000..d76f34723d --- /dev/null +++ b/docs/man/xenstore-chmod.1.pod @@ -0,0 +1,62 @@ +=head1 NAME + +xenstore-chmod - set the permissions of a Xenstore key + +=head1 SYNOPSIS + +B [I