pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

(sysutils/xentools48) copied and three adhoc patches added



Module Name:	pkgsrc-wip
Committed By:	Makoto Fujiwara (CF-SX3) <makoto%ki.nu@localhost>
Pushed By:	mef
Date:		Wed Jan 1 20:24:58 2020 +0900
Changeset:	4dee9816d2c7cd01419decbf075ad9cd893910c7

Added Files:
	xentools48/DESCR
	xentools48/MESSAGE
	xentools48/MESSAGE.NetBSD
	xentools48/Makefile
	xentools48/PLIST
	xentools48/distinfo
	xentools48/files/blk_netbsd.c
	xentools48/files/blktapctrl_netbsd.c
	xentools48/files/locking.sh
	xentools48/files/xen-watchdog.sh
	xentools48/files/xencommons.sh
	xentools48/files/xendomains.sh
	xentools48/patches/patch-.._ipxe_src_core_settings.c
	xentools48/patches/patch-.._ipxe_src_net_fcels.c
	xentools48/patches/patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h
	xentools48/patches/patch-._stubdom_vtpmmgr_tpm2_marshal.h
	xentools48/patches/patch-Config.mk
	xentools48/patches/patch-Makefile
	xentools48/patches/patch-docs_man_xl.cfg.pod.5.in
	xentools48/patches/patch-docs_man_xl.conf.pod.5
	xentools48/patches/patch-docs_man_xl.pod.1.in
	xentools48/patches/patch-docs_man_xlcpupool.cfg.pod.5
	xentools48/patches/patch-docs_misc_xl-disk-configuration.txt
	xentools48/patches/patch-extras_mini-os_Config.mk
	xentools48/patches/patch-extras_mini-os_arch_x86_arch.mk
	xentools48/patches/patch-extras_mini-os_include_fcntl.h
	xentools48/patches/patch-extras_mini-os_include_time.h
	xentools48/patches/patch-extras_mini-os_lib_sys.c
	xentools48/patches/patch-extras_mini-os_lock.c
	xentools48/patches/patch-m4_paths.m4
	xentools48/patches/patch-stubdom_Makefile
	xentools48/patches/patch-stubdom_newlib.patch
	xentools48/patches/patch-stubdom_vtpmmgr_marshal.h
	xentools48/patches/patch-stubdom_vtpmmgr_tcg.h
	xentools48/patches/patch-stubdom_vtpmmgr_tpmrsa.h
	xentools48/patches/patch-stubdom_vtpmmgr_vtpm_manager.h
	xentools48/patches/patch-stubdom_vtpmmgr_vtpmmgr.h
	xentools48/patches/patch-tools_Makefile
	xentools48/patches/patch-tools_Rules.mk
	xentools48/patches/patch-tools_configure
	xentools48/patches/patch-tools_console_daemon_utils.c
	xentools48/patches/patch-tools_debugger_gdbsx_Makefile
	xentools48/patches/patch-tools_examples_Makefile
	xentools48/patches/patch-tools_firmware_etherboot_Makefile
	xentools48/patches/patch-tools_firmware_hvmloader_Makefile
	xentools48/patches/patch-tools_hotplug_NetBSD_Makefile
	xentools48/patches/patch-tools_hotplug_NetBSD_block
	xentools48/patches/patch-tools_hotplug_NetBSD_vif-bridge
	xentools48/patches/patch-tools_hotplug_NetBSD_vif-ip
	xentools48/patches/patch-tools_hotplug_common_Makefile
	xentools48/patches/patch-tools_include_xen-sys_NetBSD_gntdev.h
	xentools48/patches/patch-tools_libs_call_netbsd.c
	xentools48/patches/patch-tools_libs_call_private.h
	xentools48/patches/patch-tools_libs_evtchn_netbsd.c
	xentools48/patches/patch-tools_libs_foreignmemory_compat.c
	xentools48/patches/patch-tools_libs_foreignmemory_netbsd.c
	xentools48/patches/patch-tools_libs_foreignmemory_private.h
	xentools48/patches/patch-tools_libxl_Makefile
	xentools48/patches/patch-tools_libxl_libxl__create.c
	xentools48/patches/patch-tools_libxl_libxl_dom.c
	xentools48/patches/patch-tools_libxl_libxl_event.c
	xentools48/patches/patch-tools_libxl_libxl_internal.h
	xentools48/patches/patch-tools_libxl_libxl_uuid.c
	xentools48/patches/patch-tools_libxl_xl__cmdtable.c
	xentools48/patches/patch-tools_libxl_xl_cmdimpl.c
	xentools48/patches/patch-tools_misc_xenlockprof.c
	xentools48/patches/patch-tools_ocaml_common.make
	xentools48/patches/patch-tools_ocaml_libs_xc_xenctl_stubs.c
	xentools48/patches/patch-tools_ocaml_xenstored_Makefile
	xentools48/patches/patch-tools_ocaml_xenstored_define.ml
	xentools48/patches/patch-tools_ocaml_xenstored_utils.ml
	xentools48/patches/patch-tools_pygrub_Makefile
	xentools48/patches/patch-tools_qemu-xen-traditional_Makefile
	xentools48/patches/patch-tools_qemu-xen-traditional_block-raw-posix.c
	xentools48/patches/patch-tools_qemu-xen-traditional_configure
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_e1000.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_ide.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.h
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_piix4acpi.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-graphics.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.c
	xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.h
	xentools48/patches/patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak
	xentools48/patches/patch-tools_qemu-xen-traditional_net.c
	xentools48/patches/patch-tools_qemu-xen-traditional_xen-hooks.mak
	xentools48/patches/patch-tools_qemu-xen_audio_audio.c
	xentools48/patches/patch-tools_qemu-xen_configure
	xentools48/patches/patch-tools_qemu-xen_qemu-doc.texi
	xentools48/patches/patch-tools_qemu-xen_xen-hvm.c
	xentools48/patches/patch-tools_xenpaging_xenpaging.c
	xentools48/patches/patch-tools_xenpmd_xenpmd.c
	xentools48/patches/patch-tools_xenstore_xc.c
	xentools48/patches/patch-tools_xenstore_xs_lib.c
	xentools48/patches/patch-tools_xentrace_xentrace.c

Log Message:
(sysutils/xentools48) copied and three adhoc patches added

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=4dee9816d2c7cd01419decbf075ad9cd893910c7

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 xentools48/DESCR                                   |   5 +
 xentools48/MESSAGE                                 |  11 +
 xentools48/MESSAGE.NetBSD                          |  17 +
 xentools48/Makefile                                | 310 +++++++++++
 xentools48/PLIST                                   | 486 +++++++++++++++++
 xentools48/distinfo                                | 129 +++++
 xentools48/files/blk_netbsd.c                      |  38 ++
 xentools48/files/blktapctrl_netbsd.c               |  16 +
 xentools48/files/locking.sh                        |  72 +++
 xentools48/files/xen-watchdog.sh                   |  17 +
 xentools48/files/xencommons.sh                     | 107 ++++
 xentools48/files/xendomains.sh                     | 129 +++++
 .../patches/patch-.._ipxe_src_core_settings.c      |  34 ++
 xentools48/patches/patch-.._ipxe_src_net_fcels.c   | 124 +++++
 ..._newlib-1.16.0_newlib_libc_include_sys__types.h |  16 +
 .../patches/patch-._stubdom_vtpmmgr_tpm2_marshal.h | 491 +++++++++++++++++
 xentools48/patches/patch-Config.mk                 |  22 +
 xentools48/patches/patch-Makefile                  |  29 +
 xentools48/patches/patch-docs_man_xl.cfg.pod.5.in  |  29 +
 xentools48/patches/patch-docs_man_xl.conf.pod.5    |  37 ++
 xentools48/patches/patch-docs_man_xl.pod.1.in      |  44 ++
 .../patches/patch-docs_man_xlcpupool.cfg.pod.5     |  28 +
 .../patch-docs_misc_xl-disk-configuration.txt      |  13 +
 xentools48/patches/patch-extras_mini-os_Config.mk  |  17 +
 .../patches/patch-extras_mini-os_arch_x86_arch.mk  |  22 +
 .../patches/patch-extras_mini-os_include_fcntl.h   |  12 +
 .../patches/patch-extras_mini-os_include_time.h    |  12 +
 xentools48/patches/patch-extras_mini-os_lib_sys.c  |  15 +
 xentools48/patches/patch-extras_mini-os_lock.c     |  11 +
 xentools48/patches/patch-m4_paths.m4               |  16 +
 xentools48/patches/patch-stubdom_Makefile          | 296 +++++++++++
 xentools48/patches/patch-stubdom_newlib.patch      |  26 +
 xentools48/patches/patch-stubdom_vtpmmgr_marshal.h | 587 +++++++++++++++++++++
 xentools48/patches/patch-stubdom_vtpmmgr_tcg.h     | 129 +++++
 xentools48/patches/patch-stubdom_vtpmmgr_tpmrsa.h  |  12 +
 .../patches/patch-stubdom_vtpmmgr_vtpm_manager.h   |  12 +
 xentools48/patches/patch-stubdom_vtpmmgr_vtpmmgr.h |  12 +
 xentools48/patches/patch-tools_Makefile            |  39 ++
 xentools48/patches/patch-tools_Rules.mk            |  91 ++++
 xentools48/patches/patch-tools_configure           |  39 ++
 .../patches/patch-tools_console_daemon_utils.c     |  22 +
 .../patches/patch-tools_debugger_gdbsx_Makefile    |  15 +
 xentools48/patches/patch-tools_examples_Makefile   |  12 +
 .../patch-tools_firmware_etherboot_Makefile        |  26 +
 .../patch-tools_firmware_hvmloader_Makefile        |  13 +
 .../patches/patch-tools_hotplug_NetBSD_Makefile    |  52 ++
 .../patches/patch-tools_hotplug_NetBSD_block       |  37 ++
 .../patches/patch-tools_hotplug_NetBSD_vif-bridge  |  16 +
 .../patches/patch-tools_hotplug_NetBSD_vif-ip      |  15 +
 .../patches/patch-tools_hotplug_common_Makefile    |  24 +
 .../patch-tools_include_xen-sys_NetBSD_gntdev.h    | 110 ++++
 xentools48/patches/patch-tools_libs_call_netbsd.c  |  55 ++
 xentools48/patches/patch-tools_libs_call_private.h |  16 +
 .../patches/patch-tools_libs_evtchn_netbsd.c       |  22 +
 .../patch-tools_libs_foreignmemory_compat.c        |  14 +
 .../patch-tools_libs_foreignmemory_netbsd.c        |  48 ++
 .../patch-tools_libs_foreignmemory_private.h       |  13 +
 xentools48/patches/patch-tools_libxl_Makefile      |  22 +
 .../patches/patch-tools_libxl_libxl__create.c      |  40 ++
 xentools48/patches/patch-tools_libxl_libxl_dom.c   |  13 +
 xentools48/patches/patch-tools_libxl_libxl_event.c |  24 +
 .../patches/patch-tools_libxl_libxl_internal.h     |  23 +
 xentools48/patches/patch-tools_libxl_libxl_uuid.c  |  22 +
 .../patches/patch-tools_libxl_xl__cmdtable.c       |  13 +
 xentools48/patches/patch-tools_libxl_xl_cmdimpl.c  |  49 ++
 xentools48/patches/patch-tools_misc_xenlockprof.c  |  15 +
 xentools48/patches/patch-tools_ocaml_common.make   |  31 ++
 .../patch-tools_ocaml_libs_xc_xenctl_stubs.c       |  15 +
 .../patches/patch-tools_ocaml_xenstored_Makefile   |  12 +
 .../patches/patch-tools_ocaml_xenstored_define.ml  |  13 +
 .../patches/patch-tools_ocaml_xenstored_utils.ml   |  13 +
 xentools48/patches/patch-tools_pygrub_Makefile     |  13 +
 .../patch-tools_qemu-xen-traditional_Makefile      |  84 +++
 ...ch-tools_qemu-xen-traditional_block-raw-posix.c |  62 +++
 .../patch-tools_qemu-xen-traditional_configure     |  41 ++
 .../patch-tools_qemu-xen-traditional_hw_e1000.c    |  34 ++
 .../patch-tools_qemu-xen-traditional_hw_ide.c      |  37 ++
 ...ch-tools_qemu-xen-traditional_hw_pass-through.c |  13 +
 ...ch-tools_qemu-xen-traditional_hw_pass-through.h |  18 +
 ...patch-tools_qemu-xen-traditional_hw_piix4acpi.c |  17 +
 ...tch-tools_qemu-xen-traditional_hw_pt-graphics.c |  13 +
 .../patch-tools_qemu-xen-traditional_hw_pt-msi.c   |  15 +
 .../patch-tools_qemu-xen-traditional_hw_pt-msi.h   |  12 +
 ...ls_qemu-xen-traditional_i386-dm_hookstarget.mak |  12 +
 .../patches/patch-tools_qemu-xen-traditional_net.c |  46 ++
 .../patch-tools_qemu-xen-traditional_xen-hooks.mak |  47 ++
 .../patches/patch-tools_qemu-xen_audio_audio.c     |  12 +
 xentools48/patches/patch-tools_qemu-xen_configure  |  14 +
 .../patches/patch-tools_qemu-xen_qemu-doc.texi     |  15 +
 xentools48/patches/patch-tools_qemu-xen_xen-hvm.c  |  13 +
 .../patches/patch-tools_xenpaging_xenpaging.c      |  18 +
 xentools48/patches/patch-tools_xenpmd_xenpmd.c     |  37 ++
 xentools48/patches/patch-tools_xenstore_xc.c       |  18 +
 xentools48/patches/patch-tools_xenstore_xs_lib.c   |  13 +
 xentools48/patches/patch-tools_xentrace_xentrace.c |  13 +
 95 files changed, 4984 insertions(+)

diffs:
diff --git a/xentools48/DESCR b/xentools48/DESCR
new file mode 100644
index 0000000000..fca8ef8c5b
--- /dev/null
+++ b/xentools48/DESCR
@@ -0,0 +1,5 @@
+The Xen virtual machine monitor allows running several virtual machines
+on a single physical machine.  The xentools48 package contains the
+tools to create, destroy and control the virtual machines.
+
+This package contains the tools for Xen 4.8.x
diff --git a/xentools48/MESSAGE b/xentools48/MESSAGE
new file mode 100644
index 0000000000..fd054518d1
--- /dev/null
+++ b/xentools48/MESSAGE
@@ -0,0 +1,11 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.1 2017/03/30 09:15:09 bouyer Exp $
+
+Please note that the xm command has been removed.
+You have to switch to the xl command, which is now functional on NetBSD.
+
+Also note that the rc.d scripts have been updated in this version.
+If you don't use PKG_RCD_SCRIPTS=YES then it is very important for
+you to copy the new rc.d scripts to /etc/rc.d.
+
+===========================================================================
diff --git a/xentools48/MESSAGE.NetBSD b/xentools48/MESSAGE.NetBSD
new file mode 100644
index 0000000000..f6703f0b6c
--- /dev/null
+++ b/xentools48/MESSAGE.NetBSD
@@ -0,0 +1,17 @@
+===========================================================================
+$NetBSD: MESSAGE.NetBSD,v 1.1 2017/03/30 09:15:09 bouyer Exp $
+
+Please ensure that the Xen-specific devices needed by xend(8) exist:
+
+	cd /dev && sh MAKEDEV xen
+
+There are example configuration files for setting up a guest domain in:
+
+	${EGDIR}/
+
+Please also refer to the the "NetBSD/xen How-To" for more information on
+creating a Xen setup:
+
+	http://www.NetBSD.org/ports/xen/howto.html
+
+===========================================================================
diff --git a/xentools48/Makefile b/xentools48/Makefile
new file mode 100644
index 0000000000..c21b700479
--- /dev/null
+++ b/xentools48/Makefile
@@ -0,0 +1,310 @@
+# $NetBSD: Makefile,v 1.30 2019/11/04 21:28:59 rillig Exp $
+#
+VERSION=	4.8.5
+VERSION_IPXE=	827dd1bfee67daa683935ce65316f7e0f057fe1c
+DIST_IPXE=	ipxe-git-${VERSION_IPXE}.tar.gz
+DIST_NEWLIB=	newlib-1.16.0.tar.gz
+DIST_LWIP=	lwip-1.3.0.tar.gz
+DIST_GRUB=	grub-0.97.tar.gz
+DIST_GMP=	gmp-4.3.2.tar.bz2
+DIST_OCAML=	ocaml-3.11.0.tar.gz
+DIST_POLARSSL=	polarssl-1.1.4-gpl.tgz
+DIST_TPMEMU=	tpm_emulator-0.7.4.tar.gz
+DIST_ZLIB=	zlib-1.2.3.tar.gz
+DIST_LIBPCI=	pciutils-2.2.9.tar.bz2
+
+DIST_SUBDIR=		xen48
+DISTNAME=		xen-${VERSION}
+PKGNAME=		xentools48-${VERSION}
+CATEGORIES=		sysutils
+MASTER_SITES=		https://downloads.xenproject.org/release/xen/${VERSION}/
+
+#PKGREVISION=		0
+
+DISTFILES=		${DISTNAME}.tar.gz
+
+XEN_EXTFILES=		http://xenbits.xensource.com/xen-extfiles/
+DISTFILES+=		${DIST_IPXE}
+SITES.${DIST_IPXE} +=	${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_NEWLIB}
+SITES.${DIST_NEWLIB} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_LWIP}
+SITES.${DIST_LWIP} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_GRUB}
+SITES.${DIST_GRUB} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_GMP}
+SITES.${DIST_GMP} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_OCAML}
+SITES.${DIST_OCAML} +=		http://caml.inria.fr/pub/distrib/ocaml-3.11/
+
+DISTFILES+=			${DIST_POLARSSL}
+SITES.${DIST_POLARSSL} +=	${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_TPMEMU}
+SITES.${DIST_TPMEMU} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_ZLIB}
+SITES.${DIST_ZLIB} +=		${XEN_EXTFILES}
+
+DISTFILES+=			${DIST_LIBPCI}
+SITES.${DIST_LIBPCI} +=		${XEN_EXTFILES}
+
+MAINTAINER=		bouyer%NetBSD.org@localhost
+HOMEPAGE=		https://xenproject.org/
+COMMENT=		Userland Tools for Xen 4.8.x
+LICENSE=		gnu-gpl-v2
+
+# XXX add version check: Xen requires dev86 >= 0.16.14
+BUILD_DEPENDS+=	dev86-[0-9]*:../../devel/dev86 # needed to build firmware
+.if !exists(/usr/bin/iasl)
+BUILD_DEPENDS+=	acpica-utils-[0-9]*:../../sysutils/acpica-utils
+.endif
+DEPENDS+=	${PYPKGPREFIX}-curses>=0:../../devel/py-curses
+
+PKG_SYSCONFSUBDIR=	xen
+
+ONLY_FOR_PLATFORM=	Linux-2.6*-x86_64
+ONLY_FOR_PLATFORM+=	NetBSD-[5-9].*-x86_64
+
+SSP_SUPPORTED=		no
+
+CONFLICTS+=		libxen-[0-9]*
+CONFLICTS+=		xenstoretools-[0-9]*
+
+CHECK_PORTABILITY_SKIP=	tools/examples/* \
+			tools/qemu-xen/scripts/qemu-binfmt-conf.sh
+CHECK_RELRO_SKIP=	libexec/xen/boot/hvmloader
+
+EGDIR=			${PREFIX}/share/examples/xen
+MESSAGE_SUBST+=		EGDIR=${EGDIR}
+
+USE_TOOLS+=		pod2man gmake pkg-config makeinfo perl bash cmake
+USE_LANGUAGES=		c
+
+GNU_CONFIGURE=		YES
+#CONFIGURE_ARGS+=	--enable-xenapi
+CONFIGURE_ARGS+=	--disable-seabios
+
+CONFIGURE_ARGS+=	--sysconfdir=${PKG_SYSCONFBASE}
+
+MAKE_ENV+=		PREFIX=${prefix:Q} WRKSRC=${WRKSRC}
+MAKE_ENV+=		APPEND_LIB=${LDFLAGS:Q}
+MAKE_ENV+=		XEN_EXAMPLES_DIR=${EGDIR}
+MAKE_ENV+=		MV=${MV:Q} PYTHON=${PYTHONBIN:Q} SED=${SED:Q}
+MAKE_ENV+=		V=YES
+MAKE_ENV+=		NO_WERROR=1
+
+PYTHON_VERSIONS_ACCEPTED=	27
+
+PY_PATCHPLIST=		yes
+REPLACE_PYTHON+=	tools/misc/xen-bugtool tools/misc/xen-ringwatch
+REPLACE_PYTHON+=	tools/misc/xencons
+REPLACE_PYTHON+=	tools/misc/xenpvnetboot tools/misc/xensymoops
+REPLACE_PYTHON+=	tools/python/scripts/convert-legacy-stream
+REPLACE_PYTHON+=	tools/python/scripts/verify-stream-v2
+REPLACE_PYTHON+=	tools/xenmon/xenmon.py
+
+REPLACE_BASH+=		stubdom/stubdom-dm
+
+SUBST_CLASSES+=		perlpath
+SUBST_STAGE.perlpath=	pre-configure
+SUBST_FILES.perlpath=	tools/misc/xencov_split
+SUBST_FILES.perlpath+=	tools/firmware/rombios/makesym.perl
+SUBST_FILES.perlpath+=	tools/qemu-xen-traditional/texi2pod.pl
+SUBST_FILES.perlpath+=	tools/examples/xeninfo.pl
+SUBST_FILES.perlpath+=	tools/include/xen-external/bsd-sys-queue-h-seddery
+SUBST_FILES.perlpath+=	tools/qemu-xen/scripts/texi2pod.pl
+SUBST_FILES.perlpath+=	tools/qemu-xen/scripts/get_maintainer.pl
+SUBST_FILES.perlpath+=	tools/qemu-xen/scripts/checkpatch.pl
+SUBST_FILES.perlpath+=	tools/libxl/libxl_save_msgs_gen.pl
+SUBST_FILES.perlpath+=	tools/libxl/check-libxl-api-rules
+SUBST_FILES.perlpath+=	../ipxe/src/drivers/infiniband/qib_genbits.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/catrom.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/diffsize.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/disrom.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/get-pci-ids
+SUBST_FILES.perlpath+=	../ipxe/src/util/licence.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/mergerom.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/modrom.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/padimg.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/parserom.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/sortobjdump.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/swapdevids.pl
+SUBST_FILES.perlpath+=	../ipxe/src/util/symcheck.pl
+SUBST_SED.perlpath=	-e "s|/usr/bin/perl|${PREFIX}/bin/perl|g"
+
+SUBST_CLASSES+=		pathsvar
+SUBST_STAGE.pathsvar=	pre-configure
+SUBST_FILES.pathsvar=	tools/Makefile \
+			tools/hotplug/Linux/init.d/sysconfig.xendomains
+SUBST_SED.pathsvar=	-e "s|/var/lib|${VARBASE}/run|g"
+
+SUBST_CLASSES+=		conf
+SUBST_STAGE.conf=	pre-configure
+SUBST_FILES.conf+=	tools/ocaml/xenstored/define.ml
+SUBST_FILES.conf+=	tools/libxl/xl_cmdtable.c
+SUBST_FILES.conf+=	docs/misc/xl-disk-configuration.txt
+SUBST_SED.conf=		-e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g"
+
+XEND_SCRIPTS=		block vif-bridge vif-ip qemu-ifup hotplugpath.sh locking.sh
+
+SUBST_CLASSES.NetBSD+=	proc
+SUBST_STAGE.proc=	pre-configure
+SUBST_FILES.proc+=	tools/ocaml/xenstored/define.ml
+SUBST_SED.proc=		-e "s|/proc|/kern|g"
+
+OPSYSVARS+=		PROCPATH
+PROCPATH.NetBSD=	/kern
+PROCPATH.*=		/proc
+
+.include "../../mk/bsd.prefs.mk"
+
+SUBST_CLASSES+=		procdev
+SUBST_STAGE.procdev=	pre-configure
+SUBST_FILES.procdev=	tools/ocaml/xenstored/define.ml
+.if ${OPSYS} == "NetBSD"
+SUBST_SED.procdev=	-e "s|@PROCDEV@|/dev|g"
+.else
+SUBST_SED.procdev=	-e "s|@PROCDEV@|/proc/xen|g"
+.endif
+
+.if ${OPSYS} == "NetBSD"
+MESSAGE_SRC=		${.CURDIR}/MESSAGE ${.CURDIR}/MESSAGE.NetBSD
+.endif
+
+RCD_SCRIPTS=		xen-watchdog xencommons xendomains
+FILES_SUBST+=		RCD_INTERPRETER=${PYTHONBIN:Q}
+FILES_SUBST+=		PROCPATH=${PROCPATH:Q}
+FILES_SUBST+=		PKG_SYSCONFDIR=${PKG_SYSCONFDIR}
+FILES_SUBST+=		PREFIX=${PREFIX}
+
+CONF_FILES+=		${EGDIR}/xl.conf ${PKG_SYSCONFDIR}/xl.conf
+CONF_FILES+=		${EGDIR}/oxenstored.conf ${PKG_SYSCONFDIR}/oxenstored.conf
+
+OWN_DIRS=		${PKG_SYSCONFDIR}/scripts ${VARBASE}/log/xen
+
+.for s in ${XEND_SCRIPTS}
+CONF_FILES_PERMS+=	${EGDIR}/scripts/${s} ${PKG_SYSCONFDIR}/scripts/${s} \
+			${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 0755
+.endfor
+
+pre-build:
+	rm -f ${WRKSRC}/check/check_x11_devel
+	${CP} -f ${FILESDIR}/locking.sh  ${WRKSRC}/tools/hotplug/NetBSD/
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xenstore-chmod.pod.1 |\
+	    pod2man -n xenstore-chmod >${WRKDIR}/xenstore-chmod.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xenstore-ls.pod.1 |\
+	    pod2man -n xenstore-ls >${WRKDIR}/xenstore-ls.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xenstore.pod.1 |\
+	    pod2man -n xenstore >${WRKDIR}/xenstore.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xentop.pod.1 |\
+	    pod2man -n xentop >${WRKDIR}/xentop.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xentrace.pod.8 |\
+	    pod2man -n xentrace >${WRKDIR}/xentrace.8
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xentrace_format.pod.1 |\
+	    pod2man -n xenstore_format >${WRKDIR}/xentrace_format.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xl.cfg.pod.5.in |\
+	    pod2man -n xl.cfg >${WRKDIR}/xl.cfg.5
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xl.conf.pod.5 |\
+	    pod2man -n xl.conf >${WRKDIR}/xl.conf.5
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xl.pod.1.in |\
+	    pod2man -n xl >${WRKDIR}/xl.1
+	${SED} -e "s,@XENDCONFDIR@,${PKG_SYSCONFDIR},g" \
+		${WRKSRC}/docs/man/xlcpupool.cfg.pod.5 |\
+	    pod2man -n xlcpupool.cfg >${WRKDIR}/xlcpupool.cfg.5
+
+INSTALLATION_DIRS=	${EGDIR} ${PKGMANDIR}/man1 ${PKGMANDIR}/man5
+INSTALLATION_DIRS+=	${PKGMANDIR}/man8 share/doc/xen
+
+BUILD_DEFS+=		VARBASE
+
+.if (${OPSYS} == "NetBSD")
+TARGET_CC=	${PREFIX}/gcc48/bin/gcc
+.else
+TARGET_CC=	gcc
+.endif
+
+do-build:
+	cd ${WRKSRC} && ${BUILD_MAKE_CMD} build-tools
+	cd ${WRKSRC} && ${BUILD_MAKE_CMD} build-stubdom
+
+do-install:
+	cd ${WRKSRC} && ${BUILD_MAKE_CMD} DESTDIR=${DESTDIR} install-tools
+	cd ${WRKSRC} && ${BUILD_MAKE_CMD} DESTDIR=${DESTDIR} install-stubdom
+
+post-install:
+	${INSTALL_MAN} ${WRKDIR}/xenstore-chmod.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xenstore-ls.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xenstore.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xentop.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xentrace.8 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man8
+	${INSTALL_MAN} ${WRKDIR}/xentrace_format.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xl.cfg.5 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man5
+	${INSTALL_MAN} ${WRKDIR}/xl.conf.5 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man5
+	${INSTALL_MAN} ${WRKDIR}/xl.1 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1
+	${INSTALL_MAN} ${WRKDIR}/xlcpupool.cfg.5 ${DESTDIR}${PREFIX}/${PKGMANDIR}/man5
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/channel.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/console.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/dump-core-format.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xen-command-line.markdown ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xenmon.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xenstore-paths.markdown ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xenstore.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xl-disk-configuration.txt ${DESTDIR}${PREFIX}/share/doc/xen
+	${INSTALL_DATA} ${WRKSRC}/docs/misc/xl-network-configuration.markdown ${DESTDIR}${PREFIX}/share/doc/xen
+
+.if (${OPSYS} == "NetBSD" && \
+    (empty(OS_VERSION:M6.99.[3-9]?) && empty(OS_VERSION:M[7-9].*)))
+CPPFLAGS+=	-Dshm_open=open -Dshm_unlink=unlink
+.endif
+
+.include "../../mk/compiler.mk"
+.if !empty(PKGSRC_COMPILER:Mclang)
+EXTRA_HOSTCFLAGS+=	-Wno-error=ignored-attributes
+EXTRA_CFLAGS+=	-Wno-error=ignored-attributes -no-integrated-as \
+		-Wno-error=tautological-compare -Wno-error=null-dereference \
+		-Wno-error=empty-body -Wno-error=self-assign \
+		-Wno-error=sometimes-uninitialized \
+		-Wno-error=unused-function -Wno-error=format \
+		-Wno-error=unused-const-variable \
+		-Wno-error=gnu-designator -Wno-error=uninitialized \
+		-Wno-error=parentheses-equality \
+		-Wno-error=enum-conversion \
+		-Wno-error=address-of-packed-member
+BUILDLINK_TRANSFORM+=	rm:-falign-jumps=1 rm:-falign-loops=1 \
+			rm:-mpreferred-stack-boundary=2
+.endif
+
+MAKE_ENV+=	EXTRA_HOSTCFLAGS=${EXTRA_HOSTCFLAGS:Q} EXTRA_CFLAGS=${EXTRA_CFLAGS:M*:Q} TARGET_CC=${TARGET_CC}
+
+.include "../../lang/python/application.mk"
+.include "../../lang/python/extension.mk"
+#.include "../../devel/SDL/buildlink3.mk"
+.include "../../lang/ocaml/buildlink3.mk"
+.include "../../devel/ocaml-findlib/buildlink3.mk"
+.include "../../sysutils/pciutils/buildlink3.mk"
+.include "../../devel/glib2/buildlink3.mk"
+.include "../../devel/yajl/buildlink3.mk"
+.include "../../devel/argp/buildlink3.mk"
+.include "../../security/libgcrypt/buildlink3.mk"
+.include "../../x11/pixman/buildlink3.mk"
+.if (${OPSYS} == "NetBSD")
+.include "../../lang/gcc48/buildlink3.mk"
+.endif
+
+.include "../../mk/curses.buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/xentools48/PLIST b/xentools48/PLIST
new file mode 100644
index 0000000000..555c60f6f4
--- /dev/null
+++ b/xentools48/PLIST
@@ -0,0 +1,486 @@
+@comment $NetBSD: PLIST,v 1.1 2017/03/30 09:15:09 bouyer Exp $
+${PYSITELIB}/fsimage.so
+${PYSITELIB}/grub/ExtLinuxConf.py
+${PYSITELIB}/grub/ExtLinuxConf.pyc
+${PYSITELIB}/grub/GrubConf.py
+${PYSITELIB}/grub/GrubConf.pyc
+${PYSITELIB}/grub/LiloConf.py
+${PYSITELIB}/grub/LiloConf.pyc
+${PYSITELIB}/grub/__init__.py
+${PYSITELIB}/grub/__init__.pyc
+${PYSITELIB}/xen/__init__.py
+${PYSITELIB}/xen/__init__.pyc
+${PYSITELIB}/xen/lowlevel/__init__.py
+${PYSITELIB}/xen/lowlevel/__init__.pyc
+${PYSITELIB}/xen/lowlevel/xc.so
+${PYSITELIB}/xen/lowlevel/xs.so
+${PYSITELIB}/xen/migration/__init__.py
+${PYSITELIB}/xen/migration/__init__.pyc
+${PYSITELIB}/xen/migration/legacy.py
+${PYSITELIB}/xen/migration/legacy.pyc
+${PYSITELIB}/xen/migration/libxc.py
+${PYSITELIB}/xen/migration/libxc.pyc
+${PYSITELIB}/xen/migration/libxl.py
+${PYSITELIB}/xen/migration/libxl.pyc
+${PYSITELIB}/xen/migration/public.py
+${PYSITELIB}/xen/migration/public.pyc
+${PYSITELIB}/xen/migration/tests.py
+${PYSITELIB}/xen/migration/tests.pyc
+${PYSITELIB}/xen/migration/verify.py
+${PYSITELIB}/xen/migration/verify.pyc
+${PYSITELIB}/xen/migration/xl.py
+${PYSITELIB}/xen/migration/xl.pyc
+bin/pygrub
+bin/qemu-img-xen
+bin/xen-cpuid
+bin/xen-detect
+bin/xenalyze
+bin/xencons
+bin/xencov_split
+bin/xenstore
+bin/xenstore-chmod
+bin/xenstore-control
+bin/xenstore-exists
+bin/xenstore-list
+bin/xenstore-ls
+bin/xenstore-read
+bin/xenstore-rm
+bin/xenstore-watch
+bin/xenstore-write
+bin/xentrace_format
+include/_libxl_list.h
+include/_libxl_types.h
+include/_libxl_types_json.h
+include/fsimage.h
+include/fsimage_grub.h
+include/fsimage_plugin.h
+include/libxl.h
+include/libxl_event.h
+include/libxl_json.h
+include/libxl_utils.h
+include/libxl_uuid.h
+include/libxlutil.h
+include/xen/COPYING
+include/xen/arch-arm.h
+include/xen/arch-arm/hvm/save.h
+include/xen/arch-x86/cpufeatureset.h
+include/xen/arch-x86/cpuid.h
+include/xen/arch-x86/hvm/save.h
+include/xen/arch-x86/hvm/start_info.h
+include/xen/arch-x86/pmu.h
+include/xen/arch-x86/xen-mca.h
+include/xen/arch-x86/xen-x86_32.h
+include/xen/arch-x86/xen-x86_64.h
+include/xen/arch-x86/xen.h
+include/xen/arch-x86_32.h
+include/xen/arch-x86_64.h
+include/xen/callback.h
+include/xen/dom0_ops.h
+include/xen/domctl.h
+include/xen/elfnote.h
+include/xen/errno.h
+include/xen/event_channel.h
+include/xen/features.h
+include/xen/foreign/arm32.h
+include/xen/foreign/arm64.h
+include/xen/foreign/x86_32.h
+include/xen/foreign/x86_64.h
+include/xen/gcov.h
+include/xen/grant_table.h
+include/xen/hvm/e820.h
+include/xen/hvm/hvm_info_table.h
+include/xen/hvm/hvm_op.h
+include/xen/hvm/hvm_vcpu.h
+include/xen/hvm/hvm_xs_strings.h
+include/xen/hvm/ioreq.h
+include/xen/hvm/params.h
+include/xen/hvm/pvdrivers.h
+include/xen/hvm/save.h
+include/xen/io/blkif.h
+include/xen/io/console.h
+include/xen/io/fbif.h
+include/xen/io/fsif.h
+include/xen/io/kbdif.h
+include/xen/io/libxenvchan.h
+include/xen/io/netif.h
+include/xen/io/pciif.h
+include/xen/io/protocols.h
+include/xen/io/ring.h
+include/xen/io/tpmif.h
+include/xen/io/usbif.h
+include/xen/io/vscsiif.h
+include/xen/io/xenbus.h
+include/xen/io/xs_wire.h
+include/xen/kexec.h
+include/xen/memory.h
+include/xen/nmi.h
+include/xen/physdev.h
+include/xen/platform.h
+include/xen/pmu.h
+include/xen/sched.h
+include/xen/sys/evtchn.h
+include/xen/sys/gntdev.h
+include/xen/sys/privcmd.h
+include/xen/sysctl.h
+include/xen/tmem.h
+include/xen/trace.h
+include/xen/vcpu.h
+include/xen/version.h
+include/xen/vm_event.h
+include/xen/xen-compat.h
+include/xen/xen.h
+include/xen/xencomm.h
+include/xen/xenoprof.h
+include/xen/xsm/flask_op.h
+include/xencall.h
+include/xenctrl.h
+include/xenctrl_compat.h
+include/xenevtchn.h
+include/xenforeignmemory.h
+include/xengnttab.h
+include/xenguest.h
+include/xenstat.h
+include/xenstore-compat/xs.h
+include/xenstore-compat/xs_lib.h
+include/xenstore.h
+include/xenstore_lib.h
+include/xentoollog.h
+include/xs.h
+include/xs_lib.h
+lib/fs/ext2fs/fsimage.so
+lib/fs/fat/fsimage.so
+lib/fs/iso9660/fsimage.so
+lib/fs/reiserfs/fsimage.so
+lib/fs/ufs/fsimage.so
+lib/fs/xfs/fsimage.so
+lib/fs/zfs/fsimage.so
+lib/libfsimage.so
+lib/libfsimage.so.1.0
+lib/libfsimage.so.1.0.0
+lib/libxencall.a
+lib/libxencall.so
+lib/libxencall.so.1
+lib/libxencall.so.1.0
+lib/libxenctrl.a
+lib/libxenctrl.so
+lib/libxenctrl.so.4.8
+lib/libxenctrl.so.4.8.0
+lib/libxenevtchn.a
+lib/libxenevtchn.so
+lib/libxenevtchn.so.1
+lib/libxenevtchn.so.1.0
+lib/libxenforeignmemory.a
+lib/libxenforeignmemory.so
+lib/libxenforeignmemory.so.1
+lib/libxenforeignmemory.so.1.0
+lib/libxengnttab.a
+lib/libxengnttab.so
+lib/libxengnttab.so.1
+lib/libxengnttab.so.1.1
+lib/libxenguest.a
+lib/libxenguest.so
+lib/libxenguest.so.4.8
+lib/libxenguest.so.4.8.0
+lib/libxenlight.a
+lib/libxenlight.so
+lib/libxenlight.so.4.8
+lib/libxenlight.so.4.8.0
+lib/libxenstat.a
+lib/libxenstat.so
+lib/libxenstat.so.0
+lib/libxenstat.so.0.0
+lib/libxenstore.a
+lib/libxenstore.so
+lib/libxenstore.so.3.0
+lib/libxenstore.so.3.0.3
+lib/libxentoollog.a
+lib/libxentoollog.so
+lib/libxentoollog.so.1
+lib/libxentoollog.so.1.0
+lib/libxlutil.a
+lib/libxlutil.so
+lib/libxlutil.so.4.8
+lib/libxlutil.so.4.8.0
+lib/ocaml/site-lib/xenbus/META
+lib/ocaml/site-lib/xenbus/dllxenbus_stubs.so
+lib/ocaml/site-lib/xenbus/libxenbus_stubs.a
+lib/ocaml/site-lib/xenbus/xenbus.a
+lib/ocaml/site-lib/xenbus/xenbus.cma
+lib/ocaml/site-lib/xenbus/xenbus.cmi
+lib/ocaml/site-lib/xenbus/xenbus.cmo
+lib/ocaml/site-lib/xenbus/xenbus.cmx
+lib/ocaml/site-lib/xenbus/xenbus.cmxa
+lib/ocaml/site-lib/xenctrl/META
+lib/ocaml/site-lib/xenctrl/dllxenctrl_stubs.so
+lib/ocaml/site-lib/xenctrl/libxenctrl_stubs.a
+lib/ocaml/site-lib/xenctrl/xenctrl.a
+lib/ocaml/site-lib/xenctrl/xenctrl.cma
+lib/ocaml/site-lib/xenctrl/xenctrl.cmi
+lib/ocaml/site-lib/xenctrl/xenctrl.cmx
+lib/ocaml/site-lib/xenctrl/xenctrl.cmxa
+lib/ocaml/site-lib/xeneventchn/META
+lib/ocaml/site-lib/xeneventchn/dllxeneventchn_stubs.so
+lib/ocaml/site-lib/xeneventchn/libxeneventchn_stubs.a
+lib/ocaml/site-lib/xeneventchn/xeneventchn.a
+lib/ocaml/site-lib/xeneventchn/xeneventchn.cma
+lib/ocaml/site-lib/xeneventchn/xeneventchn.cmi
+lib/ocaml/site-lib/xeneventchn/xeneventchn.cmx
+lib/ocaml/site-lib/xeneventchn/xeneventchn.cmxa
+lib/ocaml/site-lib/xenlight/META
+lib/ocaml/site-lib/xenlight/dllxenlight_stubs.so
+lib/ocaml/site-lib/xenlight/libxenlight_stubs.a
+lib/ocaml/site-lib/xenlight/xenlight.a
+lib/ocaml/site-lib/xenlight/xenlight.cma
+lib/ocaml/site-lib/xenlight/xenlight.cmi
+lib/ocaml/site-lib/xenlight/xenlight.cmx
+lib/ocaml/site-lib/xenlight/xenlight.cmxa
+lib/ocaml/site-lib/xenmmap/META
+lib/ocaml/site-lib/xenmmap/dllxenmmap_stubs.so
+lib/ocaml/site-lib/xenmmap/libxenmmap_stubs.a
+lib/ocaml/site-lib/xenmmap/xenmmap.a
+lib/ocaml/site-lib/xenmmap/xenmmap.cma
+lib/ocaml/site-lib/xenmmap/xenmmap.cmi
+lib/ocaml/site-lib/xenmmap/xenmmap.cmx
+lib/ocaml/site-lib/xenmmap/xenmmap.cmxa
+lib/ocaml/site-lib/xenstore/META
+lib/ocaml/site-lib/xenstore/xenstore.a
+lib/ocaml/site-lib/xenstore/xenstore.cma
+lib/ocaml/site-lib/xenstore/xenstore.cmi
+lib/ocaml/site-lib/xenstore/xenstore.cmo
+lib/ocaml/site-lib/xenstore/xenstore.cmx
+lib/ocaml/site-lib/xenstore/xenstore.cmxa
+lib/ocaml/site-lib/xentoollog/META
+lib/ocaml/site-lib/xentoollog/dllxentoollog_stubs.so
+lib/ocaml/site-lib/xentoollog/libxentoollog_stubs.a
+lib/ocaml/site-lib/xentoollog/xentoollog.a
+lib/ocaml/site-lib/xentoollog/xentoollog.cma
+lib/ocaml/site-lib/xentoollog/xentoollog.cmi
+lib/ocaml/site-lib/xentoollog/xentoollog.cmx
+lib/ocaml/site-lib/xentoollog/xentoollog.cmxa
+lib/python2.7/site-packages/pygrub-0.3-py2.7.egg-info
+lib/python2.7/site-packages/xen-3.0-py2.7.egg-info
+libexec/xen/bin/convert-legacy-stream
+libexec/xen/bin/ivshmem-client
+libexec/xen/bin/ivshmem-server
+libexec/xen/bin/libxl-save-helper
+libexec/xen/bin/lsevtchn
+libexec/xen/bin/pygrub
+libexec/xen/bin/qemu-dm
+libexec/xen/bin/qemu-img
+libexec/xen/bin/qemu-io
+libexec/xen/bin/qemu-nbd
+libexec/xen/bin/qemu-system-i386
+libexec/xen/bin/readnotes
+libexec/xen/bin/stubdom-dm
+libexec/xen/bin/stubdompath.sh
+libexec/xen/bin/verify-stream-v2
+libexec/xen/bin/xen-init-dom0
+libexec/xen/bin/xenconsole
+libexec/xen/bin/xenctx
+libexec/xen/bin/xenpaging
+libexec/xen/bin/xenpvnetboot
+libexec/xen/boot/hvmloader
+libexec/xen/boot/ioemu-stubdom.gz
+libexec/xen/boot/pv-grub-x86_64.gz
+libexec/xen/boot/vtpm-stubdom.gz
+libexec/xen/boot/vtpmmgr-stubdom.gz
+libexec/xen/boot/xenstore-stubdom.gz
+man/man1/xenstore-chmod.1
+man/man1/xenstore-ls.1
+man/man1/xenstore.1
+man/man1/xentop.1
+man/man1/xentrace_format.1
+man/man1/xl.1
+man/man5/xl.cfg.5
+man/man5/xl.conf.5
+man/man5/xlcpupool.cfg.5
+man/man8/xentrace.8
+sbin/flask-get-bool
+sbin/flask-getenforce
+sbin/flask-label-pci
+sbin/flask-loadpolicy
+sbin/flask-set-bool
+sbin/flask-setenforce
+sbin/gdbsx
+sbin/kdd
+sbin/oxenstored
+sbin/xen-bugtool
+sbin/xen-hptool
+sbin/xen-hvmcrash
+sbin/xen-hvmctx
+sbin/xen-livepatch
+sbin/xen-lowmemd
+sbin/xen-mfndump
+sbin/xen-ringwatch
+sbin/xen-tmem-list-parse
+sbin/xenbaked
+sbin/xenconsoled
+sbin/xencov
+sbin/xenlockprof
+sbin/xenmon.py
+sbin/xenperf
+sbin/xenpm
+sbin/xenpmd
+sbin/xenstored
+sbin/xentop
+sbin/xentrace
+sbin/xentrace_setmask
+sbin/xentrace_setsize
+sbin/xenwatchdogd
+sbin/xl
+share/doc/xen/channel.txt
+share/doc/xen/console.txt
+share/doc/xen/dump-core-format.txt
+share/doc/xen/xen-command-line.markdown
+share/doc/xen/xenmon.txt
+share/doc/xen/xenstore-paths.markdown
+share/doc/xen/xenstore.txt
+share/doc/xen/xl-disk-configuration.txt
+share/doc/xen/xl-network-configuration.markdown
+share/examples/xen/README
+share/examples/xen/README.incompatibilities
+share/examples/xen/cpupool
+share/examples/xen/oxenstored.conf
+share/examples/xen/scripts/block
+share/examples/xen/scripts/hotplugpath.sh
+share/examples/xen/scripts/locking.sh
+share/examples/xen/scripts/qemu-ifup
+share/examples/xen/scripts/vif-bridge
+share/examples/xen/scripts/vif-ip
+share/examples/xen/xl.conf
+share/examples/xen/xl.sh
+share/examples/xen/xlexample.hvm
+share/examples/xen/xlexample.pvlinux
+share/pkgconfig/xenlight.pc
+share/pkgconfig/xlutil.pc
+share/qemu-xen/qemu/QEMU,cgthree.bin
+share/qemu-xen/qemu/QEMU,tcx.bin
+share/qemu-xen/qemu/acpi-dsdt.aml
+share/qemu-xen/qemu/bamboo.dtb
+share/qemu-xen/qemu/bios-256k.bin
+share/qemu-xen/qemu/bios.bin
+share/qemu-xen/qemu/efi-e1000.rom
+share/qemu-xen/qemu/efi-e1000e.rom
+share/qemu-xen/qemu/efi-eepro100.rom
+share/qemu-xen/qemu/efi-ne2k_pci.rom
+share/qemu-xen/qemu/efi-pcnet.rom
+share/qemu-xen/qemu/efi-rtl8139.rom
+share/qemu-xen/qemu/efi-virtio.rom
+share/qemu-xen/qemu/efi-vmxnet3.rom
+share/qemu-xen/qemu/keymaps/ar
+share/qemu-xen/qemu/keymaps/bepo
+share/qemu-xen/qemu/keymaps/common
+share/qemu-xen/qemu/keymaps/cz
+share/qemu-xen/qemu/keymaps/da
+share/qemu-xen/qemu/keymaps/de
+share/qemu-xen/qemu/keymaps/de-ch
+share/qemu-xen/qemu/keymaps/en-gb
+share/qemu-xen/qemu/keymaps/en-us
+share/qemu-xen/qemu/keymaps/es
+share/qemu-xen/qemu/keymaps/et
+share/qemu-xen/qemu/keymaps/fi
+share/qemu-xen/qemu/keymaps/fo
+share/qemu-xen/qemu/keymaps/fr
+share/qemu-xen/qemu/keymaps/fr-be
+share/qemu-xen/qemu/keymaps/fr-ca
+share/qemu-xen/qemu/keymaps/fr-ch
+share/qemu-xen/qemu/keymaps/hr
+share/qemu-xen/qemu/keymaps/hu
+share/qemu-xen/qemu/keymaps/is
+share/qemu-xen/qemu/keymaps/it
+share/qemu-xen/qemu/keymaps/ja
+share/qemu-xen/qemu/keymaps/lt
+share/qemu-xen/qemu/keymaps/lv
+share/qemu-xen/qemu/keymaps/mk
+share/qemu-xen/qemu/keymaps/modifiers
+share/qemu-xen/qemu/keymaps/nl
+share/qemu-xen/qemu/keymaps/nl-be
+share/qemu-xen/qemu/keymaps/no
+share/qemu-xen/qemu/keymaps/pl
+share/qemu-xen/qemu/keymaps/pt
+share/qemu-xen/qemu/keymaps/pt-br
+share/qemu-xen/qemu/keymaps/ru
+share/qemu-xen/qemu/keymaps/sl
+share/qemu-xen/qemu/keymaps/sv
+share/qemu-xen/qemu/keymaps/th
+share/qemu-xen/qemu/keymaps/tr
+share/qemu-xen/qemu/kvmvapic.bin
+share/qemu-xen/qemu/linuxboot.bin
+share/qemu-xen/qemu/linuxboot_dma.bin
+share/qemu-xen/qemu/multiboot.bin
+share/qemu-xen/qemu/openbios-ppc
+share/qemu-xen/qemu/openbios-sparc32
+share/qemu-xen/qemu/openbios-sparc64
+share/qemu-xen/qemu/palcode-clipper
+share/qemu-xen/qemu/petalogix-ml605.dtb
+share/qemu-xen/qemu/petalogix-s3adsp1800.dtb
+share/qemu-xen/qemu/ppc_rom.bin
+share/qemu-xen/qemu/pxe-e1000.rom
+share/qemu-xen/qemu/pxe-eepro100.rom
+share/qemu-xen/qemu/pxe-ne2k_pci.rom
+share/qemu-xen/qemu/pxe-pcnet.rom
+share/qemu-xen/qemu/pxe-rtl8139.rom
+share/qemu-xen/qemu/pxe-virtio.rom
+share/qemu-xen/qemu/qemu-icon.bmp
+share/qemu-xen/qemu/qemu_logo_no_text.svg
+share/qemu-xen/qemu/s390-ccw.img
+share/qemu-xen/qemu/sgabios.bin
+share/qemu-xen/qemu/slof.bin
+share/qemu-xen/qemu/spapr-rtas.bin
+share/qemu-xen/qemu/trace-events-all
+share/qemu-xen/qemu/u-boot.e500
+share/qemu-xen/qemu/vgabios-cirrus.bin
+share/qemu-xen/qemu/vgabios-qxl.bin
+share/qemu-xen/qemu/vgabios-stdvga.bin
+share/qemu-xen/qemu/vgabios-virtio.bin
+share/qemu-xen/qemu/vgabios-vmware.bin
+share/qemu-xen/qemu/vgabios.bin
+share/xen/qemu/bamboo.dtb
+share/xen/qemu/bios.bin
+share/xen/qemu/keymaps/ar
+share/xen/qemu/keymaps/common
+share/xen/qemu/keymaps/da
+share/xen/qemu/keymaps/de
+share/xen/qemu/keymaps/de-ch
+share/xen/qemu/keymaps/en-gb
+share/xen/qemu/keymaps/en-us
+share/xen/qemu/keymaps/es
+share/xen/qemu/keymaps/et
+share/xen/qemu/keymaps/fi
+share/xen/qemu/keymaps/fo
+share/xen/qemu/keymaps/fr
+share/xen/qemu/keymaps/fr-be
+share/xen/qemu/keymaps/fr-ca
+share/xen/qemu/keymaps/fr-ch
+share/xen/qemu/keymaps/hr
+share/xen/qemu/keymaps/hu
+share/xen/qemu/keymaps/is
+share/xen/qemu/keymaps/it
+share/xen/qemu/keymaps/ja
+share/xen/qemu/keymaps/lt
+share/xen/qemu/keymaps/lv
+share/xen/qemu/keymaps/mk
+share/xen/qemu/keymaps/modifiers
+share/xen/qemu/keymaps/nl
+share/xen/qemu/keymaps/nl-be
+share/xen/qemu/keymaps/no
+share/xen/qemu/keymaps/pl
+share/xen/qemu/keymaps/pt
+share/xen/qemu/keymaps/pt-br
+share/xen/qemu/keymaps/ru
+share/xen/qemu/keymaps/sl
+share/xen/qemu/keymaps/sv
+share/xen/qemu/keymaps/th
+share/xen/qemu/keymaps/tr
+share/xen/qemu/openbios-ppc
+share/xen/qemu/openbios-sparc32
+share/xen/qemu/openbios-sparc64
+share/xen/qemu/ppc_rom.bin
+share/xen/qemu/pxe-e1000.bin
+share/xen/qemu/pxe-ne2k_pci.bin
+share/xen/qemu/pxe-pcnet.bin
+share/xen/qemu/pxe-rtl8139.bin
+share/xen/qemu/vgabios-cirrus.bin
+share/xen/qemu/vgabios.bin
+share/xen/qemu/video.x
+@pkgdir share/examples/xen/auto
diff --git a/xentools48/distinfo b/xentools48/distinfo
new file mode 100644
index 0000000000..adcb37bc34
--- /dev/null
+++ b/xentools48/distinfo
@@ -0,0 +1,129 @@
+$NetBSD: distinfo,v 1.12 2019/08/30 13:23:10 bouyer Exp $
+
+SHA1 (xen48/gmp-4.3.2.tar.bz2) = c011e8feaf1bb89158bd55eaabd7ef8fdd101a2c
+RMD160 (xen48/gmp-4.3.2.tar.bz2) = a8f3f41501ece290c348aeb4444bbea40bc53e71
+SHA512 (xen48/gmp-4.3.2.tar.bz2) = 2e0b0fd23e6f10742a5517981e5171c6e88b0a93c83da701b296f5c0861d72c19782daab589a7eac3f9032152a0fc7eff7f5362db8fccc4859564a9aa82329cf
+Size (xen48/gmp-4.3.2.tar.bz2) = 1897483 bytes
+SHA1 (xen48/grub-0.97.tar.gz) = 2580626c4579bd99336d3af4482c346c95dac4fb
+RMD160 (xen48/grub-0.97.tar.gz) = 7fb5674edf0c950bd38e94f85ff1e2909aa741f0
+SHA512 (xen48/grub-0.97.tar.gz) = c2bc9ffc8583aeae71cee9ddcc4418969768d4e3764d47307da54f93981c0109fb07d84b061b3a3628bd00ba4d14a54742bc04848110eb3ae8ca25dbfbaabadb
+Size (xen48/grub-0.97.tar.gz) = 971783 bytes
+SHA1 (xen48/ipxe-git-827dd1bfee67daa683935ce65316f7e0f057fe1c.tar.gz) = 37270d4d39686e29130c51405dbabf670d37b73d
+RMD160 (xen48/ipxe-git-827dd1bfee67daa683935ce65316f7e0f057fe1c.tar.gz) = f780d33d510a83eda0c06cb9fa4732650e337640
+SHA512 (xen48/ipxe-git-827dd1bfee67daa683935ce65316f7e0f057fe1c.tar.gz) = 82ba65e1c676d32b29c71e6395c9506cab952c8f8b03f692e2b50133be8f0c0146d0f22c223262d81a4df579986fde5abc6507869f4965be4846297ef7b4b890
+Size (xen48/ipxe-git-827dd1bfee67daa683935ce65316f7e0f057fe1c.tar.gz) = 3656744 bytes
+SHA1 (xen48/lwip-1.3.0.tar.gz) = 241f917ba9dffc614346472e3c5871217ad0a91c
+RMD160 (xen48/lwip-1.3.0.tar.gz) = 72c63bf5e3b29e185c46a5fc116146ea902def83
+SHA512 (xen48/lwip-1.3.0.tar.gz) = 1465b58279af1647f909450e394fe002ca165f0ff4a0254bfa9fe0e64316f50facdde2729d79a4e632565b4500cf4d6c74192ac0dd3bc9fe09129bbd67ba089d
+Size (xen48/lwip-1.3.0.tar.gz) = 398933 bytes
+SHA1 (xen48/newlib-1.16.0.tar.gz) = 841edec33d19a9e549984982fb92445ee967e265
+RMD160 (xen48/newlib-1.16.0.tar.gz) = fa40ff43e858da3093c9f3b5b203724b9b327696
+SHA512 (xen48/newlib-1.16.0.tar.gz) = 40eb96bbc6736a16b6399e0cdb73e853d0d90b685c967e77899183446664d64570277a633fdafdefc351b46ce210a99115769a1d9f47ac749d7e82837d4d1ac3
+Size (xen48/newlib-1.16.0.tar.gz) = 12024353 bytes
+SHA1 (xen48/ocaml-3.11.0.tar.gz) = 4e9cd02f15a2334086c1538d1478ec6a99c911c8
+RMD160 (xen48/ocaml-3.11.0.tar.gz) = 4102d681086eaeb17503f9e2d4ac42a451276889
+SHA512 (xen48/ocaml-3.11.0.tar.gz) = 61cacf14d1d90a11bd0599e7ad323350f3a3f30afb4ef5eaadc2108e5d6007dafbb83e955435ee49eeb0130955215923fa72d4e56196bec2396c166a54641955
+Size (xen48/ocaml-3.11.0.tar.gz) = 2855506 bytes
+SHA1 (xen48/pciutils-2.2.9.tar.bz2) = 2871be0890f0406c7f86fa01646e23935fda789e
+RMD160 (xen48/pciutils-2.2.9.tar.bz2) = 781a3d30c5c429a0d92110a46711144f74acde06
+SHA512 (xen48/pciutils-2.2.9.tar.bz2) = 2b3d98d027e46d8c08037366dde6f0781ca03c610ef2b380984639e4ef39899ed8d8b8e4cd9c9dc54df101279b95879bd66bfd4d04ad07fef41e847ea7ae32b5
+Size (xen48/pciutils-2.2.9.tar.bz2) = 212265 bytes
+SHA1 (xen48/polarssl-1.1.4-gpl.tgz) = 3dd10bd1a8f7f58e0ef8c91cfa5ea7efd5d5f4bc
+RMD160 (xen48/polarssl-1.1.4-gpl.tgz) = da5e218d1462561006841baff747f60bb4655f08
+SHA512 (xen48/polarssl-1.1.4-gpl.tgz) = 88da614e4d3f4409c4fd3bb3e44c7587ba051e3fed4e33d526069a67e8180212e1ea22da984656f50e290049f60ddca65383e5983c0f8884f648d71f698303ad
+Size (xen48/polarssl-1.1.4-gpl.tgz) = 611340 bytes
+SHA1 (xen48/tpm_emulator-0.7.4.tar.gz) = ffa3aafcd833fdcd7483bbdb4ff862f30ffde579
+RMD160 (xen48/tpm_emulator-0.7.4.tar.gz) = ded71632d316126138f2db4a5f2051b2489ae5ff
+SHA512 (xen48/tpm_emulator-0.7.4.tar.gz) = 4928b5b82f57645be9408362706ff2c4d9baa635b21b0d41b1c82930e8c60a759b1ea4fa74d7e6c7cae1b7692d006aa5cb72df0c3b88bf049779aa2b566f9d35
+Size (xen48/tpm_emulator-0.7.4.tar.gz) = 214145 bytes
+SHA1 (xen48/xen-4.8.5.tar.gz) = 9f0db2a20a8dd61a2c70143a26b0bb54fa4e8462
+RMD160 (xen48/xen-4.8.5.tar.gz) = 167df32094c37f8e437763d1ab0499b39099ff48
+SHA512 (xen48/xen-4.8.5.tar.gz) = 514ce2b56f22429a4ba792c1d19133898960403e6b31768b4b6111c45f55266d4d0216c582d3bfdd79abca0dc880111e327f9d55e5bd33144312f4fa091e518c
+Size (xen48/xen-4.8.5.tar.gz) = 22578155 bytes
+SHA1 (xen48/zlib-1.2.3.tar.gz) = 60faeaaf250642db5c0ea36cd6dcc9f99c8f3902
+RMD160 (xen48/zlib-1.2.3.tar.gz) = 89a57e336c24f7f6eebda3a1724e14b71187e117
+SHA512 (xen48/zlib-1.2.3.tar.gz) = 021b958fcd0d346c4ba761bcf0cc40f3522de6186cf5a0a6ea34a70504ce9622b1c2626fce40675bc8282cf5f5ade18473656abc38050f72f5d6480507a2106e
+Size (xen48/zlib-1.2.3.tar.gz) = 496597 bytes
+SHA1 (patch-.._ipxe_src_core_settings.c) = 1eab2fbd8b22dde2b8aa830ae7701603486f74e4
+SHA1 (patch-.._ipxe_src_net_fcels.c) = 3b515307d8203b60815ad76bfd2a82289e05ebc5
+SHA1 (patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h) = 65ff526aa26832b930086279ed6c83862040f8ac
+SHA1 (patch-._stubdom_vtpmmgr_tpm2_marshal.h) = 30c747a53e848387e4c8d6f4dcbcab7d1b46ed12
+SHA1 (patch-Config.mk) = 7976ce94c553c2fc6badc6d41e9cb8334fea40c8
+SHA1 (patch-Makefile) = fdcd5fbb22613e55ac1b000a46b1ecbbd99eef59
+SHA1 (patch-docs_man_xl.cfg.pod.5.in) = e1ee6f2d48f6ce001c44c7ac688ea179b625b584
+SHA1 (patch-docs_man_xl.conf.pod.5) = d77e3313750db315d540d7713c95cd54d6f02938
+SHA1 (patch-docs_man_xl.pod.1.in) = 9b37ef724f2827bc05110e5456a8668257509cab
+SHA1 (patch-docs_man_xlcpupool.cfg.pod.5) = 3f6db65d95b5fc607c2fa7e2fc975e0ddbfdd5e5
+SHA1 (patch-docs_misc_xl-disk-configuration.txt) = b5c71dab9adc5ab1be38077617a8ea10b59485ec
+SHA1 (patch-extras_mini-os_Config.mk) = cb5cdb32f1b3c55abad702ab6768caf59d886ff2
+SHA1 (patch-extras_mini-os_arch_x86_arch.mk) = 8b4f1fe0e888f5b70408d2cc3a3968ce27eae5dc
+SHA1 (patch-extras_mini-os_include_fcntl.h) = 4ed18497227c8c327ee3db9d793caa4ac6254822
+SHA1 (patch-extras_mini-os_include_time.h) = ab3b0794bf892ce6a036aa889c6852d65b508596
+SHA1 (patch-extras_mini-os_lib_sys.c) = 9dd4bcab9deed5132d0fe88a0fe0d33b3fc7d09c
+SHA1 (patch-extras_mini-os_lock.c) = e28753793dee483c1ffad8ea8ed2706353046b50
+SHA1 (patch-m4_paths.m4) = 19250964fd808cad30a2aca3de011650a2788251
+SHA1 (patch-stubdom_Makefile) = 7958ef91923d58e6056abe415e62f9559eaa1f92
+SHA1 (patch-stubdom_newlib.patch) = e937cd046db217e45b1de76bd0950f514666bc12
+SHA1 (patch-stubdom_vtpmmgr_marshal.h) = 63bb39894e3c6b81b699966ddfa19cb779e916fc
+SHA1 (patch-stubdom_vtpmmgr_tcg.h) = 19e3bd41d58740392f0c0ec1c8d4dee7222b8ab4
+SHA1 (patch-stubdom_vtpmmgr_tpmrsa.h) = a3b169567e1ce3d0cebda125af3fe4f0c748c79d
+SHA1 (patch-stubdom_vtpmmgr_vtpm_manager.h) = 5d11489708f268609ea98a4cbb8b568da4ad8fdf
+SHA1 (patch-stubdom_vtpmmgr_vtpmmgr.h) = 2915a89cb9a80d8c57f314c33c4e4f74ba3b1a39
+SHA1 (patch-tools_Makefile) = 4277125963bf7521cc0f682bb48dd21b69998f3e
+SHA1 (patch-tools_Rules.mk) = 8ff6318747e3ddf703cb9b43b6405c7b0f22ee5c
+SHA1 (patch-tools_configure) = b7b26dec49388f543f42dcb389113d6a2ed96e1b
+SHA1 (patch-tools_console_daemon_utils.c) = 1c954e1edadad2607f7b87eaf2d6285be7f968ff
+SHA1 (patch-tools_debugger_gdbsx_Makefile) = bd419144660f19b13d6924dfa87f96a9eb6a3574
+SHA1 (patch-tools_examples_Makefile) = fe258fc26e4507ca2fb4363c5e2197ee06e89d64
+SHA1 (patch-tools_firmware_etherboot_Makefile) = 82aa5cb09a9654e27c4686a02a3eb1123a594342
+SHA1 (patch-tools_firmware_hvmloader_Makefile) = 02cac5e9314c4c71105f15a3c1c303c573d6583a
+SHA1 (patch-tools_hotplug_NetBSD_Makefile) = 8a2c8a9b1d3a59792a831f292131c8dfe755e20e
+SHA1 (patch-tools_hotplug_NetBSD_block) = 535ecef7cc0431a14515387e47aadea5dec79569
+SHA1 (patch-tools_hotplug_NetBSD_vif-bridge) = 6d5288c9c47fe81b388ea73f9a71ca3975df36c2
+SHA1 (patch-tools_hotplug_NetBSD_vif-ip) = cb8fd1150f6ac24fa853444618437f7d984b4282
+SHA1 (patch-tools_hotplug_common_Makefile) = 71059eddc2d7183b8b43aa976d9ae5f3a1fd75df
+SHA1 (patch-tools_include_xen-sys_NetBSD_gntdev.h) = ce4f7160e92d23afa029c9548cead180fe980ff4
+SHA1 (patch-tools_libs_call_netbsd.c) = c5e166212b0069220d9155636b41028f0f7f9e9e
+SHA1 (patch-tools_libs_call_private.h) = caeaf937ae379836c3187bee97ac0b986af53f9f
+SHA1 (patch-tools_libs_evtchn_netbsd.c) = 1abb0f128ab0702b606e22f199d297d1e9c0aae5
+SHA1 (patch-tools_libs_foreignmemory_compat.c) = d90307702b10badb8101684c38e1a32b5bba786f
+SHA1 (patch-tools_libs_foreignmemory_netbsd.c) = ac278e3b7e1077272130bf2b83ef613472ae19ea
+SHA1 (patch-tools_libs_foreignmemory_private.h) = ed97af7fef60ba8752625b19f4e7027a5bc7ac54
+SHA1 (patch-tools_libxl_Makefile) = 6ae383af726e2525c74f5d58b1a8893e55694217
+SHA1 (patch-tools_libxl_libxl__create.c) = 8d4984705fff4a3907cc2a436115c400ef732141
+SHA1 (patch-tools_libxl_libxl_dom.c) = 0c4a96523d13de65aaa71ef705c3579ee8d641f3
+SHA1 (patch-tools_libxl_libxl_event.c) = 8147122d03102eccc45c48a7d6ca1aa5d6286040
+SHA1 (patch-tools_libxl_libxl_internal.h) = 613edc0fa055b23f5dc2a2448456d3d6005337fe
+SHA1 (patch-tools_libxl_libxl_uuid.c) = 1eb8c027dbeb7e67df7475ee6e4d87220140c65b
+SHA1 (patch-tools_libxl_xl__cmdtable.c) = 073c08795af8ec828c60864a788c32e9cca31547
+SHA1 (patch-tools_libxl_xl_cmdimpl.c) = d43beffad3c6da70cb69b2b5d3cf0b48f614e2a6
+SHA1 (patch-tools_misc_xenlockprof.c) = ba317fadfcaf2fd4d3cbe2497b3f3d0788268ea6
+SHA1 (patch-tools_ocaml_common.make) = 4b845bdf3a013852109749ee18dfe28e3440d951
+SHA1 (patch-tools_ocaml_libs_xc_xenctl_stubs.c) = e2551e62e50b74868d470e9bece07c7dee0fb226
+SHA1 (patch-tools_ocaml_xenstored_Makefile) = b267702cf4090c7b45bba530e60327fced24e3e5
+SHA1 (patch-tools_ocaml_xenstored_define.ml) = 1f12a8a853b847b80e2c3bb5919ed2410a70092f
+SHA1 (patch-tools_ocaml_xenstored_utils.ml) = 560b26b6d5030838721ddb4e3d819766c3db0349
+SHA1 (patch-tools_pygrub_Makefile) = 662d296b0687e73ef459714e1276b067ad8f4de9
+SHA1 (patch-tools_qemu-xen-traditional_Makefile) = 5fbb55bf84f9856043be301d5d06530190fe9a60
+SHA1 (patch-tools_qemu-xen-traditional_block-raw-posix.c) = eb3efea4b0c7fd744f627f1926fca737ba826b99
+SHA1 (patch-tools_qemu-xen-traditional_configure) = 6a42dcac010f90439a347c0f6e886b07185cb19a
+SHA1 (patch-tools_qemu-xen-traditional_hw_e1000.c) = ec86584529cc743ea27768ad1fab523ee9fb6bea
+SHA1 (patch-tools_qemu-xen-traditional_hw_ide.c) = b541546390c6d142bc6079dbd51cfd65b5223e9e
+SHA1 (patch-tools_qemu-xen-traditional_hw_pass-through.c) = 45848fb5038bdd6def218b35dd0a6496a14102f1
+SHA1 (patch-tools_qemu-xen-traditional_hw_pass-through.h) = 6edb7a9a03d99b84801bf595c4d68acbc361bb4b
+SHA1 (patch-tools_qemu-xen-traditional_hw_piix4acpi.c) = 280265db035e239b173efd9d63b629201d2c0cfa
+SHA1 (patch-tools_qemu-xen-traditional_hw_pt-graphics.c) = b9c18042f40ccacb3f24ab0f1e3c6e1a5bf5521a
+SHA1 (patch-tools_qemu-xen-traditional_hw_pt-msi.c) = a953380dbc3e64528c39e26d2c45c0cbd3e4d738
+SHA1 (patch-tools_qemu-xen-traditional_hw_pt-msi.h) = 787447cc24518fe5ae16942d72d3038db612419d
+SHA1 (patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak) = 3fdfbb7c9c2243a4cf5dabc5a6dd13c12f9d5850
+SHA1 (patch-tools_qemu-xen-traditional_net.c) = 0999993172070db5dc8d7c7daaa4999a3edaadb8
+SHA1 (patch-tools_qemu-xen-traditional_xen-hooks.mak) = d4264675ffaa2065afa820cfd306c09390989126
+SHA1 (patch-tools_qemu-xen_audio_audio.c) = a7f47ff0350900bcb99b5515eeee162144a98cf8
+SHA1 (patch-tools_qemu-xen_configure) = 89694a58aaaece945d793572530179aaed58bfb1
+SHA1 (patch-tools_qemu-xen_qemu-doc.texi) = e72d480ec29829055f01226eaf020d4cbd100d5d
+SHA1 (patch-tools_qemu-xen_xen-hvm.c) = 8faeba31a6f6452d50437a4564b32eb0f8965333
+SHA1 (patch-tools_xenpaging_xenpaging.c) = 0a154b97f1f452a5f80f7c9a835a1f216f12f7e1
+SHA1 (patch-tools_xenpmd_xenpmd.c) = 756797ddc90184ee046aa24ca38db0fb9ec9f25e
+SHA1 (patch-tools_xenstore_xc.c) = cf49b65cba064667e13bb041d1f0099c76ab6a40
+SHA1 (patch-tools_xenstore_xs_lib.c) = e3a8f6e3b149c3ab0f4ec8dcfa455983f94e6c16
+SHA1 (patch-tools_xentrace_xentrace.c) = f964c7555f454358a39f28a2e75db8ee100a4243
diff --git a/xentools48/files/blk_netbsd.c b/xentools48/files/blk_netbsd.c
new file mode 100644
index 0000000000..7ba8d407db
--- /dev/null
+++ b/xentools48/files/blk_netbsd.c
@@ -0,0 +1,38 @@
+#include <inttypes.h>
+#include <sys/ioctl.h>
+#include <sys/disklabel.h>
+#include "tapdisk.h"
+#include "blk.h"
+
+int blk_getimagesize(int fd, uint64_t *size)
+{
+	int rc;
+	struct disklabel dl;
+
+	*size = 0;
+	rc = ioctl(fd, DIOCGDINFO, &dl);
+	if (rc) {
+		DPRINTF("ERR: DIOCGDINFO failed, couldn't stat image");
+		return -EINVAL;
+	}
+
+	*size = dl.d_secsize * dl.d_secpercyl;
+
+	return 0;
+}
+
+int blk_getsectorsize(int fd, uint64_t *sector_size)
+{
+	int rc;
+	struct disklabel dl;
+
+	*sector_size = DEV_BSIZE;
+	rc = ioctl(fd, DIOCGDINFO, &dl);
+	if (rc) {
+		DPRINTF("ERR: DIOCGDINFO failed, couldn't stat image");
+		return 0; /* fallback to DEV_BSIZE */
+	}
+
+	*sector_size = dl.d_secsize;
+	return 0;
+}
diff --git a/xentools48/files/blktapctrl_netbsd.c b/xentools48/files/blktapctrl_netbsd.c
new file mode 100644
index 0000000000..02a1e9f301
--- /dev/null
+++ b/xentools48/files/blktapctrl_netbsd.c
@@ -0,0 +1,16 @@
+
+#include "blktaplib.h"
+#include "blktapctrl.h"
+
+
+int blktap_interface_open(void)
+{
+	/* not yet implemented */
+	return -1;
+}
+
+int blktap_interface_create(int ctlfd, int *major, int *minor, blkif_t *blkif)
+{
+	/* not yet implemented */
+	return -1;
+}
diff --git a/xentools48/files/locking.sh b/xentools48/files/locking.sh
new file mode 100644
index 0000000000..88257f62b7
--- /dev/null
+++ b/xentools48/files/locking.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# Copyright (c) 2016, Christoph Badura.  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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``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 AUTHOR(S) 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.
+#
+
+LOCK_BASEDIR="$XEN_LOCK_DIR/xen-hotplug"
+
+_lockfd=9
+_have_lock=0	# lock not taken yet.
+
+SHLOCK="shlock ${_shlock_debug-}"
+
+_lock_set_vars() {
+	_lockfile="$LOCK_BASEDIR/$1.lock"
+	_lockfifo="$LOCK_BASEDIR/$1.fifo"
+}
+
+_lock_init() {
+	mkdir -p "$LOCK_BASEDIR" 2>/dev/null || true
+	mkfifo $_lockfifo 2>/dev/null || true
+}
+
+#
+# use a named pipe as condition variable
+# opening for read-only blocks when there's no writer.
+# opening for read-write never blocks but unblocks any waiting readers.
+# 
+_lock_wait_cv() {
+	eval "exec $_lockfd<  $_lockfifo ; exec $_lockfd<&-"
+}
+_lock_signal_cv() {
+	eval "exec $_lockfd<> $_lockfifo ; exec $_lockfd<&-"
+}
+
+claim_lock() {
+	_lock_set_vars $1
+	_lock_init
+	until $SHLOCK -f $_lockfile -p $$; do
+		_lock_wait_cv
+	done
+	_have_lock=1
+	# be sure to release the lock when the shell exits
+	trap "release_lock $1" 0 1 2 15
+}
+
+release_lock() {
+	_lock_set_vars $1
+	[ "$_have_lock" != 0 -a -f $_lockfile ] && rm $_lockfile
+	_have_lock=0
+	_lock_signal_cv;
+}
diff --git a/xentools48/files/xen-watchdog.sh b/xentools48/files/xen-watchdog.sh
new file mode 100644
index 0000000000..4d2a96b24c
--- /dev/null
+++ b/xentools48/files/xen-watchdog.sh
@@ -0,0 +1,17 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# PROVIDE: xen-watchdog
+# REQUIRE: DAEMON
+#
+# description: Run domain watchdog daemon
+#
+
+. /etc/rc.subr
+
+name="xenwatchdog"
+rcvar=$name
+command="@PREFIX@/sbin/xenwatchdogd"
+start_cmd="echo Starting ${name}. && PATH=${PATH}:@PREFIX@/sbin ${command} 30 15"
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/xentools48/files/xencommons.sh b/xentools48/files/xencommons.sh
new file mode 100644
index 0000000000..19d246f6cb
--- /dev/null
+++ b/xentools48/files/xencommons.sh
@@ -0,0 +1,107 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# PROVIDE: xencommons
+# REQUIRE: DAEMON
+
+. /etc/rc.subr
+
+name="xencommons"
+rcvar=$name
+start_precmd="xen_precmd"
+start_cmd="xen_startcmd"
+stop_cmd="xen_stop"
+status_cmd="xen_status"
+extra_commands="status"
+required_files="/kern/xen/privcmd"
+
+XENSTORED_PIDFILE="/var/run/xenstored.pid"
+XENCONSOLED_PIDFILE="/var/run/xenconsoled.pid"
+
+BINDIR=@PREFIX@/bin
+SBINDIR=@PREFIX@/sbin
+LIBEXEC_BIN=@PREFIX@/libexec/xen/bin
+
+xen_precmd()
+{
+	mkdir -p /var/run/xen || exit 1
+	mkdir -p /var/run/xenstored || exit 1
+}
+
+xen_startcmd()
+{
+	printf "Starting xenservices: xenstored, xenconsoled.\n"
+	if test ! -r ${required_files}; then
+		warn "${required_files} is not readable."
+	fi
+	XENSTORED_ARGS=" --pid-file ${XENSTORED_PIDFILE}"
+	if [ -n "${XENSTORED_TRACE}" ]; then
+		XENSTORED_ARGS="${XENSTORED_ARGS} -T /var/log/xen/xenstored-trace.log"
+	fi
+
+	${SBINDIR}/xenstored ${XENSTORED_ARGS}
+	sleep 5
+
+        printf "Setting domain 0 name, domid and JSON config...\n"
+        ${LIBEXEC_BIN}/xen-init-dom0
+
+	XENCONSOLED_ARGS=""
+	if [ -n "${XENCONSOLED_TRACE}" ]; then
+		XENCONSOLED_ARGS="${XENCONSOLED_ARGS} --log=${XENCONSOLED_TRACE}"
+	fi
+
+	${SBINDIR}/xenconsoled ${XENCONSOLED_ARGS}
+}
+
+xen_stop()
+{
+	pids=""
+	printf "Stopping xencommons"
+
+	rc_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
+	pids="$pids $rc_pid"
+	rc_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
+	pids="$pids $rc_pid"
+
+	kill -${sig_stop:-TERM} $pids
+	wait_for_pids $pids
+
+	printf ".\n"
+}
+
+xen_status()
+{
+	xenstored_pid=$(check_pidfile ${XENSTORED_PIDFILE} ${SBINDIR}/xenstored)
+	if test -n ${xenstored_pid}; then
+		pids="$pids $xenstored_pid"
+	fi
+
+	xenconsoled_pid=$(check_pidfile ${XENCONSOLED_PIDFILE} ${SBINDIR}/xenconsoled)
+	if test -n ${xenconsoled_pid}; then
+		pids="$pids $xenconsoled_pid"
+	fi
+
+	if test -n "$xenconsoled_pid" -a -n "$xenstored_pid";
+	then
+		echo "xencommons are running as pids $pids."
+		return 0
+	fi
+	if test -a -z "$xenconsoled_pid" -a -z "$xenstored_pid";
+	then
+		echo "xencommons are not running."
+		return 0
+	fi
+
+	if test -n "$xenstored_pid"; then
+		echo "xenstored is running as pid $xenstored_pid."
+	else
+		echo "xenstored is not running."
+	fi
+	if test -n "$xenconsoled_pid"; then
+		echo "xenconsoled is running as pid $xenconsoled_pid."
+	else
+		echo "xenconsoled is not running."
+	fi
+}
+
+load_rc_config $name
+run_rc_command "$1"
diff --git a/xentools48/files/xendomains.sh b/xentools48/files/xendomains.sh
new file mode 100644
index 0000000000..c33bf592ab
--- /dev/null
+++ b/xentools48/files/xendomains.sh
@@ -0,0 +1,129 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# PROVIDE: xendomains
+# REQUIRE: xencommons
+# KEYWORD: shutdown
+#
+# xendomains		This required variable is a whitespace-separated
+#			list of domains, e.g., xendomains="dom1 dom2 dom3".
+#
+# xendomains_config	This optional variable is a format string that
+#			represents the path to the configuration file for
+#			each domain.  "%s" is substituted with the name of
+#			the domain.  The default is "@PKG_SYSCONFDIR@/%s".
+#
+# xendomains_prehook	This optional variable is a format string that
+#			represents the command to run, if it exists, before
+#			starting each domain.  "%s" is substituted with the
+#			name of the domain.  The default is
+#			"@PKG_SYSCONFDIR@/%s-pre".
+#
+# xendomains_posthook	This optional variable is a format string that
+#			represents the command to run, if it exists, after
+#			stopping each domain.  "%s" is substituted with the
+#			name of the domain.  The default is
+#			"@PKG_SYSCONFDIR@/%s-post".
+#
+
+. /etc/rc.subr
+
+name="xendomains"
+ctl_command="@PREFIX@/sbin/xl"
+start_cmd="xendomains_start"
+stop_cmd="xendomains_stop"
+list_cmd="xendomains_list"
+extra_commands="list"
+required_files="/kern/xen/privcmd"
+
+xendomains_start()
+{
+	[ -n "$xendomains" ] || return
+
+	echo "Starting xen domains."
+	for domain in $xendomains; do
+		case "$domain" in
+		"")	continue ;;
+		esac
+
+		# Start off by running the pre-hook script if it's present.
+		if [ -n "${xendomains_prehook}" ]; then
+			cmdline=`printf "${xendomains_prehook}" $domain`
+			cmd="${cmdline%% *}"
+			if [ -x "$cmd" ]; then
+				if ! $cmdline; then
+					echo "Pre-hook \`\`$cmdline'' failed... skipping $domain."
+					continue
+				fi
+			fi
+		fi
+
+		# Ask xend to create the domain.
+		if [ -n "${xendomains_config}" ]; then
+			file=`printf "${xendomains_config}" $domain`
+			if [ -f "$file" ]; then
+				${ctl_command} create "$file"
+			fi
+		fi
+	done
+}
+
+xendomains_list() {
+	# Output a whitespace-separated list of live guest domains.
+	${ctl_command} list | awk '
+		(FNR <= 2) { next }
+		($5 !~ /s/) { s = s " " $1 }
+		END { sub(" *", "", s); print s }'
+}
+
+xendomains_stop()
+{
+	# Determine an appropriate timeout waiting for all domains to
+	# stop -- always wait at least 60s, and add 5s per active domain.
+	#
+	numdomains=$(xendomains_list | awk '{ print NF }')
+	[ $numdomains -gt 0 ] || return
+	timeout=$((60 + numdomains * 5))
+
+	# Ask xend to stop every domain, and poll xend every 10s up to the
+	# timeout period to check if all the domains are stopped.  We
+	# consider a domain in the "s" (shutdown) state to be stopped.
+	#
+	echo "Stopping xen domains."
+	for domain in $(xendomains_list); do
+		${ctl_command} shutdown -F $domain
+	done
+	while [ $timeout -gt 0 ]; do
+		livedomains=$(xendomains_list)
+		[ -n "$livedomains" ] || break
+		timeout=$((timeout - 10))
+		sleep 10
+	done
+	livedomains=$(xendomains_list)
+	if [ -n "$livedomains" ]; then
+		echo "Failed to stop: $livedomains"
+	else
+		echo "All domains stopped."
+	fi
+
+	# Finish off by running the post-hook script if it's present.
+	for domain in $xendomains; do
+		case "$domain" in
+		"")	continue ;;
+		esac
+		if [ -n "${xendomains_posthook}" ]; then
+			cmdline=`printf "${xendomains_posthook}" $domain`
+			cmd="${cmdline%% *}"
+			if [ -x "$cmd" ]; then
+				$cmdline || echo "Post-hook \`\`$cmdline'' failed."
+			fi
+		fi
+	done
+}
+
+load_rc_config $name
+
+: ${xendomains_config="@PKG_SYSCONFDIR@/%s"}
+: ${xendomains_prehook="@PKG_SYSCONFDIR@/%s-pre"}
+: ${xendomains_posthook="@PKG_SYSCONFDIR@/%s-post"}
+
+run_rc_command "$1"
diff --git a/xentools48/patches/patch-.._ipxe_src_core_settings.c b/xentools48/patches/patch-.._ipxe_src_core_settings.c
new file mode 100644
index 0000000000..16fdb177eb
--- /dev/null
+++ b/xentools48/patches/patch-.._ipxe_src_core_settings.c
@@ -0,0 +1,34 @@
+$NetBSD: patch-.._ipxe_src_core_settings.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- ../ipxe/src/core/settings.c.orig	2016-08-31 18:23:42.000000000 +0200
++++ ../ipxe/src/core/settings.c	2017-03-24 19:44:07.000000000 +0100
+@@ -304,10 +304,12 @@
+  */
+ struct settings * autovivify_child_settings ( struct settings *parent,
+ 					      const char *name ) {
++	size_t nlen = strlen(name) + 1;
+ 	struct {
+ 		struct autovivified_settings autovivified;
+-		char name[ strlen ( name ) + 1 /* NUL */ ];
++		char name[];
+ 	} *new_child;
++	size_t tlen = sizeof(*new_child) + nlen;
+ 	struct settings *settings;
+ 
+ 	/* Find target parent settings block */
+@@ -318,13 +320,13 @@
+ 		return settings;
+ 
+ 	/* Create new generic settings block */
+-	new_child = zalloc ( sizeof ( *new_child ) );
++	new_child = zalloc ( tlen );
+ 	if ( ! new_child ) {
+ 		DBGC ( parent, "Settings %p could not create child %s\n",
+ 		       parent, name );
+ 		return NULL;
+ 	}
+-	memcpy ( new_child->name, name, sizeof ( new_child->name ) );
++	memcpy ( new_child->name, name, nlen );
+ 	ref_init ( &new_child->autovivified.refcnt,
+ 		   autovivified_settings_free );
+ 	generic_settings_init ( &new_child->autovivified.generic,
diff --git a/xentools48/patches/patch-.._ipxe_src_net_fcels.c b/xentools48/patches/patch-.._ipxe_src_net_fcels.c
new file mode 100644
index 0000000000..4db9726c8a
--- /dev/null
+++ b/xentools48/patches/patch-.._ipxe_src_net_fcels.c
@@ -0,0 +1,124 @@
+$NetBSD: patch-.._ipxe_src_net_fcels.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- ../ipxe/src/net/fcels.c.orig	2015-01-25 20:27:57.000000000 +0000
++++ ../ipxe/src/net/fcels.c
+@@ -946,8 +946,11 @@ int fc_els_prli_tx ( struct fc_els *els,
+ 		     struct fc_els_prli_descriptor *descriptor, void *param ) {
+ 	struct {
+ 		struct fc_prli_frame frame;
+-		uint8_t param[descriptor->param_len];
+-	} __attribute__ (( packed )) prli;
++		uint8_t param[];
++	} __attribute__ (( packed )) *prli;
++	size_t plen = sizeof(*prli) + descriptor->param_len;
++	uint8_t prli_buf[plen];
++	prli = (void *)prli_buf;
+ 	struct fc_ulp *ulp;
+ 	int rc;
+ 
+@@ -960,22 +963,22 @@ int fc_els_prli_tx ( struct fc_els *els,
+ 	}
+ 
+ 	/* Build frame for transmission */
+-	memset ( &prli, 0, sizeof ( prli ) );
+-	prli.frame.command = fc_els_tx_command ( els, FC_ELS_PRLI );
+-	prli.frame.page_len =
+-		( sizeof ( prli.frame.page ) + sizeof ( prli.param ) );
+-	prli.frame.len = htons ( sizeof ( prli ) );
+-	prli.frame.page.type = descriptor->type;
++	memset ( prli, 0, plen );
++	prli->frame.command = fc_els_tx_command ( els, FC_ELS_PRLI );
++	prli->frame.page_len =
++		( sizeof ( prli->frame.page ) + descriptor->param_len );
++	prli->frame.len = htons ( plen );
++	prli->frame.page.type = descriptor->type;
+ 	if ( fc_els_is_request ( els ) ) {
+-		prli.frame.page.flags |= htons ( FC_PRLI_ESTABLISH );
++		prli->frame.page.flags |= htons ( FC_PRLI_ESTABLISH );
+ 	} else if ( fc_link_ok ( &ulp->link ) ) {
+-		prli.frame.page.flags |= htons ( FC_PRLI_ESTABLISH |
++		prli->frame.page.flags |= htons ( FC_PRLI_ESTABLISH |
+ 						    FC_PRLI_RESPONSE_SUCCESS );
+ 	}
+-	memcpy ( &prli.param, param, sizeof ( prli.param ) );
++	memcpy ( &prli->param, param, descriptor->param_len );
+ 
+ 	/* Transmit frame */
+-	if ( ( rc = fc_els_tx ( els, &prli, sizeof ( prli ) ) ) != 0 )
++	if ( ( rc = fc_els_tx ( els, prli, plen ) ) != 0 )
+ 		goto err_tx;
+ 
+ 	/* Drop temporary reference to ULP */
+@@ -1003,13 +1006,14 @@ int fc_els_prli_rx ( struct fc_els *els,
+ 		     void *data, size_t len ) {
+ 	struct {
+ 		struct fc_prli_frame frame;
+-		uint8_t param[descriptor->param_len];
++		uint8_t param[];
+ 	} __attribute__ (( packed )) *prli = data;
++	size_t plen = sizeof(*prli) + descriptor->param_len;
+ 	struct fc_ulp *ulp;
+ 	int rc;
+ 
+ 	/* Sanity check */
+-	if ( len < sizeof ( *prli ) ) {
++	if ( len < plen ) {
+ 		DBGC ( els, FCELS_FMT " received underlength frame:\n",
+ 		       FCELS_ARGS ( els ) );
+ 		DBGC_HDA ( els, 0, data, len );
+@@ -1018,7 +1022,7 @@ int fc_els_prli_rx ( struct fc_els *els,
+ 	}
+ 
+ 	DBGC ( els, FCELS_FMT " has parameters:\n", FCELS_ARGS ( els ) );
+-	DBGC_HDA ( els, 0, prli->param, sizeof ( prli->param ) );
++	DBGC_HDA ( els, 0, prli->param, descriptor->param_len );
+ 
+ 	/* Get ULP */
+ 	ulp = fc_ulp_get_port_id_type ( els->port, &els->peer_port_id,
+@@ -1039,7 +1043,7 @@ int fc_els_prli_rx ( struct fc_els *els,
+ 	/* Log in ULP, if applicable */
+ 	if ( prli->frame.page.flags & htons ( FC_PRLI_ESTABLISH ) ) {
+ 		if ( ( rc = fc_ulp_login ( ulp, prli->param,
+-					   sizeof ( prli->param ),
++					   descriptor->param_len,
+ 					   fc_els_is_request ( els ) ) ) != 0 ){
+ 			DBGC ( els, FCELS_FMT " could not log in ULP: %s\n",
+ 			       FCELS_ARGS ( els ), strerror ( rc ) );
+@@ -1089,15 +1093,16 @@ int fc_els_prli_detect ( struct fc_els *
+ 			 const void *data, size_t len ) {
+ 	const struct {
+ 		struct fc_prli_frame frame;
+-		uint8_t param[descriptor->param_len];
++		uint8_t param[];
+ 	} __attribute__ (( packed )) *prli = data;
++	size_t plen = sizeof(*prli) + descriptor->param_len;
+ 
+ 	/* Check for PRLI */
+ 	if ( prli->frame.command != FC_ELS_PRLI )
+ 		return -EINVAL;
+ 
+ 	/* Check for sufficient length to contain service parameter page */
+-	if ( len < sizeof ( *prli ) )
++	if ( len < plen )
+ 		return -EINVAL;
+ 
+ 	/* Check for upper-layer protocol type */
+@@ -1252,15 +1257,16 @@ static int fc_els_echo_rx_request ( stru
+ 				    size_t len ) {
+ 	struct {
+ 		struct fc_echo_frame_header echo;
+-		char payload[ len - sizeof ( struct fc_echo_frame_header ) ];
++		char payload[];
+ 	} *echo = data;
++	size_t plen = suzeif(*echo) + len - sizeof ( struct fc_echo_frame_header );
+ 	int rc;
+ 
+ 	DBGC ( els, FCELS_FMT "\n", FCELS_ARGS ( els ) );
+ 
+ 	/* Transmit response */
+ 	echo->echo.command = FC_ELS_LS_ACC;
+-	if ( ( rc = fc_els_tx ( els, echo, sizeof ( *echo ) ) ) != 0 )
++	if ( ( rc = fc_els_tx ( els, echo, plen ) ) != 0 )
+ 		return rc;
+ 
+ 	/* Nothing to do */
diff --git a/xentools48/patches/patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h b/xentools48/patches/patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h
new file mode 100644
index 0000000000..891172384a
--- /dev/null
+++ b/xentools48/patches/patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-.._newlib-1.16.0_newlib_libc_include_sys__types.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- ../newlib-1.16.0/newlib/libc/include/sys/_types.h.orig	2017-03-28 15:10:39.000000000 +0200
++++ ../newlib-1.16.0/newlib/libc/include/sys/_types.h	2017-03-28 15:10:56.000000000 +0200
+@@ -52,12 +52,8 @@
+ #endif
+ 
+ #ifndef __ssize_t_defined
+-#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
+-typedef int _ssize_t;
+-#else
+ typedef long _ssize_t;
+ #endif
+-#endif
+ 
+ #define __need_wint_t
+ #include <stddef.h>
diff --git a/xentools48/patches/patch-._stubdom_vtpmmgr_tpm2_marshal.h b/xentools48/patches/patch-._stubdom_vtpmmgr_tpm2_marshal.h
new file mode 100644
index 0000000000..9a0b6cdc9a
--- /dev/null
+++ b/xentools48/patches/patch-._stubdom_vtpmmgr_tpm2_marshal.h
@@ -0,0 +1,491 @@
+$NetBSD: patch-._stubdom_vtpmmgr_tpm2_marshal.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- ./stubdom/vtpmmgr/tpm2_marshal.h.orig	2017-03-28 16:08:46.000000000 +0200
++++ ./stubdom/vtpmmgr/tpm2_marshal.h	2017-03-28 16:08:56.000000000 +0200
+@@ -52,7 +52,7 @@
+ #define pack_TPM_BUFFER(ptr, buf, size) pack_BUFFER(ptr, buf, size)
+ #define unpack_TPM_BUFFER(ptr, buf, size) unpack_BUFFER(ptr, buf, size)
+ 
+-inline BYTE* pack_BYTE_ARRAY(BYTE* ptr, const BYTE* array, UINT32 size)
++static inline BYTE* pack_BYTE_ARRAY(BYTE* ptr, const BYTE* array, UINT32 size)
+ {
+     int i;
+     for (i = 0; i < size; i++)
+@@ -60,22 +60,22 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMA_SESSION(BYTE* ptr, const TPMA_SESSION *attr)
++static inline BYTE* pack_TPMA_SESSION(BYTE* ptr, const TPMA_SESSION *attr)
+ {
+     return pack_BYTE(ptr, (BYTE)(*attr));
+ }
+ 
+-inline BYTE* unpack_TPMA_SESSION(BYTE* ptr, TPMA_SESSION *attr)
++static inline BYTE* unpack_TPMA_SESSION(BYTE* ptr, TPMA_SESSION *attr)
+ {
+     return unpack_BYTE(ptr, (BYTE *)attr);
+ }
+ 
+-inline BYTE* pack_TPMI_ALG_HASH(BYTE* ptr, const TPMI_ALG_HASH *hash)
++static inline BYTE* pack_TPMI_ALG_HASH(BYTE* ptr, const TPMI_ALG_HASH *hash)
+ {
+     return pack_UINT16(ptr, *hash);
+ }
+ 
+-inline BYTE* unpack_TPMI_ALG_HASH(BYTE *ptr, TPMI_ALG_HASH *hash)
++static inline BYTE* unpack_TPMI_ALG_HASH(BYTE *ptr, TPMI_ALG_HASH *hash)
+ {
+     return unpack_UINT16(ptr, hash);
+ }
+@@ -125,21 +125,21 @@
+ #define pack_TPMI_RH_LOCKOUT(ptr, l)            pack_TPM2_HANDLE(ptr, l)
+ #define unpack_TPMI_RH_LOCKOUT(ptr, l)          unpack_TPM2_HANDLE(ptr, l)
+ 
+-inline BYTE* pack_TPM2B_DIGEST(BYTE* ptr, const TPM2B_DIGEST *digest)
++static inline BYTE* pack_TPM2B_DIGEST(BYTE* ptr, const TPM2B_DIGEST *digest)
+ {
+     ptr = pack_UINT16(ptr, digest->size);
+     ptr = pack_BUFFER(ptr, digest->buffer, digest->size);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2B_DIGEST(BYTE* ptr, TPM2B_DIGEST *digest)
++static inline BYTE* unpack_TPM2B_DIGEST(BYTE* ptr, TPM2B_DIGEST *digest)
+ {
+     ptr = unpack_UINT16(ptr, &digest->size);
+     ptr = unpack_BUFFER(ptr, digest->buffer, digest->size);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMT_TK_CREATION(BYTE* ptr,const TPMT_TK_CREATION *ticket )
++static inline BYTE* pack_TPMT_TK_CREATION(BYTE* ptr,const TPMT_TK_CREATION *ticket )
+ {
+     ptr = pack_TPM_ST(ptr , &ticket->tag);
+     ptr = pack_TPMI_RH_HIERACHY(ptr , &ticket->hierarchy);
+@@ -147,7 +147,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMT_TK_CREATION(BYTE* ptr, TPMT_TK_CREATION *ticket )
++static inline BYTE* unpack_TPMT_TK_CREATION(BYTE* ptr, TPMT_TK_CREATION *ticket )
+ {
+     ptr = unpack_TPM_ST(ptr, &ticket->tag);
+     ptr = unpack_TPMI_RH_HIERACHY(ptr, &ticket->hierarchy);
+@@ -155,70 +155,70 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2B_NAME(BYTE* ptr,const TPM2B_NAME *name )
++static inline BYTE* pack_TPM2B_NAME(BYTE* ptr,const TPM2B_NAME *name )
+ {
+     ptr = pack_UINT16(ptr, name->size);
+     ptr = pack_TPM_BUFFER(ptr, name->name, name->size);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2B_NAME(BYTE* ptr, TPM2B_NAME *name)
++static inline BYTE* unpack_TPM2B_NAME(BYTE* ptr, TPM2B_NAME *name)
+ {
+     ptr = unpack_UINT16(ptr, &name->size);
+     ptr = unpack_TPM_BUFFER(ptr, name->name, name->size);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2B_NONCE(BYTE* ptr, const TPM2B_NONCE *nonce)
++static inline BYTE* pack_TPM2B_NONCE(BYTE* ptr, const TPM2B_NONCE *nonce)
+ {
+     return pack_TPM2B_DIGEST(ptr, (const TPM2B_DIGEST*)nonce);
+ }
+ 
+ #define unpack_TPM2B_NONCE(ptr, nonce)  unpack_TPM2B_DIGEST(ptr, (TPM2B_DIGEST*)nonce)
+ 
+-inline BYTE* pack_TPM2B_AUTH(BYTE* ptr, const TPM2B_AUTH *auth)
++static inline BYTE* pack_TPM2B_AUTH(BYTE* ptr, const TPM2B_AUTH *auth)
+ {
+     return pack_TPM2B_DIGEST(ptr, (const TPM2B_DIGEST*)auth);
+ }
+ 
+ #define unpack_TPM2B_AUTH(ptr, auth)    unpack_TPM2B_DIGEST(ptr, (TPM2B_DIGEST*)auth)
+ 
+-inline BYTE* pack_TPM2B_DATA(BYTE* ptr, const TPM2B_DATA *data)
++static inline BYTE* pack_TPM2B_DATA(BYTE* ptr, const TPM2B_DATA *data)
+ {
+     return pack_TPM2B_DIGEST(ptr, (const TPM2B_DIGEST*)data);
+ }
+ 
+ #define unpack_TPM2B_DATA(ptr, data)    unpack_TPM2B_DIGEST(ptr, (TPM2B_DIGEST*)data)
+ 
+-inline BYTE* pack_TPM2B_SENSITIVE_DATA(BYTE* ptr, const TPM2B_SENSITIVE_DATA *data)
++static inline BYTE* pack_TPM2B_SENSITIVE_DATA(BYTE* ptr, const TPM2B_SENSITIVE_DATA *data)
+ {
+     return pack_TPM2B_DIGEST(ptr, (const TPM2B_DIGEST*)data);
+ }
+ 
+ #define unpack_TPM2B_SENSITIVE_DATA(ptr, data)  unpack_TPM2B_DIGEST(ptr, (TPM2B_DIGEST*)data)
+ 
+-inline BYTE* pack_TPM2B_PUBLIC_KEY_RSA(BYTE* ptr, const TPM2B_PUBLIC_KEY_RSA *rsa)
++static inline BYTE* pack_TPM2B_PUBLIC_KEY_RSA(BYTE* ptr, const TPM2B_PUBLIC_KEY_RSA *rsa)
+ {
+     return pack_TPM2B_DIGEST(ptr, (const TPM2B_DIGEST*)rsa);
+ }
+ 
+ #define unpack_TPM2B_PUBLIC_KEY_RSA(ptr, rsa)   unpack_TPM2B_DIGEST(ptr, (TPM2B_DIGEST*)rsa)
+ 
+-inline BYTE* pack_TPM2B_PRIVATE(BYTE* ptr, const TPM2B_PRIVATE *Private)
++static inline BYTE* pack_TPM2B_PRIVATE(BYTE* ptr, const TPM2B_PRIVATE *Private)
+ {
+     ptr = pack_UINT16(ptr, Private->size);
+     ptr = pack_TPM_BUFFER(ptr, Private->buffer, Private->size);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2B_PRIVATE(BYTE* ptr, TPM2B_PRIVATE *Private)
++static inline BYTE* unpack_TPM2B_PRIVATE(BYTE* ptr, TPM2B_PRIVATE *Private)
+ {
+     ptr = unpack_UINT16(ptr, &Private->size);
+     ptr = unpack_BUFFER(ptr, Private->buffer, Private->size);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_PCR_SELECTION_ARRAY(BYTE* ptr, const TPMS_PCR_SELECTION *sel, UINT32 count)
++static inline BYTE* pack_TPMS_PCR_SELECTION_ARRAY(BYTE* ptr, const TPMS_PCR_SELECTION *sel, UINT32 count)
+ {
+     int i;
+     for (i = 0; i < count; i++) {
+@@ -229,7 +229,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMS_PCR_SELECTION_ARRAY(BYTE* ptr, TPMS_PCR_SELECTION *sel, UINT32 count)
++static inline BYTE* unpack_TPMS_PCR_SELECTION_ARRAY(BYTE* ptr, TPMS_PCR_SELECTION *sel, UINT32 count)
+ {
+     int i;
+     for (i = 0; i < count; i++) {
+@@ -240,21 +240,21 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPML_PCR_SELECTION(BYTE* ptr, const TPML_PCR_SELECTION *sel)
++static inline BYTE* pack_TPML_PCR_SELECTION(BYTE* ptr, const TPML_PCR_SELECTION *sel)
+ {
+     ptr = pack_UINT32(ptr, sel->count);
+     ptr = pack_TPMS_PCR_SELECTION_ARRAY(ptr, sel->pcrSelections, sel->count);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPML_PCR_SELECTION(BYTE* ptr, TPML_PCR_SELECTION *sel)
++static inline BYTE* unpack_TPML_PCR_SELECTION(BYTE* ptr, TPML_PCR_SELECTION *sel)
+ {
+     ptr = unpack_UINT32(ptr, &sel->count);
+     ptr = unpack_TPMS_PCR_SELECTION_ARRAY(ptr, sel->pcrSelections, sel->count);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPML_DIGEST(BYTE* ptr,TPML_DIGEST *digest)
++static inline BYTE* unpack_TPML_DIGEST(BYTE* ptr,TPML_DIGEST *digest)
+ {
+     int i;
+     ptr = unpack_UINT32(ptr, &digest->count);
+@@ -265,7 +265,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_CREATION_DATA(BYTE* ptr,const TPMS_CREATION_DATA *data)
++static inline BYTE* pack_TPMS_CREATION_DATA(BYTE* ptr,const TPMS_CREATION_DATA *data)
+ {
+     ptr = pack_TPML_PCR_SELECTION(ptr, &data->pcrSelect);
+     ptr = pack_TPM2B_DIGEST(ptr, &data->pcrDigest);
+@@ -276,7 +276,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMS_CREATION_DATA(BYTE* ptr, TPMS_CREATION_DATA *data)
++static inline BYTE* unpack_TPMS_CREATION_DATA(BYTE* ptr, TPMS_CREATION_DATA *data)
+ {
+     ptr = unpack_TPML_PCR_SELECTION(ptr, &data->pcrSelect);
+     ptr = unpack_TPM2B_DIGEST(ptr, &data->pcrDigest);
+@@ -288,28 +288,28 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2B_CREATION_DATA(BYTE* ptr, const TPM2B_CREATION_DATA *data )
++static inline BYTE* pack_TPM2B_CREATION_DATA(BYTE* ptr, const TPM2B_CREATION_DATA *data )
+ {
+     ptr = pack_UINT16(ptr, data->size);
+     ptr = pack_TPMS_CREATION_DATA(ptr, &data->creationData);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2B_CREATION_DATA(BYTE* ptr, TPM2B_CREATION_DATA * data)
++static inline BYTE* unpack_TPM2B_CREATION_DATA(BYTE* ptr, TPM2B_CREATION_DATA * data)
+ {
+     ptr = unpack_UINT16(ptr, &data->size);
+     ptr = unpack_TPMS_CREATION_DATA(ptr, &data->creationData);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_SENSITIVE_CREATE(BYTE* ptr, const TPMS_SENSITIVE_CREATE *create)
++static inline BYTE* pack_TPMS_SENSITIVE_CREATE(BYTE* ptr, const TPMS_SENSITIVE_CREATE *create)
+ {
+     ptr = pack_TPM2B_AUTH(ptr, &create->userAuth);
+     ptr = pack_TPM2B_SENSITIVE_DATA(ptr, &create->data);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2B_SENSITIVE_CREATE(BYTE* ptr, const TPM2B_SENSITIVE_CREATE *create)
++static inline BYTE* pack_TPM2B_SENSITIVE_CREATE(BYTE* ptr, const TPM2B_SENSITIVE_CREATE *create)
+ {
+     BYTE* sizePtr = ptr;
+     ptr += 2;
+@@ -318,7 +318,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMU_SYM_MODE(BYTE* ptr, const TPMU_SYM_MODE *p,
++static inline BYTE* pack_TPMU_SYM_MODE(BYTE* ptr, const TPMU_SYM_MODE *p,
+                                 const TPMI_ALG_SYM_OBJECT *sel)
+ {
+     switch(*sel) {
+@@ -336,7 +336,7 @@
+     }
+     return ptr;
+ }
+-inline BYTE* unpack_TPMU_SYM_MODE(BYTE* ptr, TPMU_SYM_MODE *p,
++static inline BYTE* unpack_TPMU_SYM_MODE(BYTE* ptr, TPMU_SYM_MODE *p,
+                                   const TPMI_ALG_SYM_OBJECT *sel)
+ {
+     switch(*sel) {
+@@ -355,7 +355,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMU_SYM_KEY_BITS(BYTE* ptr, const TPMU_SYM_KEY_BITS *p,
++static inline BYTE* pack_TPMU_SYM_KEY_BITS(BYTE* ptr, const TPMU_SYM_KEY_BITS *p,
+                                     const TPMI_ALG_SYM_OBJECT *sel)
+ {
+     switch(*sel) {
+@@ -376,7 +376,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMU_SYM_KEY_BITS(BYTE* ptr, TPMU_SYM_KEY_BITS *p,
++static inline BYTE* unpack_TPMU_SYM_KEY_BITS(BYTE* ptr, TPMU_SYM_KEY_BITS *p,
+                                       const TPMI_ALG_SYM_OBJECT *sel)
+ {
+     switch(*sel) {
+@@ -397,7 +397,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMT_SYM_DEF_OBJECT(BYTE* ptr, const TPMT_SYM_DEF_OBJECT *p)
++static inline BYTE* pack_TPMT_SYM_DEF_OBJECT(BYTE* ptr, const TPMT_SYM_DEF_OBJECT *p)
+ {
+     ptr = pack_TPMI_ALG_SYM_OBJECT(ptr, &p->algorithm);
+     ptr = pack_TPMU_SYM_KEY_BITS(ptr, &p->keyBits, &p->algorithm);
+@@ -405,7 +405,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMT_SYM_DEF_OBJECT(BYTE *ptr, TPMT_SYM_DEF_OBJECT *p)
++static inline BYTE* unpack_TPMT_SYM_DEF_OBJECT(BYTE *ptr, TPMT_SYM_DEF_OBJECT *p)
+ {
+     ptr = unpack_TPMI_ALG_SYM_OBJECT(ptr, &p->algorithm);
+     ptr = unpack_TPMU_SYM_KEY_BITS(ptr, &p->keyBits, &p->algorithm);
+@@ -416,7 +416,7 @@
+ #define pack_TPMS_SCHEME_OAEP(p, t)     pack_TPMI_ALG_HASH(p, &((t)->hashAlg))
+ #define unpack_TPMS_SCHEME_OAEP(p, t)   unpack_TPMI_ALG_HASH(p, &((t)->hashAlg))
+ 
+-inline BYTE* pack_TPMU_ASYM_SCHEME(BYTE *ptr, const TPMU_ASYM_SCHEME *p,
++static inline BYTE* pack_TPMU_ASYM_SCHEME(BYTE *ptr, const TPMU_ASYM_SCHEME *p,
+                                    const TPMI_ALG_RSA_SCHEME *s)
+ {
+     switch(*s) {
+@@ -438,7 +438,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMU_ASYM_SCHEME(BYTE *ptr, TPMU_ASYM_SCHEME *p,
++static inline BYTE* unpack_TPMU_ASYM_SCHEME(BYTE *ptr, TPMU_ASYM_SCHEME *p,
+                                      const TPMI_ALG_RSA_SCHEME *s)
+ {
+     switch(*s) {
+@@ -462,28 +462,28 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMT_RSA_SCHEME(BYTE* ptr, const TPMT_RSA_SCHEME *p)
++static inline BYTE* pack_TPMT_RSA_SCHEME(BYTE* ptr, const TPMT_RSA_SCHEME *p)
+ {
+     ptr = pack_TPMI_ALG_RSA_SCHEME(ptr, &p->scheme);
+     ptr = pack_TPMU_ASYM_SCHEME(ptr, &p->details, &p->scheme);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMT_RSA_SCHEME(BYTE* ptr, TPMT_RSA_SCHEME *p)
++static inline BYTE* unpack_TPMT_RSA_SCHEME(BYTE* ptr, TPMT_RSA_SCHEME *p)
+ {
+     ptr = unpack_TPMI_ALG_RSA_SCHEME(ptr, &p->scheme);
+     ptr = unpack_TPMU_ASYM_SCHEME(ptr, &p->details, &p->scheme);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMT_RSA_DECRYPT(BYTE* ptr, const TPMT_RSA_DECRYPT *p)
++static inline BYTE* pack_TPMT_RSA_DECRYPT(BYTE* ptr, const TPMT_RSA_DECRYPT *p)
+ {
+     ptr = pack_TPMI_ALG_RSA_SCHEME(ptr, &p->scheme);
+     ptr = pack_TPMU_ASYM_SCHEME(ptr, &p->details, &p->scheme);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_RSA_PARMS(BYTE* ptr, const TPMS_RSA_PARMS *p)
++static inline BYTE* pack_TPMS_RSA_PARMS(BYTE* ptr, const TPMS_RSA_PARMS *p)
+ {
+     ptr = pack_TPMT_SYM_DEF_OBJECT(ptr, &p->symmetric);
+     ptr = pack_TPMT_RSA_SCHEME(ptr, &p->scheme);
+@@ -492,7 +492,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMS_RSA_PARMS(BYTE *ptr, TPMS_RSA_PARMS *p)
++static inline BYTE* unpack_TPMS_RSA_PARMS(BYTE *ptr, TPMS_RSA_PARMS *p)
+ {
+     ptr = unpack_TPMT_SYM_DEF_OBJECT(ptr, &p->symmetric);
+     ptr = unpack_TPMT_RSA_SCHEME(ptr, &p->scheme);
+@@ -501,7 +501,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMU_PUBLIC_PARMS(BYTE* ptr, const TPMU_PUBLIC_PARMS *param,
++static inline BYTE* pack_TPMU_PUBLIC_PARMS(BYTE* ptr, const TPMU_PUBLIC_PARMS *param,
+                                     const TPMI_ALG_PUBLIC *selector)
+ {
+     switch(*selector) {
+@@ -518,7 +518,7 @@
+     return NULL;
+ }
+ 
+-inline BYTE* unpack_TPMU_PUBLIC_PARMS(BYTE* ptr, TPMU_PUBLIC_PARMS *param,
++static inline BYTE* unpack_TPMU_PUBLIC_PARMS(BYTE* ptr, TPMU_PUBLIC_PARMS *param,
+                                       const TPMI_ALG_PUBLIC *selector)
+ {
+     switch(*selector) {
+@@ -535,19 +535,19 @@
+     return NULL;
+ }
+ 
+-inline BYTE* pack_TPMS_ECC_POINT(BYTE* ptr, const TPMS_ECC_POINT *point)
++static inline BYTE* pack_TPMS_ECC_POINT(BYTE* ptr, const TPMS_ECC_POINT *point)
+ {
+     assert(false);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMS_ECC_POINT(BYTE* ptr, TPMS_ECC_POINT *point)
++static inline BYTE* unpack_TPMS_ECC_POINT(BYTE* ptr, TPMS_ECC_POINT *point)
+ {
+     assert(false);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMU_PUBLIC_ID(BYTE* ptr, const TPMU_PUBLIC_ID *id,
++static inline BYTE* pack_TPMU_PUBLIC_ID(BYTE* ptr, const TPMU_PUBLIC_ID *id,
+                                  const TPMI_ALG_PUBLIC *selector)
+ {
+     switch (*selector) {
+@@ -564,7 +564,7 @@
+     return NULL;
+ }
+ 
+-inline BYTE* unpack_TPMU_PUBLIC_ID(BYTE* ptr, TPMU_PUBLIC_ID *id, TPMI_ALG_PUBLIC *selector)
++static inline BYTE* unpack_TPMU_PUBLIC_ID(BYTE* ptr, TPMU_PUBLIC_ID *id, TPMI_ALG_PUBLIC *selector)
+ {
+     switch (*selector) {
+     case TPM2_ALG_KEYEDHASH:
+@@ -580,7 +580,7 @@
+     return NULL;
+ }
+ 
+-inline BYTE* pack_TPMT_PUBLIC(BYTE* ptr, const TPMT_PUBLIC *public)
++static inline BYTE* pack_TPMT_PUBLIC(BYTE* ptr, const TPMT_PUBLIC *public)
+ {
+     ptr = pack_TPMI_ALG_PUBLIC(ptr, &public->type);
+     ptr = pack_TPMI_ALG_HASH(ptr, &public->nameAlg);
+@@ -591,7 +591,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPMT_PUBLIC(BYTE* ptr, TPMT_PUBLIC *public)
++static inline BYTE* unpack_TPMT_PUBLIC(BYTE* ptr, TPMT_PUBLIC *public)
+ {
+     ptr = unpack_TPMI_ALG_PUBLIC(ptr, &public->type);
+     ptr = unpack_TPMI_ALG_HASH(ptr, &public->nameAlg);
+@@ -602,7 +602,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2B_PUBLIC(BYTE* ptr, const TPM2B_PUBLIC *public)
++static inline BYTE* pack_TPM2B_PUBLIC(BYTE* ptr, const TPM2B_PUBLIC *public)
+ {
+     BYTE *sizePtr = ptr;
+     ptr += 2;
+@@ -611,14 +611,14 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2B_PUBLIC(BYTE* ptr, TPM2B_PUBLIC *public)
++static inline BYTE* unpack_TPM2B_PUBLIC(BYTE* ptr, TPM2B_PUBLIC *public)
+ {
+     ptr = unpack_UINT16(ptr, &public->size);
+     ptr = unpack_TPMT_PUBLIC(ptr, &public->publicArea);
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_PCR_SELECTION(BYTE* ptr, const TPMS_PCR_SELECTION *selection)
++static inline BYTE* pack_TPMS_PCR_SELECTION(BYTE* ptr, const TPMS_PCR_SELECTION *selection)
+ {
+     ptr = pack_TPMI_ALG_HASH(ptr, &selection->hash);
+     ptr = pack_BYTE(ptr, selection->sizeofSelect);
+@@ -626,7 +626,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPMS_PCR_SELECTION_Array(BYTE* ptr, const TPMS_PCR_SELECTION *selections,
++static inline BYTE* pack_TPMS_PCR_SELECTION_Array(BYTE* ptr, const TPMS_PCR_SELECTION *selections,
+                                            const UINT32 cnt)
+ {
+     int i;
+@@ -635,7 +635,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM_AuthArea(BYTE* ptr, const TPM_AuthArea *auth)
++static inline BYTE* pack_TPM_AuthArea(BYTE* ptr, const TPM_AuthArea *auth)
+ {
+     BYTE* sizePtr = ptr;
+     ptr += sizeof(UINT32);
+@@ -647,7 +647,7 @@
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM_AuthArea(BYTE* ptr, TPM_AuthArea *auth)
++static inline BYTE* unpack_TPM_AuthArea(BYTE* ptr, TPM_AuthArea *auth)
+ {
+     ptr = unpack_UINT32(ptr, &auth->size);
+     ptr = unpack_TPM_RH(ptr, &auth->sessionHandle);
+@@ -657,14 +657,14 @@
+     return ptr;
+ }
+ 
+-inline BYTE* pack_TPM2_RSA_KEY(BYTE* ptr, const TPM2_RSA_KEY *key)
++static inline BYTE* pack_TPM2_RSA_KEY(BYTE* ptr, const TPM2_RSA_KEY *key)
+ {
+     ptr = pack_TPM2B_PRIVATE(ptr, &key->Private);
+     ptr = pack_TPM2B_PUBLIC(ptr, &key->Public);
+     return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM2_RSA_KEY(BYTE* ptr, TPM2_RSA_KEY *key)
++static inline BYTE* unpack_TPM2_RSA_KEY(BYTE* ptr, TPM2_RSA_KEY *key)
+ {
+     ptr = unpack_TPM2B_PRIVATE(ptr, &key->Private);
+     ptr = unpack_TPM2B_PUBLIC(ptr, &key->Public);
diff --git a/xentools48/patches/patch-Config.mk b/xentools48/patches/patch-Config.mk
new file mode 100644
index 0000000000..227a05af6b
--- /dev/null
+++ b/xentools48/patches/patch-Config.mk
@@ -0,0 +1,22 @@
+$NetBSD: patch-Config.mk,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- Config.mk.orig	2016-12-05 13:03:27.000000000 +0100
++++ Config.mk	2017-03-24 17:33:17.000000000 +0100
+@@ -35,7 +35,7 @@
+ 
+ # Tools to run on system hosting the build
+ HOSTCFLAGS  = -Wall -Werror -Wstrict-prototypes -O2 -fomit-frame-pointer
+-HOSTCFLAGS += -fno-strict-aliasing
++HOSTCFLAGS += -fno-strict-aliasing ${EXTRA_HOSTCFLAGS}
+ 
+ DISTDIR     ?= $(XEN_ROOT)/dist
+ DESTDIR     ?= /
+@@ -221,6 +221,8 @@
+ # and is a bit too fierce about unused return values
+ CFLAGS-$(clang) += -Wno-parentheses -Wno-format -Wno-unused-value
+ 
++CFLAGS += ${EXTRA_CFLAGS}
++
+ $(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)
diff --git a/xentools48/patches/patch-Makefile b/xentools48/patches/patch-Makefile
new file mode 100644
index 0000000000..5d1bb354a5
--- /dev/null
+++ b/xentools48/patches/patch-Makefile
@@ -0,0 +1,29 @@
+$NetBSD: patch-Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- Makefile.orig	2017-03-29 10:48:50.000000000 +0200
++++ Makefile	2017-03-29 10:49:33.000000000 +0200
+@@ -56,9 +56,9 @@
+ .PHONY: build-stubdom
+ build-stubdom: mini-os-dir
+ 	$(MAKE) -C stubdom build
+-ifeq (x86_64,$(XEN_TARGET_ARCH))
+-	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom pv-grub
+-endif
++#ifeq (x86_64,$(XEN_TARGET_ARCH))
++#	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom pv-grub
++#endif
+ 
+ .PHONY: build-docs
+ build-docs:
+@@ -103,9 +103,9 @@
+ .PHONY: install-stubdom
+ install-stubdom: install-tools mini-os-dir
+ 	$(MAKE) -C stubdom install
+-ifeq (x86_64,$(XEN_TARGET_ARCH))
+-	XEN_TARGET_ARCH=x86_32 $(MAKE) -C stubdom install-grub
+-endif
++#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:
diff --git a/xentools48/patches/patch-docs_man_xl.cfg.pod.5.in b/xentools48/patches/patch-docs_man_xl.cfg.pod.5.in
new file mode 100644
index 0000000000..cc1a1e0a08
--- /dev/null
+++ b/xentools48/patches/patch-docs_man_xl.cfg.pod.5.in
@@ -0,0 +1,29 @@
+$NetBSD: patch-docs_man_xl.cfg.pod.5.in,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- docs/man/xl.cfg.pod.5.in.orig	2017-03-24 17:42:46.000000000 +0100
++++ docs/man/xl.cfg.pod.5.in	2017-03-24 17:43:19.000000000 +0100
+@@ -4,13 +4,13 @@
+ 
+ =head1 SYNOPSIS
+ 
+- /etc/xen/xldomain
++ @XENDCONFDIR@/xldomain
+ 
+ =head1 DESCRIPTION
+ 
+ To create a VM (a domain in Xen terminology, sometimes called a guest)
+ with xl requires the provision of a domain config file.  Typically
+-these live in `/etc/xen/DOMAIN.cfg` where DOMAIN is the name of the
++these live in `@XENDCONFDIR@/DOMAIN.cfg` where DOMAIN is the name of the
+ domain.
+ 
+ =head1 SYNTAX
+@@ -2040,7 +2040,7 @@
+ 
+ =head1 FILES
+ 
+-F</etc/xen/NAME.cfg>
++F<@XENDCONFDIR@/NAME.cfg>
+ F<@XEN_DUMP_DIR@/NAME>
+ 
+ =head1 BUGS
diff --git a/xentools48/patches/patch-docs_man_xl.conf.pod.5 b/xentools48/patches/patch-docs_man_xl.conf.pod.5
new file mode 100644
index 0000000000..c6e80135eb
--- /dev/null
+++ b/xentools48/patches/patch-docs_man_xl.conf.pod.5
@@ -0,0 +1,37 @@
+$NetBSD: patch-docs_man_xl.conf.pod.5,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- docs/man/xl.conf.pod.5.orig	2016-12-05 13:03:27.000000000 +0100
++++ docs/man/xl.conf.pod.5	2017-03-24 17:37:53.000000000 +0100
+@@ -1,6 +1,6 @@
+ =head1 NAME
+ 
+-/etc/xen/xl.conf - XL Global/Host Configuration 
++@XENDCONFDIR@/xl.conf - XL Global/Host Configuration 
+ 
+ =head1 DESCRIPTION
+ 
+@@ -83,7 +83,7 @@
+ 
+ The old B<vifscript> option is deprecated and should not be used.
+ 
+-Default: C</etc/xen/scripts/vif-bridge>
++Default: C<@XENDCONFDIR@/scripts/vif-bridge>
+ 
+ =item B<vif.default.bridge="NAME">
+ 
+@@ -109,13 +109,13 @@
+ 
+ Configures the default script used by Remus to setup network buffering.
+ 
+-Default: C</etc/xen/scripts/remus-netbuf-setup>
++Default: C<@XENDCONFDIR@/scripts/remus-netbuf-setup>
+ 
+ =item B<colo.default.proxyscript="PATH">
+ 
+ Configures the default script used by COLO to setup colo-proxy.
+ 
+-Default: C</etc/xen/scripts/colo-proxy-setup>
++Default: C<@XENDCONFDIR@/scripts/colo-proxy-setup>
+ 
+ =item B<output_format="json|sxp">
+ 
diff --git a/xentools48/patches/patch-docs_man_xl.pod.1.in b/xentools48/patches/patch-docs_man_xl.pod.1.in
new file mode 100644
index 0000000000..473ca0f186
--- /dev/null
+++ b/xentools48/patches/patch-docs_man_xl.pod.1.in
@@ -0,0 +1,44 @@
+$NetBSD: patch-docs_man_xl.pod.1.in,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- docs/man/xl.pod.1.in.orig	2017-03-24 17:39:08.000000000 +0100
++++ docs/man/xl.pod.1.in	2017-03-24 17:40:12.000000000 +0100
+@@ -33,10 +33,10 @@
+ 
+ =over 4
+ 
+-=item start the script B</etc/init.d/xencommons> at boot time
++=item start the script B</etc/rc.d/xencommons> at boot time
+ 
+ Most B<xl> operations rely upon B<xenstored> and B<xenconsoled>: make
+-sure you start the script B</etc/init.d/xencommons> at boot time to
++sure you start the script B</etc/rc.d/xencommons> at boot time to
+ initialize all the daemons needed by B<xl>.
+ 
+ =item setup a B<xenbr0> bridge in dom0
+@@ -50,7 +50,7 @@
+ 
+ If you specify the amount of memory dom0 has, passing B<dom0_mem> to
+ Xen, it is highly recommended to disable B<autoballoon>. Edit
+-B</etc/xen/xl.conf> and set it to 0.
++B<@XENDCONFDIR@/xl.conf> and set it to 0.
+ 
+ =item run xl as B<root>
+ 
+@@ -175,7 +175,7 @@
+ 
+   xl create DebianLenny
+ 
+-This creates a domain with the file /etc/xen/DebianLenny, and returns as
++This creates a domain with the file @XENDCONFDIR@/DebianLenny, and returns as
+ soon as it is run.
+ 
+ =item I<with extra parameters>
+@@ -528,7 +528,7 @@
+ =item B<-N> I<netbufscript>
+ 
+ Use <netbufscript> to setup network buffering instead of the
+-default script (/etc/xen/scripts/remus-netbuf-setup).
++default script (@XENDCONFDIR@/scripts/remus-netbuf-setup).
+ 
+ =item B<-F>
+ 
diff --git a/xentools48/patches/patch-docs_man_xlcpupool.cfg.pod.5 b/xentools48/patches/patch-docs_man_xlcpupool.cfg.pod.5
new file mode 100644
index 0000000000..a59925c3a6
--- /dev/null
+++ b/xentools48/patches/patch-docs_man_xlcpupool.cfg.pod.5
@@ -0,0 +1,28 @@
+$NetBSD: patch-docs_man_xlcpupool.cfg.pod.5,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- docs/man/xlcpupool.cfg.pod.5.orig	2017-03-24 17:41:23.000000000 +0100
++++ docs/man/xlcpupool.cfg.pod.5	2017-03-24 17:41:50.000000000 +0100
+@@ -4,12 +4,12 @@
+ 
+ =head1 SYNOPSIS
+ 
+- /etc/xen/xlcpupool
++ @XENDCONFDIR@/xlcpupool
+ 
+ =head1 DESCRIPTION
+ 
+ To create a Cpupool with xl requires the provision of a cpupool config
+-file.  Typically these live in `/etc/xen/CPUPOOL.cfg` where CPUPOOL is
++file.  Typically these live in `@XENDCONFDIR@/CPUPOOL.cfg` where CPUPOOL is
+ the name of the cpupool.
+ 
+ =head1 SYNTAX
+@@ -117,7 +117,7 @@
+ 
+ =head1 FILES
+ 
+-F</etc/xen/CPUPOOL.cfg>
++F<@XENDCONFDIR@/CPUPOOL.cfg>
+ 
+ =head1 BUGS
+ 
diff --git a/xentools48/patches/patch-docs_misc_xl-disk-configuration.txt b/xentools48/patches/patch-docs_misc_xl-disk-configuration.txt
new file mode 100644
index 0000000000..54795a3dfb
--- /dev/null
+++ b/xentools48/patches/patch-docs_misc_xl-disk-configuration.txt
@@ -0,0 +1,13 @@
+$NetBSD: patch-docs_misc_xl-disk-configuration.txt,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- docs/misc/xl-disk-configuration.txt.orig	2015-11-03 10:11:18.000000000 +0100
++++ docs/misc/xl-disk-configuration.txt	2016-03-29 22:48:24.000000000 +0200
+@@ -173,7 +173,7 @@
+ 
+ Specifies that <target> is not a normal host path, but rather
+ information to be interpreted by the executable program <script>,
+-(looked for in /etc/xen/scripts, if it doesn't contain a slash).
++(looked for in @XENDCONFDIR@/scripts, if it doesn't contain a slash).
+ 
+ These scripts are normally called "block-<script>".
+ 
diff --git a/xentools48/patches/patch-extras_mini-os_Config.mk b/xentools48/patches/patch-extras_mini-os_Config.mk
new file mode 100644
index 0000000000..d3493caf5f
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_Config.mk
@@ -0,0 +1,17 @@
+--- extras/mini-os/Config.mk.orig	2017-03-27 19:37:46.000000000 +0200
++++ extras/mini-os/Config.mk	2017-03-27 19:38:46.000000000 +0200
+@@ -106,13 +106,7 @@
+ # Set tools
+ AS         = $(CROSS_COMPILE)as
+ LD         = $(CROSS_COMPILE)ld
+-ifeq ($(clang),y)
+-CC         = $(CROSS_COMPILE)clang
+-LD_LTO     = $(CROSS_COMPILE)llvm-ld
+-else
+-CC         = $(CROSS_COMPILE)gcc
+-LD_LTO     = $(CROSS_COMPILE)ld
+-endif
++CC         = $(TARGET_CC)
+ CPP        = $(CC) -E
+ AR         = $(CROSS_COMPILE)ar
+ RANLIB     = $(CROSS_COMPILE)ranlib
diff --git a/xentools48/patches/patch-extras_mini-os_arch_x86_arch.mk b/xentools48/patches/patch-extras_mini-os_arch_x86_arch.mk
new file mode 100644
index 0000000000..e44510c64e
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_arch_x86_arch.mk
@@ -0,0 +1,22 @@
+$NetBSD: patch-extras_mini-os_arch_x86_arch.mk,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- extras/mini-os/arch/x86/arch.mk.orig	2017-03-27 16:41:50.000000000 +0200
++++ extras/mini-os/arch/x86/arch.mk	2017-03-27 16:43:37.000000000 +0200
+@@ -7,7 +7,7 @@
+ 
+ ifeq ($(MINIOS_TARGET_ARCH),x86_32)
+ ARCH_CFLAGS  := -m32 -march=i686
+-ARCH_LDFLAGS := -m elf_i386
++ARCH_LDFLAGS := -Wl,-melf_i386
+ ARCH_ASFLAGS := -m32
+ EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
+ EXTRA_SRC += arch/$(EXTRA_INC)
+@@ -17,7 +17,7 @@
+ ARCH_CFLAGS := -m64 -mno-red-zone -fno-reorder-blocks
+ ARCH_CFLAGS += -fno-asynchronous-unwind-tables
+ ARCH_ASFLAGS := -m64
+-ARCH_LDFLAGS := -m elf_x86_64
++ARCH_LDFLAGS := -Wl,-melf_x86_64
+ EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
+ EXTRA_SRC += arch/$(EXTRA_INC)
+ endif
diff --git a/xentools48/patches/patch-extras_mini-os_include_fcntl.h b/xentools48/patches/patch-extras_mini-os_include_fcntl.h
new file mode 100644
index 0000000000..190692d0f8
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_include_fcntl.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-extras_mini-os_include_fcntl.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- extras/mini-os/include/fcntl.h.orig	2017-03-28 19:38:01.000000000 +0200
++++ extras/mini-os/include/fcntl.h	2017-03-28 19:38:12.000000000 +0200
+@@ -93,7 +93,7 @@
+ 
+ #endif
+ 
+-int open(const char *path, int flags, ...) asm("open64");
++int open(const char *path, int flags, ...);
+ int fcntl(int fd, int cmd, ...);
+ 
+ #endif
diff --git a/xentools48/patches/patch-extras_mini-os_include_time.h b/xentools48/patches/patch-extras_mini-os_include_time.h
new file mode 100644
index 0000000000..7ea5997908
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_include_time.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-extras_mini-os_include_time.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- extras/mini-os/include/time.h.orig	2016-09-28 13:09:38.000000000 +0200
++++ extras/mini-os/include/time.h	2017-03-28 20:00:33.000000000 +0200
+@@ -48,7 +48,7 @@
+ 
+ #include <sys/time.h>
+ 
+-#ifdef HAVE_LIBC
++#if defined(HAVE_LIBC) && defined(NEED_TIME_H)
+ #include_next <time.h>
+ #endif
+ 
diff --git a/xentools48/patches/patch-extras_mini-os_lib_sys.c b/xentools48/patches/patch-extras_mini-os_lib_sys.c
new file mode 100644
index 0000000000..e776a52fea
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_lib_sys.c
@@ -0,0 +1,15 @@
+--- extras/mini-os/lib//sys.c.orig	2017-03-28 13:14:26.000000000 +0200
++++ extras/mini-os/lib//sys.c	2017-03-28 13:14:39.000000000 +0200
+@@ -18,6 +18,12 @@
+ #define DEBUG(fmt,...)
+ #endif
+ 
++void __enable_execute_stack (void *);
++void
++__enable_execute_stack (void *addr __attribute__((__unused__)))
++{
++}
++
+ #ifdef HAVE_LIBC
+ #include <os.h>
+ #include <console.h>
diff --git a/xentools48/patches/patch-extras_mini-os_lock.c b/xentools48/patches/patch-extras_mini-os_lock.c
new file mode 100644
index 0000000000..e1fedc3cd6
--- /dev/null
+++ b/xentools48/patches/patch-extras_mini-os_lock.c
@@ -0,0 +1,11 @@
+--- extras/mini-os/lock.c.orig	2017-03-28 12:14:33.000000000 +0200
++++ extras/mini-os/lock.c	2017-03-28 12:14:43.000000000 +0200
+@@ -4,7 +4,7 @@
+  * Samuel Thibault <Samuel.Thibault%eu.citrix.net@localhost>, July 20008
+  */
+ 
+-#ifdef HAVE_LIBC
++#if 0 /* def HAVE_LIBC */
+ 
+ #include <sys/lock.h>
+ #include <sched.h>
diff --git a/xentools48/patches/patch-m4_paths.m4 b/xentools48/patches/patch-m4_paths.m4
new file mode 100644
index 0000000000..ff43ae1416
--- /dev/null
+++ b/xentools48/patches/patch-m4_paths.m4
@@ -0,0 +1,16 @@
+$NetBSD: patch-m4_paths.m4,v 1.1 2018/03/13 15:15:01 bouyer Exp $
+
+--- m4/paths.m4.orig
++++ m4/paths.m4
+@@ -135,8 +135,9 @@ XEN_SCRIPT_DIR=$XEN_CONFIG_DIR/scripts
+ AC_SUBST(XEN_SCRIPT_DIR)
+ 
+ case "$host_os" in
+-*freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
+-*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
++*freebsd*) XEN_LOCK_DIR=$rundir_path ;;
++*netbsd*) XEN_LOCK_DIR=$rundir_path ;;
++*openbsd*) XEN_LOCK_DIR=$rundir_path ;;
+ *) XEN_LOCK_DIR=$localstatedir/lock ;;
+ esac
+ AC_SUBST(XEN_LOCK_DIR)
diff --git a/xentools48/patches/patch-stubdom_Makefile b/xentools48/patches/patch-stubdom_Makefile
new file mode 100644
index 0000000000..a72840e5cf
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_Makefile
@@ -0,0 +1,296 @@
+$NetBSD: patch-stubdom_Makefile,v 1.2 2019/08/30 13:23:10 bouyer Exp $
+--- stubdom/Makefile.orig	2018-12-03 10:03:57.000000000 +0100
++++ stubdom/Makefile	2019-08-30 11:47:09.000000000 +0200
+@@ -6,8 +6,6 @@
+ 
+ export stubdom=y
+ export debug=y
+-# Moved from config/StdGNU.mk
+-CFLAGS += -O1 -fno-omit-frame-pointer
+ 
+ ifeq (,$(findstring clean,$(MAKECMDGOALS)))
+   ifeq ($(wildcard $(MINI_OS)/Config.mk),)
+@@ -24,27 +22,27 @@
+ endif
+ 
+ ifeq ($(GNU_TARGET_ARCH), i686)
+-TARGET_CFLAGS=
++TARGET_CFLAGS=-O1 -fno-omit-frame-pointer
+ NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS
+ STUBDOM_SUPPORTED=1
++MINIOS_TARGET_ARCH:=x86
+ endif
+ ifeq ($(GNU_TARGET_ARCH), x86_64)
+ TARGET_CFLAGS=-mno-red-zone
+ NEWLIB_CFLAGS+=-D_I386MACH_ALLOW_HW_INTERRUPTS
+ STUBDOM_SUPPORTED=1
++MINIOS_TARGET_ARCH:=x86
+ endif
+ 
+ CROSS_ROOT=cross-root-$(GNU_TARGET_ARCH)
+ CROSS_PREFIX=$(CURDIR)/$(CROSS_ROOT)
+ 
+ # Disable PIE/SSP if GCC supports them. They can break us.
+-TARGET_CFLAGS += $(CFLAGS)
+-TARGET_CPPFLAGS += $(CPPFLAGS)
+-$(call cc-options-add,TARGET_CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
++$(call cc-options-add,TARGET_CFLAGS,TARGET_CC,$(EMBEDDED_EXTRA_CFLAGS))
+ 
+ # Do not use host headers and libs
+-GCC_INSTALL = $(shell LANG=C gcc -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p')
+-TARGET_CPPFLAGS += -U __linux__ -U __FreeBSD__ -U __sun__
++GCC_INSTALL = $(shell LANG=C ${TARGET_CC} -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p')
++TARGET_CPPFLAGS += -U __linux__ -U __FreeBSD__ -U __NetBSD__ -U __sun__
+ TARGET_CPPFLAGS += -nostdinc
+ TARGET_CPPFLAGS += -isystem $(MINI_OS)/include/posix
+ TARGET_CPPFLAGS += -isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include
+@@ -74,11 +72,8 @@
+ # Cross-newlib
+ ##############
+ 
+-newlib-$(NEWLIB_VERSION).tar.gz:
+-	$(FETCHER) $@ $(NEWLIB_URL)/$@
+-
+-newlib-$(NEWLIB_VERSION): newlib-$(NEWLIB_VERSION).tar.gz
+-	tar xzf $<
++newlib-$(NEWLIB_VERSION): 
++	cp -r ${WRKSRC}/../newlib-$(NEWLIB_VERSION) .
+ 	patch -d $@ -p0 < newlib.patch
+ 	patch -d $@ -p0 < newlib-chk.patch
+ 	patch -d $@ -p1 < newlib-stdint-size_max-fix-from-1.17.0.patch
+@@ -92,7 +87,7 @@
+ $(NEWLIB_STAMPFILE): mk-headers-$(XEN_TARGET_ARCH) newlib-$(NEWLIB_VERSION)
+ 	mkdir -p newlib-$(XEN_TARGET_ARCH)
+ 	( cd newlib-$(XEN_TARGET_ARCH) && \
+-	  CC_FOR_TARGET="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS)" AR_FOR_TARGET=$(AR) LD_FOR_TARGET=$(LD) RANLIB_FOR_TARGET=$(RANLIB) ../newlib-$(NEWLIB_VERSION)/configure --prefix=$(CROSS_PREFIX) --verbose --target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long --disable-multilib && \
++	  CFLAGS_FOR_BUILD="$(CFLAGS)" CFLAGS="" CC_FOR_TARGET="$(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(NEWLIB_CFLAGS) -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH)" AR_FOR_TARGET=$(AR) LD_FOR_TARGET=$(LD) RANLIB_FOR_TARGET=$(RANLIB) ../newlib-$(NEWLIB_VERSION)/configure --prefix=$(CROSS_PREFIX) --verbose --target=$(GNU_TARGET_ARCH)-xen-elf --enable-newlib-io-long-long --disable-multilib && \
+ 	  $(MAKE) DESTDIR= && \
+ 	  $(MAKE) DESTDIR= install )
+ 
+@@ -100,19 +95,15 @@
+ # Cross-zlib
+ ############
+ 
+-zlib-$(ZLIB_VERSION).tar.gz:
+-	$(FETCHER) $@ $(ZLIB_URL)/$@
+-
+-zlib-$(XEN_TARGET_ARCH): zlib-$(ZLIB_VERSION).tar.gz 
+-	tar xzf $<
+-	mv zlib-$(ZLIB_VERSION) $@
++zlib-$(XEN_TARGET_ARCH): 
++	cp -r ${WRKSRC}/../zlib-$(ZLIB_VERSION) $@
+ 
+ ZLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libz.a
+ .PHONY: cross-zlib
+ cross-zlib: $(ZLIB_STAMPFILE)
+ $(ZLIB_STAMPFILE): zlib-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE)
+ 	( cd $< && \
+-	  CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \
++	  CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" CC=$(TARGET_CC) ./configure --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf && \
+ 	  $(MAKE) DESTDIR= libz.a && \
+ 	  $(MAKE) DESTDIR= install )
+ 
+@@ -120,12 +111,8 @@
+ # Cross-libpci
+ ##############
+ 
+-pciutils-$(LIBPCI_VERSION).tar.bz2:
+-	$(FETCHER) $@ $(LIBPCI_URL)/$@
+-
+-pciutils-$(XEN_TARGET_ARCH): pciutils-$(LIBPCI_VERSION).tar.bz2
+-	tar xjf $<
+-	mv pciutils-$(LIBPCI_VERSION) $@
++pciutils-$(XEN_TARGET_ARCH): 
++	cp -r ${WRKSRC}/../pciutils-$(LIBPCI_VERSION) $@
+ 	patch -d $@ -p1 < pciutils.patch
+ 	touch $@
+ 
+@@ -138,7 +125,7 @@
+ 	  chmod u+w lib/config.h && \
+ 	  echo '#define PCILIB_VERSION "$(LIBPCI_VERSION)"' >> lib/config.h && \
+ 	  ln -sf ../../libpci.config.mak lib/config.mk && \
+-	  $(MAKE) DESTDIR= CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I$(call realpath,$(MINI_OS)/include)" lib/libpci.a && \
++	  $(MAKE) DESTDIR= CC="$(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -isystem $(call realpath,$(MINI_OS)/include) -isystem $(call realpath,$(MINI_OS)/include/$(MINIOS_TARGET_ARCH)) -isystem $(call realpath,$(MINI_OS)/include/$(MINIOS_TARGET_ARCH)/$(XEN_TARGET_ARCH))" CPPFLAGS="" CFLAGS="" lib/libpci.a && \
+ 	  $(INSTALL_DATA) lib/libpci.a $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ && \
+ 	  $(INSTALL_DIR) $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci && \
+ 	  $(INSTALL_DATA) lib/config.h lib/header.h lib/pci.h lib/types.h $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include/pci/ \
+@@ -148,12 +135,8 @@
+ # lwIP
+ ######
+ 
+-lwip-$(LWIP_VERSION).tar.gz:
+-	$(FETCHER) $@ $(LWIP_URL)/$@
+-
+-lwip-$(XEN_TARGET_ARCH): lwip-$(LWIP_VERSION).tar.gz
+-	tar xzf $<
+-	mv lwip $@
++lwip-$(XEN_TARGET_ARCH): 
++	cp -r ${WRKSRC}/../lwip $@
+ 	patch -d $@ -p0 < lwip.patch-cvs
+ 	patch -d $@ -p0 < lwip.dhcp_create_request-hwaddr_len.patch
+ 	touch $@
+@@ -161,19 +144,14 @@
+ #############
+ # cross-gmp
+ #############
+-gmp-$(GMP_VERSION).tar.bz2:
+-	$(FETCHER) $@ $(GMP_URL)/$@
+-
+ .PHONY: cross-gmp
+ ifeq ($(XEN_TARGET_ARCH), x86_32)
+    GMPEXT=ABI=32
+ endif
+-gmp-$(XEN_TARGET_ARCH): gmp-$(GMP_VERSION).tar.bz2 $(NEWLIB_STAMPFILE)
+-	tar xjf $<
+-	rm $@ -rf || :
+-	mv gmp-$(GMP_VERSION) $@
++gmp-$(XEN_TARGET_ARCH): $(NEWLIB_STAMPFILE)
++	cp -r ${WRKSRC}/../gmp-$(GMP_VERSION) $@
+ 	#patch -d $@ -p0 < gmp.patch
+-	cd $@; CPPFLAGS="-isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include $(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" CC=$(CC) $(GMPEXT) ./configure --disable-shared --enable-static --disable-fft --without-readline --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf --libdir=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib --build=`gcc -dumpmachine` --host=$(GNU_TARGET_ARCH)-xen-elf
++	cd $@; CPPFLAGS="-isystem $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include $(TARGET_CPPFLAGS) -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH) -isystem $(MINI_OS)/include" CFLAGS="$(TARGET_CFLAGS)" CC=$(TARGET_CC) $(GMPEXT) ./configure --disable-shared --enable-static --disable-fft --without-readline --prefix=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf --libdir=$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib --build=`${TARGET_CC} -dumpmachine` --host=$(GNU_TARGET_ARCH)-xen-elf
+ 	sed -i 's/#define HAVE_OBSTACK_VPRINTF 1/\/\/#define HAVE_OBSTACK_VPRINTF 1/' $@/config.h
+ 	touch $@
+ 
+@@ -187,12 +165,8 @@
+ #############
+ # cross-polarssl
+ #############
+-polarssl-$(POLARSSL_VERSION)-gpl.tgz:
+-	$(FETCHER) $@ $(POLARSSL_URL)/$@
+-
+-polarssl-$(XEN_TARGET_ARCH): polarssl-$(POLARSSL_VERSION)-gpl.tgz
+-	tar xzf $<
+-	mv polarssl-$(POLARSSL_VERSION) $@
++polarssl-$(XEN_TARGET_ARCH): 
++	cp -r ${WRKSRC}/../polarssl-$(POLARSSL_VERSION) $@
+ 	patch -d $@ -p1 < polarssl.patch
+ 	touch $@
+ 
+@@ -200,7 +174,7 @@
+ cross-polarssl: $(POLARSSL_STAMPFILE)
+ $(POLARSSL_STAMPFILE): polarssl-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE) lwip-$(XEN_TARGET_ARCH)
+ 	 ( cd $</library && \
+-	   make CC="$(CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I $(realpath $(MINI_OS)/include)" && \
++	   $(MAKE) CFLAGS="" CC="$(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -I../include" && \
+ 	   mkdir -p $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include && \
+ 	   cp -r ../include/* $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/include && \
+ 	   mkdir -p $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib && \
+@@ -209,13 +183,10 @@
+ #############
+ # cross-tpmemu
+ #############
+-tpm_emulator-$(TPMEMU_VERSION).tar.gz:
+-	$(FETCHER) $@ $(TPMEMU_URL)/$@
+-
+-tpm_emulator-$(XEN_TARGET_ARCH): tpm_emulator-$(TPMEMU_VERSION).tar.gz
++VTPM_CPPFLAGS=$(TARGET_CPPFLAGS) -isystem $(MINI_OS)/include -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH)/$(XEN_TARGET_ARCH) -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH)
++tpm_emulator-$(XEN_TARGET_ARCH): 
+ 	@if [ ! -f "$(CMAKE)" ]; then echo "cmake not installed! Install it and then rerun ./configure!"; false; fi
+-	tar xzf $<
+-	mv tpm_emulator-$(TPMEMU_VERSION) $@
++	cp -r ${WRKSRC}/../tpm_emulator-$(TPMEMU_VERSION) $@
+ 	patch -d $@ -p1 < tpmemu-$(TPMEMU_VERSION).patch;
+ 	patch -d $@ -p1 < vtpm-bufsize.patch
+ 	patch -d $@ -p1 < vtpm-locality.patch
+@@ -225,7 +196,7 @@
+ 	patch -d $@ -p1 < vtpm-cmake-Wextra.patch
+ 	patch -d $@ -p1 < vtpm_TPM_ChangeAuthAsymFinish.patch
+ 	mkdir $@/build
+-	cd $@/build; CC=${CC} $(CMAKE) .. -DCMAKE_C_FLAGS:STRING="-std=c99 -DTPM_NO_EXTERN $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-declaration-after-statement"
++	cd $@/build; CC=${TARGET_CC} $(CMAKE) .. -DCMAKE_C_FLAGS:STRING="-std=c99 -DTPM_NO_EXTERN $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) -Wno-declaration-after-statement"
+ 	touch $@
+ 
+ TPMEMU_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libtpm.a
+@@ -244,11 +215,8 @@
+ CAMLLIB = $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib/ocaml
+ OCAML_STAMPFILE=$(CAMLLIB)/.dirstamp
+ 
+-ocaml-$(OCAML_VERSION).tar.gz:
+-	$(FETCHER) $@ $(OCAML_URL)/$@
+-
+-ocaml-$(XEN_TARGET_ARCH)/.dirstamp: ocaml-$(OCAML_VERSION).tar.gz ocaml.patch
+-	tar xzf $<
++ocaml-$(XEN_TARGET_ARCH)/.dirstamp: ocaml.patch
++	cp -r ${WRKSRC}/../ocaml-$(OCAML_VERSION) .
+ 	cd ocaml-$(OCAML_VERSION) && patch -p0 < ../ocaml.patch
+ 	rm -rf ocaml-$(XEN_TARGET_ARCH)
+ 	mv ocaml-$(OCAML_VERSION) ocaml-$(XEN_TARGET_ARCH)
+@@ -261,7 +229,7 @@
+ $(OCAML_STAMPFILE): ocaml-$(XEN_TARGET_ARCH)/.dirstamp
+ 	cd ocaml-$(XEN_TARGET_ARCH) &&  ./configure -prefix $(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf \
+ 		-no-pthread -no-shared-libs -no-tk -no-curses \
+-		-cc "$(CC) -U_FORTIFY_SOURCE -fno-stack-protector -mno-red-zone"
++		-cc "$(TARGET_CC) -U_FORTIFY_SOURCE -fno-stack-protector -mno-red-zone"
+ 	$(foreach i,$(MINIOS_HASNOT),sed -i 's,^\(#define HAS_$(i)\),//\1,' ocaml-$(XEN_TARGET_ARCH)/config/s.h ; )
+ 	$(MAKE) DESTDIR= -C ocaml-$(XEN_TARGET_ARCH) world
+ 	$(MAKE) DESTDIR= -C ocaml-$(XEN_TARGET_ARCH) opt
+@@ -375,7 +343,7 @@
+ .PHONY: libxentoollog
+ libxentoollog: libs-$(XEN_TARGET_ARCH)/toollog/libxentoollog.a
+ libs-$(XEN_TARGET_ARCH)/toollog/libxentoollog.a: mk-headers-$(XEN_TARGET_ARCH) $(NEWLIB_STAMPFILE)
+-	CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) DESTDIR= -C libs-$(XEN_TARGET_ARCH)/toollog
++	CPPFLAGS="$(TARGET_CPPFLAGS)" CFLAGS="$(TARGET_CFLAGS)" EXTRA_HOSTCFLAGS="" $(MAKE) DESTDIR= -C libs-$(XEN_TARGET_ARCH)/toollog
+ 
+ #######
+ # libxenevtchn
+@@ -437,11 +405,12 @@
+ 	  ( $(buildmakevars2shellvars); \
+ 	    cd ioemu ; \
+ 	    LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) \
+-	    TARGET_CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat ioemu-minios-config.mk)" \
++	    TARGET_CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat ioemu-minios-config.mk) -DNEED_TIME_H -isystem $(MINI_OS)/include -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH)/$(XEN_TARGET_ARCH) -isystem $(MINI_OS)/include/$(MINIOS_TARGET_ARCH)" \
+ 	    TARGET_CFLAGS="$(TARGET_CFLAGS)" \
+ 	    TARGET_LDFLAGS="$(TARGET_LDFLAGS)" \
++	    CPPFLAGS="" CFLAGS="" \
+ 	    $(QEMU_ROOT)/xen-setup-stubdom )
+-	$(MAKE) DESTDIR= -C ioemu -f $(QEMU_ROOT)/Makefile
++	CPPFLAGS="" CFLAGS="" $(MAKE) DESTDIR= -C ioemu -f $(QEMU_ROOT)/Makefile
+ 
+ ######
+ # caml
+@@ -474,7 +443,7 @@
+ 
+ .PHONY: vtpm
+ vtpm: cross-polarssl cross-tpmemu vtpm-minios-config.mk
+-	XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat vtpm-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@
++	XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(VTPM_CPPFLAGS) $(shell cat vtpm-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS) -std=gnu99" $(MAKE) -C $@
+ 
+ ######
+ # VTPMMGR
+@@ -485,18 +454,14 @@
+ 
+ .PHONY: vtpmmgr
+ vtpmmgr: cross-polarssl vtpmmgr-minios-config.mk
+-	XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(TARGET_CPPFLAGS) $(shell cat vtpmmgr-minios-config.mk)" CFLAGS="$(TARGET_CFLAGS)" $(MAKE) -C $@
++	XEN_TARGET_ARCH="$(XEN_TARGET_ARCH)" CPPFLAGS="$(VTPM_CPPFLAGS) $(shell cat vtpmmgr-minios-config.mk) -DHAVE_LIBC" CFLAGS="$(TARGET_CFLAGS) -std=gnu99" $(MAKE) -C $@
+ 
+ ######
+ # Grub
+ ######
+ 
+-grub-$(GRUB_VERSION).tar.gz:
+-	$(FETCHER) $@ $(GRUB_URL)/$@
+-
+-grub-upstream: grub-$(GRUB_VERSION).tar.gz
+-	tar xzf $<
+-	mv grub-$(GRUB_VERSION) $@
++grub-upstream: 
++	cp -r ${WRKSRC}/../grub-$(GRUB_VERSION) $@
+ 	for i in grub.patches/* ; do \
+ 		patch -d $@ -p1 < $$i || exit 1; \
+ 	done
+@@ -539,11 +504,11 @@
+ 
+ .PHONY: vtpm-stubdom
+ vtpm-stubdom: mini-os-$(XEN_TARGET_ARCH)-vtpm vtpm
+-	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpm/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpm/vtpm.a" APP_LDLIBS="-ltpm -ltpm_crypto -lgmp -lpolarssl"
++	DEF_CPPFLAGS="$(VTPM_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpm/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpm/vtpm.a" APP_LDLIBS="-ltpm -ltpm_crypto -lgmp -lpolarssl"
+ 
+ .PHONY: vtpmmgr-stubdom
+ vtpmmgr-stubdom: mini-os-$(XEN_TARGET_ARCH)-vtpmmgr vtpmmgr
+-	DEF_CPPFLAGS="$(TARGET_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpmmgr/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpmmgr/vtpmmgr.a" APP_LDLIBS="-lm -lpolarssl"
++	DEF_CPPFLAGS="$(VTPM_CPPFLAGS)" DEF_CFLAGS="$(TARGET_CFLAGS)" DEF_LDFLAGS="$(TARGET_LDFLAGS)" MINIOS_CONFIG="$(CURDIR)/vtpmmgr/minios.cfg" $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< APP_OBJS="$(CURDIR)/vtpmmgr/vtpmmgr.a" APP_LDLIBS="-lm -lpolarssl"
+ 
+ .PHONY: pv-grub
+ pv-grub: mini-os-$(XEN_TARGET_ARCH)-grub libxc grub
diff --git a/xentools48/patches/patch-stubdom_newlib.patch b/xentools48/patches/patch-stubdom_newlib.patch
new file mode 100644
index 0000000000..23d78192ed
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_newlib.patch
@@ -0,0 +1,26 @@
+$NetBSD: patch-stubdom_newlib.patch,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- stubdom/newlib.patch.orig	2016-12-05 13:03:27.000000000 +0100
++++ stubdom/newlib.patch	2017-03-28 13:34:23.000000000 +0200
+@@ -663,21 +663,6 @@
+  extern int _fcntl _PARAMS ((int, int, ...));
+  #ifdef __LARGE64_FILES
+  extern int _open64 _PARAMS ((const char *, int, ...));
+---- ./newlib/libc/include/sys/unistd.h.orig	2008-08-07 15:09:36.449280000 +0100
+-+++ ./newlib/libc/include/sys/unistd.h	2008-08-07 15:09:51.210370000 +0100
+-@@ -101,7 +101,11 @@
+- int     _EXFUN(link, (const char *__path1, const char *__path2 ));
+- int	_EXFUN(nice, (int __nice_value ));
+- #if !defined(__INSIDE_CYGWIN__)
+--off_t   _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ));
+-+off_t   _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ))
+-+#ifdef __MINIOS__
+-+    asm("lseek64")
+-+#endif
+-+    ;
+- #endif
+- #if defined(__SPU__)
+- #define F_ULOCK	0
+ --- ./newlib/libc/include/sys/stat.h.orig	2008-08-07 16:08:50.495116000 +0100
+ +++ ./newlib/libc/include/sys/stat.h	2008-08-07 16:10:21.799753000 +0100
+ @@ -49,6 +49,9 @@
diff --git a/xentools48/patches/patch-stubdom_vtpmmgr_marshal.h b/xentools48/patches/patch-stubdom_vtpmmgr_marshal.h
new file mode 100644
index 0000000000..a29dc02d43
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_vtpmmgr_marshal.h
@@ -0,0 +1,587 @@
+$NetBSD: patch-stubdom_vtpmmgr_marshal.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- stubdom/vtpmmgr/marshal.h.orig	2017-03-28 16:07:11.000000000 +0200
++++ stubdom/vtpmmgr/marshal.h	2017-03-28 16:08:28.000000000 +0200
+@@ -47,17 +47,17 @@
+ 	UNPACK_ALLOC
+ } UnpackPtr;
+ 
+-inline BYTE* pack_BYTE(BYTE* ptr, BYTE t) {
++static inline BYTE* pack_BYTE(BYTE* ptr, BYTE t) {
+ 	ptr[0] = t;
+ 	return ++ptr;
+ }
+ 
+-inline BYTE* unpack_BYTE(BYTE* ptr, BYTE* t) {
++static inline BYTE* unpack_BYTE(BYTE* ptr, BYTE* t) {
+ 	t[0] = ptr[0];
+ 	return ++ptr;
+ }
+ 
+-inline int unpack3_BYTE(BYTE* ptr, UINT32* pos, UINT32 max, BYTE *t)
++static inline int unpack3_BYTE(BYTE* ptr, UINT32* pos, UINT32 max, BYTE *t)
+ {
+ 	if (*pos + 1 > max)
+ 		return TPM_SIZE;
+@@ -72,19 +72,19 @@
+ #define unpack3_BOOL(p, x, m, t) unpack3_BYTE(p, x, m, t)
+ #define sizeof_BOOL(t) 1
+ 
+-inline BYTE* pack_UINT16(void* ptr, UINT16 t) {
++static inline BYTE* pack_UINT16(void* ptr, UINT16 t) {
+ 	UINT16* p = ptr;
+ 	*p = cpu_to_be16(t);
+ 	return ptr + sizeof(UINT16);
+ }
+ 
+-inline BYTE* unpack_UINT16(void* ptr, UINT16* t) {
++static inline BYTE* unpack_UINT16(void* ptr, UINT16* t) {
+ 	UINT16* p = ptr;
+ 	*t = be16_to_cpu(*p);
+ 	return ptr + sizeof(UINT16);
+ }
+ 
+-inline int unpack3_UINT16(BYTE* ptr, UINT32* pos, UINT32 max, UINT16 *t)
++static inline int unpack3_UINT16(BYTE* ptr, UINT32* pos, UINT32 max, UINT16 *t)
+ {
+ 	if (*pos + 2 > max)
+ 		return TPM_SIZE;
+@@ -93,19 +93,19 @@
+ 	return 0;
+ }
+ 
+-inline BYTE* pack_UINT32(void* ptr, UINT32 t) {
++static inline BYTE* pack_UINT32(void* ptr, UINT32 t) {
+ 	UINT32* p = ptr;
+ 	*p = cpu_to_be32(t);
+ 	return ptr + sizeof(UINT32);
+ }
+ 
+-inline BYTE* unpack_UINT32(void* ptr, UINT32* t) {
++static inline BYTE* unpack_UINT32(void* ptr, UINT32* t) {
+ 	UINT32* p = ptr;
+ 	*t = be32_to_cpu(*p);
+ 	return ptr + sizeof(UINT32);
+ }
+ 
+-inline int unpack3_UINT32(BYTE* ptr, UINT32* pos, UINT32 max, UINT32 *t)
++static inline int unpack3_UINT32(BYTE* ptr, UINT32* pos, UINT32 max, UINT32 *t)
+ {
+ 	if (*pos + 4 > max)
+ 		return TPM_SIZE;
+@@ -236,17 +236,17 @@
+ #define sizeof_TCS_KEY_HANDLE(t) sizeof_UINT32(t)
+ 
+ 
+-inline BYTE* pack_BUFFER(BYTE* ptr, const BYTE* buf, UINT32 size) {
++static inline BYTE* pack_BUFFER(BYTE* ptr, const BYTE* buf, UINT32 size) {
+ 	memcpy(ptr, buf, size);
+ 	return ptr + size;
+ }
+ 
+-inline BYTE* unpack_BUFFER(BYTE* ptr, BYTE* buf, UINT32 size) {
++static inline BYTE* unpack_BUFFER(BYTE* ptr, BYTE* buf, UINT32 size) {
+ 	memcpy(buf, ptr, size);
+ 	return ptr + size;
+ }
+ 
+-inline int unpack3_BUFFER(BYTE* ptr, UINT32* pos, UINT32 max, BYTE* buf, UINT32 size) {
++static inline int unpack3_BUFFER(BYTE* ptr, UINT32* pos, UINT32 max, BYTE* buf, UINT32 size) {
+ 	if (*pos + size > max)
+ 		return TPM_SIZE;
+ 	memcpy(buf, ptr + *pos, size);
+@@ -256,12 +256,12 @@
+ 
+ #define sizeof_BUFFER(b, s) s
+ 
+-inline BYTE* unpack_ALIAS(BYTE* ptr, BYTE** buf, UINT32 size) {
++static inline BYTE* unpack_ALIAS(BYTE* ptr, BYTE** buf, UINT32 size) {
+ 	*buf = ptr;
+ 	return ptr + size;
+ }
+ 
+-inline BYTE* unpack_ALLOC(BYTE* ptr, BYTE** buf, UINT32 size) {
++static inline BYTE* unpack_ALLOC(BYTE* ptr, BYTE** buf, UINT32 size) {
+ 	if(size) {
+ 		*buf = malloc(size);
+ 		memcpy(*buf, ptr, size);
+@@ -271,7 +271,7 @@
+ 	return ptr + size;
+ }
+ 
+-inline BYTE* unpack_PTR(BYTE* ptr, BYTE** buf, UINT32 size, UnpackPtr alloc) {
++static inline BYTE* unpack_PTR(BYTE* ptr, BYTE** buf, UINT32 size, UnpackPtr alloc) {
+ 	if(alloc == UNPACK_ALLOC) {
+ 		return unpack_ALLOC(ptr, buf, size);
+ 	} else {
+@@ -279,7 +279,7 @@
+ 	}
+ }
+ 
+-inline int unpack3_PTR(BYTE* ptr, UINT32* pos, UINT32 max, BYTE** buf, UINT32 size, UnpackPtr alloc) {
++static inline int unpack3_PTR(BYTE* ptr, UINT32* pos, UINT32 max, BYTE** buf, UINT32 size, UnpackPtr alloc) {
+ 	if (size > max || *pos + size > max)
+ 		return TPM_SIZE;
+ 	if (alloc == UNPACK_ALLOC) {
+@@ -292,15 +292,15 @@
+ }
+ #define unpack3_VPTR(ptr, pos, max, buf, size, alloc) unpack3_PTR(ptr, pos, max, (void*)(buf), size, alloc)
+ 
+-inline BYTE* pack_TPM_AUTHDATA(BYTE* ptr, const TPM_AUTHDATA* d) {
++static inline BYTE* pack_TPM_AUTHDATA(BYTE* ptr, const TPM_AUTHDATA* d) {
+ 	return pack_BUFFER(ptr, *d, TPM_DIGEST_SIZE);
+ }
+ 
+-inline BYTE* unpack_TPM_AUTHDATA(BYTE* ptr, TPM_AUTHDATA* d) {
++static inline BYTE* unpack_TPM_AUTHDATA(BYTE* ptr, TPM_AUTHDATA* d) {
+ 	return unpack_BUFFER(ptr, *d, TPM_DIGEST_SIZE);
+ }
+ 
+-inline int unpack3_TPM_AUTHDATA(BYTE* ptr, UINT32* pos, UINT32 len, TPM_AUTHDATA* d) {
++static inline int unpack3_TPM_AUTHDATA(BYTE* ptr, UINT32* pos, UINT32 len, TPM_AUTHDATA* d) {
+ 	return unpack3_BUFFER(ptr, pos, len, *d, TPM_DIGEST_SIZE);
+ }
+ 
+@@ -325,7 +325,7 @@
+ #define sizeof_TPM_TAG(t) sizeof_UINT16(t)
+ #define sizeof_TPM_STRUCTURE_TAG(t) sizeof_UINT16(t)
+ 
+-inline BYTE* pack_TPM_VERSION(BYTE* ptr, const TPM_VERSION* t) {
++static inline BYTE* pack_TPM_VERSION(BYTE* ptr, const TPM_VERSION* t) {
+ 	ptr[0] = t->major;
+ 	ptr[1] = t->minor;
+ 	ptr[2] = t->revMajor;
+@@ -333,7 +333,7 @@
+ 	return ptr + 4;
+ }
+ 
+-inline BYTE* unpack_TPM_VERSION(BYTE* ptr, TPM_VERSION* t) {
++static inline BYTE* unpack_TPM_VERSION(BYTE* ptr, TPM_VERSION* t) {
+ 	t->major = ptr[0];
+ 	t->minor = ptr[1];
+ 	t->revMajor = ptr[2];
+@@ -341,7 +341,7 @@
+ 	return ptr + 4;
+ }
+ 
+-inline int unpack3_TPM_VERSION(BYTE* ptr, UINT32 *pos, UINT32 max, TPM_VERSION* t) {
++static inline int unpack3_TPM_VERSION(BYTE* ptr, UINT32 *pos, UINT32 max, TPM_VERSION* t) {
+ 	if (*pos + 4 > max)
+ 		return TPM_SIZE;
+ 	ptr += *pos;
+@@ -355,7 +355,7 @@
+ 
+ #define sizeof_TPM_VERSION(x) 4
+ 
+-inline BYTE* pack_TPM_CAP_VERSION_INFO(BYTE* ptr, const TPM_CAP_VERSION_INFO* v) {
++static inline BYTE* pack_TPM_CAP_VERSION_INFO(BYTE* ptr, const TPM_CAP_VERSION_INFO* v) {
+ 	ptr = pack_TPM_STRUCTURE_TAG(ptr, v->tag);
+ 	ptr = pack_TPM_VERSION(ptr, &v->version);
+ 	ptr = pack_UINT16(ptr, v->specLevel);
+@@ -366,7 +366,7 @@
+ 	return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM_CAP_VERSION_INFO(BYTE* ptr, TPM_CAP_VERSION_INFO* v, UnpackPtr alloc) {
++static inline BYTE* unpack_TPM_CAP_VERSION_INFO(BYTE* ptr, TPM_CAP_VERSION_INFO* v, UnpackPtr alloc) {
+ 	ptr = unpack_TPM_STRUCTURE_TAG(ptr, &v->tag);
+ 	ptr = unpack_TPM_VERSION(ptr, &v->version);
+ 	ptr = unpack_UINT16(ptr, &v->specLevel);
+@@ -377,15 +377,15 @@
+ 	return ptr;
+ }
+ 
+-inline BYTE* pack_TPM_DIGEST(BYTE* ptr, const TPM_DIGEST* d) {
++static inline BYTE* pack_TPM_DIGEST(BYTE* ptr, const TPM_DIGEST* d) {
+ 	return pack_BUFFER(ptr, d->digest, TPM_DIGEST_SIZE);
+ }
+ 
+-inline BYTE* unpack_TPM_DIGEST(BYTE* ptr, TPM_DIGEST* d) {
++static inline BYTE* unpack_TPM_DIGEST(BYTE* ptr, TPM_DIGEST* d) {
+ 	return unpack_BUFFER(ptr, d->digest, TPM_DIGEST_SIZE);
+ }
+ 
+-inline int unpack3_TPM_DIGEST(BYTE* ptr, UINT32* pos, UINT32 max, TPM_DIGEST* d) {
++static inline int unpack3_TPM_DIGEST(BYTE* ptr, UINT32* pos, UINT32 max, TPM_DIGEST* d) {
+ 	return unpack3_BUFFER(ptr, pos, max, d->digest, TPM_DIGEST_SIZE);
+ }
+ 
+@@ -409,72 +409,72 @@
+ #define pack_TPM_CHOSENID_HASH(ptr, d) pack_TPM_DIGEST(ptr, d)
+ #define unpack_TPM_CHOSENID_HASH(ptr, d) unpack_TPM_DIGEST(ptr, d)
+ 
+-inline BYTE* pack_TPM_NONCE(BYTE* ptr, const TPM_NONCE* n) {
++static inline BYTE* pack_TPM_NONCE(BYTE* ptr, const TPM_NONCE* n) {
+ 	return pack_BUFFER(ptr, n->nonce, TPM_DIGEST_SIZE);
+ }
+ 
+-inline BYTE* unpack_TPM_NONCE(BYTE* ptr, TPM_NONCE* n) {
++static inline BYTE* unpack_TPM_NONCE(BYTE* ptr, TPM_NONCE* n) {
+ 	return unpack_BUFFER(ptr, n->nonce, TPM_DIGEST_SIZE);
+ }
+ 
+ #define sizeof_TPM_NONCE(x) TPM_DIGEST_SIZE
+ 
+-inline int unpack3_TPM_NONCE(BYTE* ptr, UINT32* pos, UINT32 max, TPM_NONCE* n) {
++static inline int unpack3_TPM_NONCE(BYTE* ptr, UINT32* pos, UINT32 max, TPM_NONCE* n) {
+ 	return unpack3_BUFFER(ptr, pos, max, n->nonce, TPM_DIGEST_SIZE);
+ }
+ 
+-inline BYTE* pack_TPM_SYMMETRIC_KEY_PARMS(BYTE* ptr, const TPM_SYMMETRIC_KEY_PARMS* k) {
++static inline BYTE* pack_TPM_SYMMETRIC_KEY_PARMS(BYTE* ptr, const TPM_SYMMETRIC_KEY_PARMS* k) {
+ 	ptr = pack_UINT32(ptr, k->keyLength);
+ 	ptr = pack_UINT32(ptr, k->blockSize);
+ 	ptr = pack_UINT32(ptr, k->ivSize);
+ 	return pack_BUFFER(ptr, k->IV, k->ivSize);
+ }
+ 
+-inline BYTE* pack_TPM_SYMMETRIC_KEY(BYTE* ptr, const TPM_SYMMETRIC_KEY* k) {
++static inline BYTE* pack_TPM_SYMMETRIC_KEY(BYTE* ptr, const TPM_SYMMETRIC_KEY* k) {
+ 	ptr = pack_UINT32(ptr, k->algId);
+ 	ptr = pack_UINT16(ptr, k->encScheme);
+ 	ptr = pack_UINT16(ptr, k->size);
+ 	return pack_BUFFER(ptr, k->data, k->size);
+ }
+ 
+-inline int unpack3_TPM_SYMMETRIC_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 max, TPM_SYMMETRIC_KEY_PARMS* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_SYMMETRIC_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 max, TPM_SYMMETRIC_KEY_PARMS* k, UnpackPtr alloc) {
+ 	return unpack3_UINT32(ptr, pos, max, &k->keyLength) ||
+ 		unpack3_UINT32(ptr, pos, max, &k->blockSize) ||
+ 		unpack3_UINT32(ptr, pos, max, &k->ivSize) ||
+ 		unpack3_PTR(ptr, pos, max, &k->IV, k->ivSize, alloc);
+ }
+ 
+-inline int sizeof_TPM_SYMMETRIC_KEY_PARMS(const TPM_SYMMETRIC_KEY_PARMS* k) {
++static inline int sizeof_TPM_SYMMETRIC_KEY_PARMS(const TPM_SYMMETRIC_KEY_PARMS* k) {
+ 	return 12 + k->ivSize;
+ }
+ 
+-inline int unpack3_TPM_SYMMETRIC_KEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_SYMMETRIC_KEY* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_SYMMETRIC_KEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_SYMMETRIC_KEY* k, UnpackPtr alloc) {
+ 	return unpack3_UINT32(ptr, pos, max, &k->algId) ||
+ 		unpack3_UINT16(ptr, pos, max, &k->encScheme) ||
+ 		unpack3_UINT16(ptr, pos, max, &k->size) ||
+ 		unpack3_PTR(ptr, pos, max, &k->data, k->size, alloc);
+ }
+ 
+-inline BYTE* pack_TPM_RSA_KEY_PARMS(BYTE* ptr, const TPM_RSA_KEY_PARMS* k) {
++static inline BYTE* pack_TPM_RSA_KEY_PARMS(BYTE* ptr, const TPM_RSA_KEY_PARMS* k) {
+ 	ptr = pack_UINT32(ptr, k->keyLength);
+ 	ptr = pack_UINT32(ptr, k->numPrimes);
+ 	ptr = pack_UINT32(ptr, k->exponentSize);
+ 	return pack_BUFFER(ptr, k->exponent, k->exponentSize);
+ }
+ 
+-inline int unpack3_TPM_RSA_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 max, TPM_RSA_KEY_PARMS* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_RSA_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 max, TPM_RSA_KEY_PARMS* k, UnpackPtr alloc) {
+ 	return unpack3_UINT32(ptr, pos, max, &k->keyLength) ||
+ 		unpack3_UINT32(ptr, pos, max, &k->numPrimes) ||
+ 		unpack3_UINT32(ptr, pos, max, &k->exponentSize) ||
+ 		unpack3_PTR(ptr, pos, max, &k->exponent, k->exponentSize, alloc);
+ }
+ 
+-inline int sizeof_TPM_RSA_KEY_PARMS(const TPM_RSA_KEY_PARMS* k) {
++static inline int sizeof_TPM_RSA_KEY_PARMS(const TPM_RSA_KEY_PARMS* k) {
+ 	return 12 + k->exponentSize;
+ }
+ 
+ 
+-inline BYTE* pack_TPM_KEY_PARMS(BYTE* ptr, const TPM_KEY_PARMS* k) {
++static inline BYTE* pack_TPM_KEY_PARMS(BYTE* ptr, const TPM_KEY_PARMS* k) {
+ 	ptr = pack_TPM_ALGORITHM_ID(ptr, k->algorithmID);
+ 	ptr = pack_TPM_ENC_SCHEME(ptr, k->encScheme);
+ 	ptr = pack_TPM_SIG_SCHEME(ptr, k->sigScheme);
+@@ -493,7 +493,7 @@
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 len, TPM_KEY_PARMS* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_KEY_PARMS(BYTE* ptr, UINT32* pos, UINT32 len, TPM_KEY_PARMS* k, UnpackPtr alloc) {
+ 	int rc = unpack3_TPM_ALGORITHM_ID(ptr, pos, len, &k->algorithmID) ||
+ 		unpack3_TPM_ENC_SCHEME(ptr, pos, len, &k->encScheme) ||
+ 		unpack3_TPM_SIG_SCHEME(ptr, pos, len, &k->sigScheme) ||
+@@ -511,7 +511,7 @@
+ 	return TPM_FAIL;
+ }
+ 
+-inline int sizeof_TPM_KEY_PARMS(const TPM_KEY_PARMS* k) {
++static inline int sizeof_TPM_KEY_PARMS(const TPM_KEY_PARMS* k) {
+ 	int rc = 0;
+ 	rc += sizeof_TPM_ALGORITHM_ID(&k->algorithmID);
+ 	rc += sizeof_TPM_ENC_SCHEME(&k->encScheme);
+@@ -532,66 +532,66 @@
+ 	return rc;
+ }
+ 
+-inline BYTE* pack_TPM_STORE_PUBKEY(BYTE* ptr, const TPM_STORE_PUBKEY* k) {
++static inline BYTE* pack_TPM_STORE_PUBKEY(BYTE* ptr, const TPM_STORE_PUBKEY* k) {
+ 	ptr = pack_UINT32(ptr, k->keyLength);
+ 	ptr = pack_BUFFER(ptr, k->key, k->keyLength);
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_STORE_PUBKEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_STORE_PUBKEY* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_STORE_PUBKEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_STORE_PUBKEY* k, UnpackPtr alloc) {
+ 	return unpack3_UINT32(ptr, pos, max, &k->keyLength) ||
+ 		unpack3_PTR(ptr, pos, max, &k->key, k->keyLength, alloc);
+ }
+ 
+-inline int sizeof_TPM_STORE_PUBKEY(const TPM_STORE_PUBKEY* k) {
++static inline int sizeof_TPM_STORE_PUBKEY(const TPM_STORE_PUBKEY* k) {
+ 	return 4 + k->keyLength;
+ }
+ 
+-inline BYTE* pack_TPM_PUBKEY(BYTE* ptr, const TPM_PUBKEY* k) {
++static inline BYTE* pack_TPM_PUBKEY(BYTE* ptr, const TPM_PUBKEY* k) {
+ 	ptr = pack_TPM_KEY_PARMS(ptr, &k->algorithmParms);
+ 	return pack_TPM_STORE_PUBKEY(ptr, &k->pubKey);
+ }
+ 
+-inline int unpack3_TPM_PUBKEY(BYTE* ptr, UINT32* pos, UINT32 len, TPM_PUBKEY* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_PUBKEY(BYTE* ptr, UINT32* pos, UINT32 len, TPM_PUBKEY* k, UnpackPtr alloc) {
+ 	return unpack3_TPM_KEY_PARMS(ptr, pos, len, &k->algorithmParms, alloc) ||
+ 		unpack3_TPM_STORE_PUBKEY(ptr, pos, len, &k->pubKey, alloc);
+ }
+ 
+-inline BYTE* pack_TPM_PCR_SELECTION(BYTE* ptr, const TPM_PCR_SELECTION* p) {
++static inline BYTE* pack_TPM_PCR_SELECTION(BYTE* ptr, const TPM_PCR_SELECTION* p) {
+ 	ptr = pack_UINT16(ptr, p->sizeOfSelect);
+ 	ptr = pack_BUFFER(ptr, p->pcrSelect, p->sizeOfSelect);
+ 	return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM_PCR_SELECTION(BYTE* ptr, TPM_PCR_SELECTION* p, UnpackPtr alloc) {
++static inline BYTE* unpack_TPM_PCR_SELECTION(BYTE* ptr, TPM_PCR_SELECTION* p, UnpackPtr alloc) {
+ 	ptr = unpack_UINT16(ptr, &p->sizeOfSelect);
+ 	ptr = unpack_PTR(ptr, &p->pcrSelect, p->sizeOfSelect, alloc);
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_PCR_SELECTION(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_SELECTION* p, UnpackPtr alloc) {
++static inline int unpack3_TPM_PCR_SELECTION(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_SELECTION* p, UnpackPtr alloc) {
+ 	return unpack3_UINT16(ptr, pos, max, &p->sizeOfSelect) ||
+ 		unpack3_PTR(ptr, pos, max, &p->pcrSelect, p->sizeOfSelect, alloc);
+ }
+ 
+-inline int sizeof_TPM_PCR_SELECTION(const TPM_PCR_SELECTION* p) {
++static inline int sizeof_TPM_PCR_SELECTION(const TPM_PCR_SELECTION* p) {
+ 	return 2 + p->sizeOfSelect;
+ }
+ 
+-inline BYTE* pack_TPM_PCR_INFO(BYTE* ptr, const TPM_PCR_INFO* p) {
++static inline BYTE* pack_TPM_PCR_INFO(BYTE* ptr, const TPM_PCR_INFO* p) {
+ 	ptr = pack_TPM_PCR_SELECTION(ptr, &p->pcrSelection);
+ 	ptr = pack_TPM_COMPOSITE_HASH(ptr, &p->digestAtRelease);
+ 	ptr = pack_TPM_COMPOSITE_HASH(ptr, &p->digestAtCreation);
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_PCR_INFO(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_INFO* p, UnpackPtr alloc) {
++static inline int unpack3_TPM_PCR_INFO(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_INFO* p, UnpackPtr alloc) {
+ 	return unpack3_TPM_PCR_SELECTION(ptr, pos, max, &p->pcrSelection, alloc) ||
+ 		unpack3_TPM_COMPOSITE_HASH(ptr, pos, max, &p->digestAtRelease) ||
+ 		unpack3_TPM_COMPOSITE_HASH(ptr, pos, max, &p->digestAtCreation);
+ }
+ 
+-inline int sizeof_TPM_PCR_INFO(const TPM_PCR_INFO* p) {
++static inline int sizeof_TPM_PCR_INFO(const TPM_PCR_INFO* p) {
+ 	int rc = 0;
+ 	rc += sizeof_TPM_PCR_SELECTION(&p->pcrSelection);
+ 	rc += sizeof_TPM_COMPOSITE_HASH(&p->digestAtRelease);
+@@ -599,7 +599,7 @@
+ 	return rc;
+ }
+ 
+-inline BYTE* pack_TPM_PCR_INFO_LONG(BYTE* ptr, const TPM_PCR_INFO_LONG* p) {
++static inline BYTE* pack_TPM_PCR_INFO_LONG(BYTE* ptr, const TPM_PCR_INFO_LONG* p) {
+ 	ptr = pack_TPM_STRUCTURE_TAG(ptr, p->tag);
+ 	ptr = pack_TPM_LOCALITY_SELECTION(ptr, p->localityAtCreation);
+ 	ptr = pack_TPM_LOCALITY_SELECTION(ptr, p->localityAtRelease);
+@@ -610,7 +610,7 @@
+ 	return ptr;
+ }
+ 
+-inline int sizeof_TPM_PCR_INFO_LONG(const TPM_PCR_INFO_LONG* p) {
++static inline int sizeof_TPM_PCR_INFO_LONG(const TPM_PCR_INFO_LONG* p) {
+ 	int rc = 0;
+ 	rc += sizeof_TPM_STRUCTURE_TAG(p->tag);
+ 	rc += sizeof_TPM_LOCALITY_SELECTION(p->localityAtCreation);
+@@ -622,7 +622,7 @@
+ 	return rc;
+ }
+ 
+-inline int unpack3_TPM_PCR_INFO_LONG(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_INFO_LONG* p, UnpackPtr alloc) {
++static inline int unpack3_TPM_PCR_INFO_LONG(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_INFO_LONG* p, UnpackPtr alloc) {
+ 	return unpack3_TPM_STRUCTURE_TAG(ptr, pos, max, &p->tag) ||
+ 		unpack3_TPM_LOCALITY_SELECTION(ptr, pos, max,
+ 					       &p->localityAtCreation) ||
+@@ -637,20 +637,20 @@
+ 		unpack3_TPM_COMPOSITE_HASH(ptr, pos, max, &p->digestAtRelease);
+ }
+ 
+-inline BYTE* pack_TPM_PCR_COMPOSITE(BYTE* ptr, const TPM_PCR_COMPOSITE* p) {
++static inline BYTE* pack_TPM_PCR_COMPOSITE(BYTE* ptr, const TPM_PCR_COMPOSITE* p) {
+ 	ptr = pack_TPM_PCR_SELECTION(ptr, &p->select);
+ 	ptr = pack_UINT32(ptr, p->valueSize);
+ 	ptr = pack_BUFFER(ptr, (const BYTE*)p->pcrValue, p->valueSize);
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_PCR_COMPOSITE(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_COMPOSITE* p, UnpackPtr alloc) {
++static inline int unpack3_TPM_PCR_COMPOSITE(BYTE* ptr, UINT32* pos, UINT32 max, TPM_PCR_COMPOSITE* p, UnpackPtr alloc) {
+ 	return unpack3_TPM_PCR_SELECTION(ptr, pos, max, &p->select, alloc) ||
+ 		unpack3_UINT32(ptr, pos, max, &p->valueSize) ||
+ 		unpack3_PTR(ptr, pos, max, (BYTE**)&p->pcrValue, p->valueSize, alloc);
+ }
+ 
+-inline BYTE* pack_TPM_KEY(BYTE* ptr, const TPM_KEY* k) {
++static inline BYTE* pack_TPM_KEY(BYTE* ptr, const TPM_KEY* k) {
+ 	ptr = pack_TPM_VERSION(ptr, &k->ver);
+ 	ptr = pack_TPM_KEY_USAGE(ptr, k->keyUsage);
+ 	ptr = pack_TPM_KEY_FLAGS(ptr, k->keyFlags);
+@@ -665,7 +665,7 @@
+ 	return pack_BUFFER(ptr, k->encData, k->encDataSize);
+ }
+ 
+-inline int unpack3_TPM_KEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_KEY* k, UnpackPtr alloc) {
++static inline int unpack3_TPM_KEY(BYTE* ptr, UINT32* pos, UINT32 max, TPM_KEY* k, UnpackPtr alloc) {
+ 	int rc = unpack3_TPM_VERSION(ptr, pos, max, &k->ver) ||
+ 		unpack3_TPM_KEY_USAGE(ptr, pos, max, &k->keyUsage) ||
+ 		unpack3_TPM_KEY_FLAGS(ptr, pos, max, &k->keyFlags) ||
+@@ -682,7 +682,7 @@
+ 		unpack3_PTR(ptr, pos, max, &k->encData, k->encDataSize, alloc);
+ }
+ 
+-inline int sizeof_TPM_KEY(const TPM_KEY* k) {
++static inline int sizeof_TPM_KEY(const TPM_KEY* k) {
+ 	int rc = 0;
+ 	rc += sizeof_TPM_VERSION(&k->ver);
+ 	rc += sizeof_TPM_KEY_USAGE(k->keyUsage);
+@@ -699,19 +699,19 @@
+ 	return rc;
+ }
+ 
+-inline BYTE* pack_TPM_BOUND_DATA(BYTE* ptr, const TPM_BOUND_DATA* b, UINT32 payloadSize) {
++static inline BYTE* pack_TPM_BOUND_DATA(BYTE* ptr, const TPM_BOUND_DATA* b, UINT32 payloadSize) {
+ 	ptr = pack_TPM_VERSION(ptr, &b->ver);
+ 	ptr = pack_TPM_PAYLOAD_TYPE(ptr, b->payload);
+ 	return pack_BUFFER(ptr, b->payloadData, payloadSize);
+ }
+ 
+-inline BYTE* unpack_TPM_BOUND_DATA(BYTE* ptr, TPM_BOUND_DATA* b, UINT32 payloadSize, UnpackPtr alloc) {
++static inline BYTE* unpack_TPM_BOUND_DATA(BYTE* ptr, TPM_BOUND_DATA* b, UINT32 payloadSize, UnpackPtr alloc) {
+ 	ptr = unpack_TPM_VERSION(ptr, &b->ver);
+ 	ptr = unpack_TPM_PAYLOAD_TYPE(ptr, &b->payload);
+ 	return unpack_PTR(ptr, &b->payloadData, payloadSize, alloc);
+ }
+ 
+-inline BYTE* pack_TPM_STORED_DATA(BYTE* ptr, const TPM_STORED_DATA* d) {
++static inline BYTE* pack_TPM_STORED_DATA(BYTE* ptr, const TPM_STORED_DATA* d) {
+ 	ptr = pack_TPM_VERSION(ptr, &d->ver);
+ 	ptr = pack_UINT32(ptr, d->sealInfoSize);
+ 	if(d->sealInfoSize) {
+@@ -722,7 +722,7 @@
+ 	return ptr;
+ }
+ 
+-inline int sizeof_TPM_STORED_DATA(const TPM_STORED_DATA* d) {
++static inline int sizeof_TPM_STORED_DATA(const TPM_STORED_DATA* d) {
+ 	int rv = sizeof_TPM_VERSION(&d->ver) + sizeof_UINT32(d->sealInfoSize);
+ 	if (d->sealInfoSize) {
+ 		rv += sizeof_TPM_PCR_INFO(&d->sealInfo);
+@@ -732,7 +732,7 @@
+ 	return rv;
+ }
+ 
+-inline int unpack3_TPM_STORED_DATA(BYTE* ptr, UINT32* pos, UINT32 len, TPM_STORED_DATA* d, UnpackPtr alloc) {
++static inline int unpack3_TPM_STORED_DATA(BYTE* ptr, UINT32* pos, UINT32 len, TPM_STORED_DATA* d, UnpackPtr alloc) {
+ 	int rc = unpack3_TPM_VERSION(ptr, pos, len, &d->ver) ||
+ 		unpack3_UINT32(ptr, pos, len, &d->sealInfoSize);
+ 	if (rc)
+@@ -746,7 +746,7 @@
+ 	return rc;
+ }
+ 
+-inline BYTE* pack_TPM_STORED_DATA12(BYTE* ptr, const TPM_STORED_DATA12* d) {
++static inline BYTE* pack_TPM_STORED_DATA12(BYTE* ptr, const TPM_STORED_DATA12* d) {
+ 	ptr = pack_TPM_STRUCTURE_TAG(ptr, d->tag);
+ 	ptr = pack_TPM_ENTITY_TYPE(ptr, d->et);
+ 	ptr = pack_UINT32(ptr, d->sealInfoLongSize);
+@@ -758,7 +758,7 @@
+ 	return ptr;
+ }
+ 
+-inline int sizeof_TPM_STORED_DATA12(const TPM_STORED_DATA12* d) {
++static inline int sizeof_TPM_STORED_DATA12(const TPM_STORED_DATA12* d) {
+ 	int rv = sizeof_TPM_STRUCTURE_TAG(&d->ver) +
+ 		 sizeof_TPM_ENTITY_TYPE(&d->et) +
+ 		 sizeof_UINT32(d->sealInfoLongSize);
+@@ -770,7 +770,7 @@
+ 	return rv;
+ }
+ 
+-inline int unpack3_TPM_STORED_DATA12(BYTE* ptr, UINT32* pos, UINT32 len, TPM_STORED_DATA12* d, UnpackPtr alloc) {
++static inline int unpack3_TPM_STORED_DATA12(BYTE* ptr, UINT32* pos, UINT32 len, TPM_STORED_DATA12* d, UnpackPtr alloc) {
+ 	int rc = unpack3_TPM_STRUCTURE_TAG(ptr, pos, len, &d->tag) ||
+ 		unpack3_TPM_ENTITY_TYPE(ptr, pos, len, &d->et) ||
+ 		unpack3_UINT32(ptr, pos, len, &d->sealInfoLongSize);
+@@ -786,7 +786,7 @@
+ 	return rc;
+ }
+ 
+-inline BYTE* pack_TPM_AUTH_SESSION(BYTE* ptr, const TPM_AUTH_SESSION* auth) {
++static inline BYTE* pack_TPM_AUTH_SESSION(BYTE* ptr, const TPM_AUTH_SESSION* auth) {
+ 	ptr = pack_TPM_AUTH_HANDLE(ptr, auth->AuthHandle);
+ 	ptr = pack_TPM_NONCE(ptr, &auth->NonceOdd);
+ 	ptr = pack_BOOL(ptr, auth->fContinueAuthSession);
+@@ -794,21 +794,21 @@
+ 	return ptr;
+ }
+ 
+-inline BYTE* unpack_TPM_AUTH_SESSION(BYTE* ptr, TPM_AUTH_SESSION* auth) {
++static inline BYTE* unpack_TPM_AUTH_SESSION(BYTE* ptr, TPM_AUTH_SESSION* auth) {
+ 	ptr = unpack_TPM_NONCE(ptr, &auth->NonceEven);
+ 	ptr = unpack_BOOL(ptr, &auth->fContinueAuthSession);
+ 	ptr = unpack_TPM_AUTHDATA(ptr, &auth->HMAC);
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_AUTH_SESSION(BYTE* ptr, UINT32* pos, UINT32 len, TPM_AUTH_SESSION* auth) {
++static inline int unpack3_TPM_AUTH_SESSION(BYTE* ptr, UINT32* pos, UINT32 len, TPM_AUTH_SESSION* auth) {
+ 	return unpack3_TPM_NONCE(ptr, pos, len, &auth->NonceEven) ||
+ 		unpack3_BOOL(ptr, pos, len, &auth->fContinueAuthSession) ||
+ 		unpack3_TPM_AUTHDATA(ptr, pos, len, &auth->HMAC);
+ }
+ 
+ 
+-inline int sizeof_TPM_AUTH_SESSION(const TPM_AUTH_SESSION* auth) {
++static inline int sizeof_TPM_AUTH_SESSION(const TPM_AUTH_SESSION* auth) {
+ 	int rv = 0;
+ 	rv += sizeof_TPM_AUTH_HANDLE(auth->AuthHandle);
+ 	rv += sizeof_TPM_NONCE(&auth->NonceOdd);
+@@ -817,7 +817,7 @@
+ 	return rv;
+ }
+ 
+-inline BYTE* pack_TPM_RQU_HEADER(BYTE* ptr,
++static inline BYTE* pack_TPM_RQU_HEADER(BYTE* ptr,
+ 		TPM_TAG tag,
+ 		UINT32 size,
+ 		TPM_COMMAND_CODE ord) {
+@@ -826,7 +826,7 @@
+ 	return pack_UINT32(ptr, ord);
+ }
+ 
+-inline BYTE* unpack_TPM_RQU_HEADER(BYTE* ptr,
++static inline BYTE* unpack_TPM_RQU_HEADER(BYTE* ptr,
+ 		TPM_TAG* tag,
+ 		UINT32* size,
+ 		TPM_COMMAND_CODE* ord) {
+@@ -836,7 +836,7 @@
+ 	return ptr;
+ }
+ 
+-inline int unpack3_TPM_RQU_HEADER(BYTE* ptr, UINT32* pos, UINT32 max,
++static inline int unpack3_TPM_RQU_HEADER(BYTE* ptr, UINT32* pos, UINT32 max,
+ 		TPM_TAG* tag, UINT32* size, TPM_COMMAND_CODE* ord) {
+ 	return
+ 		unpack3_UINT16(ptr, pos, max, tag) ||
diff --git a/xentools48/patches/patch-stubdom_vtpmmgr_tcg.h b/xentools48/patches/patch-stubdom_vtpmmgr_tcg.h
new file mode 100644
index 0000000000..5594c1793e
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_vtpmmgr_tcg.h
@@ -0,0 +1,129 @@
+$NetBSD: patch-stubdom_vtpmmgr_tcg.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- stubdom/vtpmmgr/tcg.h.orig	2017-03-28 16:00:31.000000000 +0200
++++ stubdom/vtpmmgr/tcg.h	2017-03-28 16:01:01.000000000 +0200
+@@ -461,7 +461,7 @@
+    BYTE* vendorSpecific;
+ } TPM_CAP_VERSION_INFO;
+ 
+-inline void free_TPM_CAP_VERSION_INFO(TPM_CAP_VERSION_INFO* v) {
++static inline void free_TPM_CAP_VERSION_INFO(TPM_CAP_VERSION_INFO* v) {
+    free(v->vendorSpecific);
+    v->vendorSpecific = NULL;
+ }
+@@ -494,7 +494,7 @@
+    BYTE* data;
+ } TPM_SYMMETRIC_KEY;
+ 
+-inline void free_TPM_SYMMETRIC_KEY_PARMS(TPM_SYMMETRIC_KEY_PARMS* p) {
++static inline void free_TPM_SYMMETRIC_KEY_PARMS(TPM_SYMMETRIC_KEY_PARMS* p) {
+    free(p->IV);
+    p->IV = NULL;
+ }
+@@ -510,7 +510,7 @@
+ 
+ #define TPM_RSA_KEY_PARMS_INIT { 0, 0, 0, NULL }
+ 
+-inline void free_TPM_RSA_KEY_PARMS(TPM_RSA_KEY_PARMS* p) {
++static inline void free_TPM_RSA_KEY_PARMS(TPM_RSA_KEY_PARMS* p) {
+    free(p->exponent);
+    p->exponent = NULL;
+ }
+@@ -528,7 +528,7 @@
+ 
+ #define TPM_KEY_PARMS_INIT { 0, 0, 0, 0 }
+ 
+-inline void free_TPM_KEY_PARMS(TPM_KEY_PARMS* p) {
++static inline void free_TPM_KEY_PARMS(TPM_KEY_PARMS* p) {
+    if(p->parmSize) {
+       switch(p->algorithmID) {
+          case TPM_ALG_RSA:
+@@ -550,7 +550,7 @@
+ 
+ #define TPM_STORE_PUBKEY_INIT { 0, NULL }
+ 
+-inline void free_TPM_STORE_PUBKEY(TPM_STORE_PUBKEY* p) {
++static inline void free_TPM_STORE_PUBKEY(TPM_STORE_PUBKEY* p) {
+    free(p->key);
+    p->key = NULL;
+ }
+@@ -562,7 +562,7 @@
+ 
+ #define TPM_PUBKEY_INIT { TPM_KEY_PARMS_INIT, TPM_STORE_PUBKEY_INIT }
+ 
+-inline void free_TPM_PUBKEY(TPM_PUBKEY* k) {
++static inline void free_TPM_PUBKEY(TPM_PUBKEY* k) {
+    free_TPM_KEY_PARMS(&k->algorithmParms);
+    free_TPM_STORE_PUBKEY(&k->pubKey);
+ }
+@@ -574,7 +574,7 @@
+ 
+ #define TPM_PCR_SELECTION_INIT { 0, NULL }
+ 
+-inline void free_TPM_PCR_SELECTION(TPM_PCR_SELECTION* p) {
++static inline void free_TPM_PCR_SELECTION(TPM_PCR_SELECTION* p) {
+    free(p->pcrSelect);
+    p->pcrSelect = NULL;
+ }
+@@ -594,7 +594,7 @@
+ #define TPM_PCR_INFO_LONG_INIT { 0, 0, 0, TPM_PCR_SELECTION_INIT, \
+                                  TPM_PCR_SELECTION_INIT }
+ 
+-inline void free_TPM_PCR_INFO_LONG(TPM_PCR_INFO_LONG* p) {
++static inline void free_TPM_PCR_INFO_LONG(TPM_PCR_INFO_LONG* p) {
+    free_TPM_PCR_SELECTION(&p->creationPCRSelection);
+    free_TPM_PCR_SELECTION(&p->releasePCRSelection);
+ }
+@@ -607,7 +607,7 @@
+ 
+ #define TPM_PCR_INFO_INIT { TPM_PCR_SELECTION_INIT }
+ 
+-inline void free_TPM_PCR_INFO(TPM_PCR_INFO* p) {
++static inline void free_TPM_PCR_INFO(TPM_PCR_INFO* p) {
+    free_TPM_PCR_SELECTION(&p->pcrSelection);
+ }
+ 
+@@ -619,7 +619,7 @@
+ 
+ #define TPM_PCR_COMPOSITE_INIT { TPM_PCR_SELECTION_INIT, 0, NULL }
+ 
+-inline void free_TPM_PCR_COMPOSITE(TPM_PCR_COMPOSITE* p) {
++static inline void free_TPM_PCR_COMPOSITE(TPM_PCR_COMPOSITE* p) {
+    free_TPM_PCR_SELECTION(&p->select);
+    free(p->pcrValue);
+    p->pcrValue = NULL;
+@@ -643,7 +643,7 @@
+    .pubKey = TPM_STORE_PUBKEY_INIT, \
+    .encDataSize = 0, .encData = NULL }
+ 
+-inline void free_TPM_KEY(TPM_KEY* k) {
++static inline void free_TPM_KEY(TPM_KEY* k) {
+    if(k->PCRInfoSize) {
+       free_TPM_PCR_INFO(&k->PCRInfo);
+    }
+@@ -660,7 +660,7 @@
+ 
+ #define TPM_BOUND_DATA_INIT { .payloadData = NULL }
+ 
+-inline void free_TPM_BOUND_DATA(TPM_BOUND_DATA* d) {
++static inline void free_TPM_BOUND_DATA(TPM_BOUND_DATA* d) {
+    free(d->payloadData);
+    d->payloadData = NULL;
+ }
+@@ -676,7 +676,7 @@
+ #define TPM_STORED_DATA_INIT { .sealInfoSize = 0, sealInfo = TPM_PCR_INFO_INIT,\
+    .encDataSize = 0, .encData = NULL }
+ 
+-inline void free_TPM_STORED_DATA(TPM_STORED_DATA* d) {
++static inline void free_TPM_STORED_DATA(TPM_STORED_DATA* d) {
+    if(d->sealInfoSize) {
+       free_TPM_PCR_INFO(&d->sealInfo);
+    }
+@@ -696,7 +696,7 @@
+ #define TPM_STORED_DATA12_INIT { .sealInfoLongSize = 0, \
+    sealInfoLong = TPM_PCR_INFO_INIT, .encDataSize = 0, .encData = NULL }
+ 
+-inline void free_TPM_STORED_DATA12(TPM_STORED_DATA12* d) {
++static inline void free_TPM_STORED_DATA12(TPM_STORED_DATA12* d) {
+    if(d->sealInfoLongSize) {
+       free_TPM_PCR_INFO_LONG(&d->sealInfoLong);
+    }
diff --git a/xentools48/patches/patch-stubdom_vtpmmgr_tpmrsa.h b/xentools48/patches/patch-stubdom_vtpmmgr_tpmrsa.h
new file mode 100644
index 0000000000..6fad7af603
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_vtpmmgr_tpmrsa.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-stubdom_vtpmmgr_tpmrsa.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- stubdom/vtpmmgr/tpmrsa.h.orig	2017-03-28 16:12:14.000000000 +0200
++++ stubdom/vtpmmgr/tpmrsa.h	2017-03-28 16:12:26.000000000 +0200
+@@ -62,7 +62,7 @@
+       unsigned char *output );
+ 
+ /* free tpmrsa key */
+-inline void tpmrsa_free( tpmrsa_context *ctx ) {
++static inline void tpmrsa_free( tpmrsa_context *ctx ) {
+    mpi_free( &ctx->RN ); mpi_free( &ctx->E  ); mpi_free( &ctx->N  );
+ }
+ 
diff --git a/xentools48/patches/patch-stubdom_vtpmmgr_vtpm_manager.h b/xentools48/patches/patch-stubdom_vtpmmgr_vtpm_manager.h
new file mode 100644
index 0000000000..8414ba3f71
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_vtpmmgr_vtpm_manager.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-stubdom_vtpmmgr_vtpm_manager.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- stubdom/vtpmmgr/vtpm_manager.h.orig	2017-03-28 15:33:35.000000000 +0200
++++ stubdom/vtpmmgr/vtpm_manager.h	2017-03-28 15:33:55.000000000 +0200
+@@ -54,7 +54,7 @@
+ 
+ //************************ Command Codes ****************************
+ #define VTPM_ORD_BASE       0x0000
+-#define TPM_VENDOR_COMMAND  0x02000000 // TPM Main, part 2, section 17.
++#define TPM_VENDOR_COMMAND  0x20000000 // TPM Main, part 2, section 17.
+ #define VTPM_PRIV_BASE      (VTPM_ORD_BASE | TPM_VENDOR_COMMAND)
+ 
+ /*
diff --git a/xentools48/patches/patch-stubdom_vtpmmgr_vtpmmgr.h b/xentools48/patches/patch-stubdom_vtpmmgr_vtpmmgr.h
new file mode 100644
index 0000000000..3c1b49d524
--- /dev/null
+++ b/xentools48/patches/patch-stubdom_vtpmmgr_vtpmmgr.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-stubdom_vtpmmgr_vtpmmgr.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- stubdom/vtpmmgr/vtpmmgr.h.orig	2017-03-28 16:13:43.000000000 +0200
++++ stubdom/vtpmmgr/vtpmmgr.h	2017-03-28 16:13:51.000000000 +0200
+@@ -101,7 +101,7 @@
+ 
+ TPM_RESULT vtpmmgr_handle_cmd(struct tpm_opaque *opq, tpmcmd_t* tpmcmd);
+ 
+-inline TPM_RESULT vtpmmgr_rand(unsigned char* bytes, size_t num_bytes) {
++static inline TPM_RESULT vtpmmgr_rand(unsigned char* bytes, size_t num_bytes) {
+    return ctr_drbg_random(&vtpm_globals.ctr_drbg, bytes, num_bytes) == 0 ? 0 : TPM_FAIL;
+ }
+ 
diff --git a/xentools48/patches/patch-tools_Makefile b/xentools48/patches/patch-tools_Makefile
new file mode 100644
index 0000000000..6563006bee
--- /dev/null
+++ b/xentools48/patches/patch-tools_Makefile
@@ -0,0 +1,39 @@
+$NetBSD: patch-tools_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/Makefile.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/Makefile	2017-03-24 20:07:16.000000000 +0100
+@@ -18,7 +18,7 @@
+ SUBDIRS-y += xenstat
+ SUBDIRS-$(CONFIG_Linux) += memshr 
+ SUBDIRS-$(CONFIG_BLKTAP2) += blktap2
+-SUBDIRS-$(CONFIG_NetBSD) += xenbackendd
++#XXX SUBDIRS-$(CONFIG_NetBSD) += xenbackendd
+ SUBDIRS-y += libfsimage
+ SUBDIRS-$(CONFIG_Linux) += libvchan
+ 
+@@ -34,7 +34,7 @@
+ SUBDIRS-$(CONFIG_X86) += xenpaging
+ SUBDIRS-$(CONFIG_X86) += debugger/gdbsx
+ SUBDIRS-$(CONFIG_X86) += debugger/kdd
+-SUBDIRS-$(CONFIG_TESTS) += tests
++#XXX SUBDIRS-$(CONFIG_TESTS) += tests
+ 
+ # These don't cross-compile
+ ifeq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH))
+@@ -275,11 +275,11 @@
+ 		-L$(XEN_ROOT)/tools/libs/evtchn \
+ 		-L$(XEN_ROOT)/tools/libs/gnttab \
+ 		-L$(XEN_ROOT)/tools/libs/foreignmemory \
+-		-Wl,-rpath-link=$(XEN_ROOT)/tools/libs/toollog \
+-		-Wl,-rpath-link=$(XEN_ROOT)/tools/libs/evtchn \
+-		-Wl,-rpath-link=$(XEN_ROOT)/tools/libs/gnttab \
+-		-Wl,-rpath-link=$(XEN_ROOT)/tools/libs/call \
+-		-Wl,-rpath-link=$(XEN_ROOT)/tools/libs/foreignmemory \
++		-Wl,-rpath-link,$(XEN_ROOT)/tools/libs/toollog \
++		-Wl,-rpath-link,$(XEN_ROOT)/tools/libs/evtchn \
++		-Wl,-rpath-link,$(XEN_ROOT)/tools/libs/gnttab \
++		-Wl,-rpath-link,$(XEN_ROOT)/tools/libs/call \
++		-Wl,-rpath-link,$(XEN_ROOT)/tools/libs/foreignmemory \
+ 		$(QEMU_UPSTREAM_RPATH)" \
+ 		--bindir=$(LIBEXEC_BIN) \
+ 		--datadir=$(SHAREDIR)/qemu-xen \
diff --git a/xentools48/patches/patch-tools_Rules.mk b/xentools48/patches/patch-tools_Rules.mk
new file mode 100644
index 0000000000..2bc744fab2
--- /dev/null
+++ b/xentools48/patches/patch-tools_Rules.mk
@@ -0,0 +1,91 @@
+$NetBSD: patch-tools_Rules.mk,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/Rules.mk.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/Rules.mk	2017-03-24 17:48:17.000000000 +0100
+@@ -84,57 +84,57 @@
+ CFLAGS_libxentoollog = -I$(XEN_LIBXENTOOLLOG)/include $(CFLAGS_xeninclude)
+ SHDEPS_libxentoollog =
+ LDLIBS_libxentoollog = $(XEN_LIBXENTOOLLOG)/libxentoollog$(libextension)
+-SHLIB_libxentoollog  = -Wl,-rpath-link=$(XEN_LIBXENTOOLLOG)
++SHLIB_libxentoollog  = -Wl,-rpath-link,$(XEN_LIBXENTOOLLOG)
+ 
+ CFLAGS_libxenevtchn = -I$(XEN_LIBXENEVTCHN)/include $(CFLAGS_xeninclude)
+ SHDEPS_libxenevtchn =
+ LDLIBS_libxenevtchn = $(XEN_LIBXENEVTCHN)/libxenevtchn$(libextension)
+-SHLIB_libxenevtchn  = -Wl,-rpath-link=$(XEN_LIBXENEVTCHN)
++SHLIB_libxenevtchn  = -Wl,-rpath-link,$(XEN_LIBXENEVTCHN)
+ 
+ CFLAGS_libxengnttab = -I$(XEN_LIBXENGNTTAB)/include $(CFLAGS_xeninclude)
+ SHDEPS_libxengnttab = $(SHLIB_libxentoollog)
+ LDLIBS_libxengnttab = $(SHDEPS_libxengnttab) $(XEN_LIBXENGNTTAB)/libxengnttab$(libextension)
+-SHLIB_libxengnttab  = $(SHDEPS_libxengnttab) -Wl,-rpath-link=$(XEN_LIBXENGNTTAB)
++SHLIB_libxengnttab  = $(SHDEPS_libxengnttab) -Wl,-rpath-link,$(XEN_LIBXENGNTTAB)
+ 
+ # xengntshr_* interfaces are actually part of libxengnttab.so
+ CFLAGS_libxengntshr = -I$(XEN_LIBXENGNTTAB)/include $(CFLAGS_xeninclude)
+ LDLIBS_libxengntshr = $(XEN_LIBXENGNTTAB)/libxengnttab$(libextension)
+-SHLIB_libxengntshr  = -Wl,-rpath-link=$(XEN_LIBXENGNTTAB)
++SHLIB_libxengntshr  = -Wl,-rpath-link,$(XEN_LIBXENGNTTAB)
+ 
+ CFLAGS_libxencall = -I$(XEN_LIBXENCALL)/include $(CFLAGS_xeninclude)
+ LDLIBS_libxencall = $(XEN_LIBXENCALL)/libxencall$(libextension)
+-SHLIB_libxencall  = -Wl,-rpath-link=$(XEN_LIBXENCALL)
++SHLIB_libxencall  = -Wl,-rpath-link,$(XEN_LIBXENCALL)
+ 
+ CFLAGS_libxenforeignmemory = -I$(XEN_LIBXENFOREIGNMEMORY)/include $(CFLAGS_xeninclude)
+ LDLIBS_libxenforeignmemory = $(XEN_LIBXENFOREIGNMEMORY)/libxenforeignmemory$(libextension)
+-SHLIB_libxenforeignmemory  = -Wl,-rpath-link=$(XEN_LIBXENFOREIGNMEMORY)
++SHLIB_libxenforeignmemory  = -Wl,-rpath-link,$(XEN_LIBXENFOREIGNMEMORY)
+ 
+ # code which compiles against libxenctrl get __XEN_TOOLS__ and
+ # therefore sees the unstable hypercall interfaces.
+ CFLAGS_libxenctrl = -I$(XEN_LIBXC)/include $(CFLAGS_libxentoollog) $(CFLAGS_libxenforeignmemory) $(CFLAGS_xeninclude) -D__XEN_TOOLS__
+ SHDEPS_libxenctrl = $(SHLIB_libxentoollog) $(SHLIB_libxenevtchn) $(SHLIB_libxengnttab) $(SHLIB_libxengntshr) $(SHLIB_libxencall) $(SHLIB_libxenforeignmemory)
+ LDLIBS_libxenctrl = $(SHDEPS_libxenctrl) $(XEN_LIBXC)/libxenctrl$(libextension)
+-SHLIB_libxenctrl  = $(SHDEPS_libxenctrl) -Wl,-rpath-link=$(XEN_LIBXC)
++SHLIB_libxenctrl  = $(SHDEPS_libxenctrl) -Wl,-rpath-link,$(XEN_LIBXC)
+ 
+ CFLAGS_libxenguest = -I$(XEN_LIBXC)/include $(CFLAGS_libxenevtchn) $(CFLAGS_libxenforeignmemory) $(CFLAGS_xeninclude)
+ SHDEPS_libxenguest = $(SHLIB_libxenevtchn)
+ LDLIBS_libxenguest = $(SHDEPS_libxenguest) $(XEN_LIBXC)/libxenguest$(libextension)
+-SHLIB_libxenguest  = $(SHDEPS_libxenguest) -Wl,-rpath-link=$(XEN_LIBXC)
++SHLIB_libxenguest  = $(SHDEPS_libxenguest) -Wl,-rpath-link,$(XEN_LIBXC)
+ 
+ CFLAGS_libxenstore = -I$(XEN_XENSTORE)/include $(CFLAGS_xeninclude)
+ SHDEPS_libxenstore =
+ LDLIBS_libxenstore = $(SHDEPS_libxenguest) $(XEN_XENSTORE)/libxenstore$(libextension)
+-SHLIB_libxenstore  = $(SHDEPS_libxenguest) -Wl,-rpath-link=$(XEN_XENSTORE)
++SHLIB_libxenstore  = $(SHDEPS_libxenguest) -Wl,-rpath-link,$(XEN_XENSTORE)
+ 
+ CFLAGS_libxenstat  = -I$(XEN_LIBXENSTAT)
+ SHDEPS_libxenstat  = $(SHLIB_libxenctrl) $(SHLIB_libxenstore)
+ LDLIBS_libxenstat  = $(SHDEPS_libxenstat) $(XEN_LIBXENSTAT)/libxenstat$(libextension)
+-SHLIB_libxenstat   = $(SHDEPS_libxenstat) -Wl,-rpath-link=$(XEN_LIBXENSTAT)
++SHLIB_libxenstat   = $(SHDEPS_libxenstat) -Wl,-rpath-link,$(XEN_LIBXENSTAT)
+ 
+ CFLAGS_libxenvchan = -I$(XEN_LIBVCHAN)
+ SHDEPS_libxenvchan = $(SHLIB_libxentoollog) $(SHLIB_libxenstore) $(SHLIB_libxenevtchn) $(SHLIB_libxengnttab) $(SHLIB_libxengntshr)
+ LDLIBS_libxenvchan = $(SHDEPS_libxenvchan) $(XEN_LIBVCHAN)/libxenvchan$(libextension)
+-SHLIB_libxenvchan  = $(SHDEPS_libxenvchan) -Wl,-rpath-link=$(XEN_LIBVCHAN)
++SHLIB_libxenvchan  = $(SHDEPS_libxenvchan) -Wl,-rpath-link,$(XEN_LIBVCHAN)
+ 
+ ifeq ($(debug),y)
+ # Disable optimizations and enable debugging information for macros
+@@ -151,7 +151,7 @@
+ CFLAGS_libblktapctl = -I$(XEN_BLKTAP2)/control -I$(XEN_BLKTAP2)/include $(CFLAGS_xeninclude)
+ SHDEPS_libblktapctl =
+ LDLIBS_libblktapctl = $(SHDEPS_libblktapctl) $(XEN_BLKTAP2)/control/libblktapctl$(libextension)
+-SHLIB_libblktapctl  = $(SHDEPS_libblktapctl) -Wl,-rpath-link=$(XEN_BLKTAP2)/control
++SHLIB_libblktapctl  = $(SHDEPS_libblktapctl) -Wl,-rpath-link,$(XEN_BLKTAP2)/control
+ else
+ CFLAGS_libblktapctl =
+ SHDEPS_libblktapctl =
+@@ -162,7 +162,7 @@
+ CFLAGS_libxenlight = -I$(XEN_XENLIGHT) $(CFLAGS_libxenctrl) $(CFLAGS_xeninclude)
+ SHDEPS_libxenlight = $(SHLIB_libxenctrl) $(SHLIB_libxenstore) $(SHLIB_libblktapctl)
+ LDLIBS_libxenlight = $(SHDEPS_libxenlight) $(XEN_XENLIGHT)/libxenlight$(libextension)
+-SHLIB_libxenlight  = $(SHDEPS_libxenlight) -Wl,-rpath-link=$(XEN_XENLIGHT)
++SHLIB_libxenlight  = $(SHDEPS_libxenlight) -Wl,-rpath-link,$(XEN_XENLIGHT)
+ 
+ CFLAGS += -D__XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__
+ 
diff --git a/xentools48/patches/patch-tools_configure b/xentools48/patches/patch-tools_configure
new file mode 100644
index 0000000000..de72906aa4
--- /dev/null
+++ b/xentools48/patches/patch-tools_configure
@@ -0,0 +1,39 @@
+$NetBSD: patch-tools_configure,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/configure.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/configure	2017-03-24 18:13:41.000000000 +0100
+@@ -2408,7 +2408,7 @@
+ 
+ 
+ 
+-ac_config_files="$ac_config_files ../config/Tools.mk hotplug/FreeBSD/rc.d/xencommons hotplug/FreeBSD/rc.d/xendriverdomain hotplug/Linux/init.d/sysconfig.xencommons hotplug/Linux/init.d/sysconfig.xendomains hotplug/Linux/init.d/xen-watchdog hotplug/Linux/init.d/xencommons hotplug/Linux/init.d/xendomains hotplug/Linux/init.d/xendriverdomain hotplug/Linux/launch-xenstore hotplug/Linux/vif-setup hotplug/Linux/xen-hotplug-common.sh hotplug/Linux/xendomains hotplug/NetBSD/rc.d/xencommons hotplug/NetBSD/rc.d/xendriverdomain libxl/xenlight.pc.in libxl/xlutil.pc.in ocaml/xenstored/oxenstored.conf"
++ac_config_files="$ac_config_files ../config/Tools.mk ../config/Paths.mk hotplug/FreeBSD/rc.d/xencommons hotplug/FreeBSD/rc.d/xendriverdomain hotplug/Linux/init.d/sysconfig.xencommons hotplug/Linux/init.d/sysconfig.xendomains hotplug/Linux/init.d/xen-watchdog hotplug/Linux/init.d/xencommons hotplug/Linux/init.d/xendomains hotplug/Linux/init.d/xendriverdomain hotplug/Linux/launch-xenstore hotplug/Linux/vif-setup hotplug/Linux/xen-hotplug-common.sh hotplug/Linux/xendomains hotplug/NetBSD/rc.d/xencommons hotplug/NetBSD/rc.d/xendriverdomain libxl/xenlight.pc.in libxl/xlutil.pc.in ocaml/xenstored/oxenstored.conf"
+ 
+ ac_config_headers="$ac_config_headers config.h"
+ 
+@@ -3844,7 +3844,7 @@
+ 
+ if test "x$sysconfdir" = 'x${prefix}/etc' ; then
+     case "$host_os" in
+-         *freebsd*)
++         *freebsd*|*netbsd*)
+          sysconfdir=$prefix/etc
+          ;;
+          *solaris*)
+@@ -3962,7 +3962,7 @@
+ 
+ case "$host_os" in
+ *freebsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
+-*netbsd*) XEN_LOCK_DIR=$localstatedir/lib ;;
++*netbsd*) XEN_LOCK_DIR=$localstatedir/run ;;
+ *) XEN_LOCK_DIR=$localstatedir/lock ;;
+ esac
+ 
+@@ -10386,6 +10386,7 @@
+ do
+   case $ac_config_target in
+     "../config/Tools.mk") CONFIG_FILES="$CONFIG_FILES ../config/Tools.mk" ;;
++    "../config/Paths.mk") CONFIG_FILES="$CONFIG_FILES ../config/Paths.mk" ;;
+     "hotplug/FreeBSD/rc.d/xencommons") CONFIG_FILES="$CONFIG_FILES hotplug/FreeBSD/rc.d/xencommons" ;;
+     "hotplug/FreeBSD/rc.d/xendriverdomain") CONFIG_FILES="$CONFIG_FILES hotplug/FreeBSD/rc.d/xendriverdomain" ;;
+     "hotplug/Linux/init.d/sysconfig.xencommons") CONFIG_FILES="$CONFIG_FILES hotplug/Linux/init.d/sysconfig.xencommons" ;;
diff --git a/xentools48/patches/patch-tools_console_daemon_utils.c b/xentools48/patches/patch-tools_console_daemon_utils.c
new file mode 100644
index 0000000000..e2b4d69c3f
--- /dev/null
+++ b/xentools48/patches/patch-tools_console_daemon_utils.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-tools_console_daemon_utils.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/console/daemon/utils.c.orig	2015-06-22 13:41:35.000000000 +0000
++++ tools/console/daemon/utils.c
+@@ -113,13 +113,15 @@ bool xen_setup(void)
+ 	xs = xs_daemon_open();
+ 	if (xs == NULL) {
+ 		dolog(LOG_ERR,
+-		      "Failed to contact xenstore (%m).  Is it running?");
++		      "Failed to contact xenstore (%s).  Is it running?",
++		      strerror(errno));
+ 		goto out;
+ 	}
+ 
+ 	xc = xc_interface_open(0,0,0);
+ 	if (!xc) {
+-		dolog(LOG_ERR, "Failed to contact hypervisor (%m)");
++		dolog(LOG_ERR, "Failed to contact hypervisor (%s)",
++		      strerror(errno));
+ 		goto out;
+ 	}
+ 
diff --git a/xentools48/patches/patch-tools_debugger_gdbsx_Makefile b/xentools48/patches/patch-tools_debugger_gdbsx_Makefile
new file mode 100644
index 0000000000..81a7d77d7e
--- /dev/null
+++ b/xentools48/patches/patch-tools_debugger_gdbsx_Makefile
@@ -0,0 +1,15 @@
+$NetBSD: patch-tools_debugger_gdbsx_Makefile,v 1.1 2017/10/28 04:08:46 khorben Exp $
+
+Add support for LDFLAGS when building gdbsx
+
+--- tools/debugger/gdbsx/Makefile.orig	2016-09-20 05:59:24.000000000 +0000
++++ tools/debugger/gdbsx/Makefile
+@@ -21,7 +21,7 @@ install: all
+ 	$(INSTALL_PROG) gdbsx $(DESTDIR)$(sbindir)/gdbsx
+ 
+ gdbsx: gx/gx_all.a xg/xg_all.a 
+-	$(CC) -o $@ $^
++	$(CC) $(LDFLAGS) -o $@ $^
+ 
+ xg/xg_all.a:
+ 	$(MAKE) -C xg
diff --git a/xentools48/patches/patch-tools_examples_Makefile b/xentools48/patches/patch-tools_examples_Makefile
new file mode 100644
index 0000000000..8f400ba88a
--- /dev/null
+++ b/xentools48/patches/patch-tools_examples_Makefile
@@ -0,0 +1,12 @@
+$NetBSD: patch-tools_examples_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/examples/Makefile.orig	2015-01-12 17:53:24.000000000 +0100
++++ tools/examples/Makefile	2015-01-19 13:37:18.000000000 +0100
+@@ -1,6 +1,6 @@
+ XEN_ROOT = $(CURDIR)/../..
+ include $(XEN_ROOT)/tools/Rules.mk
+-
++XEN_CONFIG_DIR=${XEN_EXAMPLES_DIR}
+ # Xen configuration dir and configs to go there.
+ XEN_READMES = README
+ XEN_READMES += README.incompatibilities
diff --git a/xentools48/patches/patch-tools_firmware_etherboot_Makefile b/xentools48/patches/patch-tools_firmware_etherboot_Makefile
new file mode 100644
index 0000000000..04dfd44550
--- /dev/null
+++ b/xentools48/patches/patch-tools_firmware_etherboot_Makefile
@@ -0,0 +1,26 @@
+$NetBSD: patch-tools_firmware_etherboot_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/firmware/etherboot/Makefile.orig	2015-01-12 17:53:24.000000000 +0100
++++ tools/firmware/etherboot/Makefile	2015-01-19 13:42:54.000000000 +0100
+@@ -27,18 +27,10 @@
+ %.rom: $D/src/arch/i386/Makefile
+ 	$(MAKE) -C $D/src bin/$(*F).rom
+ 
+-$T:
+-	if ! $(FETCHER) _$T $(IPXE_TARBALL_URL); then \
+-		$(GIT) clone $(IPXE_GIT_URL) $D.git; \
+-		(cd $D.git && $(GIT) archive --format=tar --prefix=$D/ \
+-		$(IPXE_GIT_TAG) | gzip >../_$T); \
+-		rm -rf $D.git; \
+-	fi
+-	mv _$T $T
++$D:
++	ln -sf $(WRKSRC)/../ipxe $D
+ 
+-$D/src/arch/i386/Makefile: $T Config
+-	rm -rf $D
+-	gzip -dc $T | tar xf -
++$D/src/arch/i386/Makefile: $D Config
+ 	for i in $$(cat patches/series) ; do                 \
+ 	    patch -d $D -p1 --quiet <patches/$$i || exit 1 ; \
+ 	done
diff --git a/xentools48/patches/patch-tools_firmware_hvmloader_Makefile b/xentools48/patches/patch-tools_firmware_hvmloader_Makefile
new file mode 100644
index 0000000000..879e19a391
--- /dev/null
+++ b/xentools48/patches/patch-tools_firmware_hvmloader_Makefile
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_firmware_hvmloader_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/firmware/hvmloader/Makefile.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/firmware/hvmloader/Makefile	2017-03-24 18:14:34.000000000 +0100
+@@ -26,7 +26,7 @@
+ # SMBIOS spec requires format mm/dd/yyyy
+ SMBIOS_REL_DATE ?= $(shell date +%m/%d/%Y)
+ 
+-CFLAGS += $(CFLAGS_xeninclude)
++CFLAGS += $(CFLAGS_xeninclude) $(EXTRA_CFLAGS)
+ 
+ # We mustn't use tools-only public interfaces.
+ CFLAGS += -D__XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__
diff --git a/xentools48/patches/patch-tools_hotplug_NetBSD_Makefile b/xentools48/patches/patch-tools_hotplug_NetBSD_Makefile
new file mode 100644
index 0000000000..2f074e1ef0
--- /dev/null
+++ b/xentools48/patches/patch-tools_hotplug_NetBSD_Makefile
@@ -0,0 +1,52 @@
+$NetBSD: patch-tools_hotplug_NetBSD_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/hotplug/NetBSD/Makefile.orig	2016-02-09 14:44:19.000000000 +0000
++++ tools/hotplug/NetBSD/Makefile
+@@ -3,12 +3,13 @@ include $(XEN_ROOT)/tools/Rules.mk
+ 
+ # Xen script dir and scripts to go there.
+ XEN_SCRIPTS =
++XEN_SCRIPTS += locking.sh
+ XEN_SCRIPTS += block
+ XEN_SCRIPTS += vif-bridge
+ XEN_SCRIPTS += vif-ip
+ 
+ XEN_SCRIPT_DATA =
+-XEN_RCD_PROG = rc.d/xencommons rc.d/xendomains rc.d/xen-watchdog rc.d/xendriverdomain
++#XEN_RCD_PROG = rc.d/xencommons rc.d/xendomains rc.d/xen-watchdog rc.d/xendriverdomain
+ 
+ .PHONY: all
+ all:
+@@ -21,10 +22,11 @@ install: install-scripts install-rcd
+ 
+ .PHONY: install-scripts
+ install-scripts:
+-	$(INSTALL_DIR) $(DESTDIR)$(XEN_SCRIPT_DIR)
++	$(INSTALL_DIR) $(DESTDIR)$(XEN_EXAMPLES_DIR)
++	$(INSTALL_DIR) $(DESTDIR)$(XEN_EXAMPLES_DIR)/scripts
+ 	set -e; for i in $(XEN_SCRIPTS); \
+ 	   do \
+-	   $(INSTALL_PROG) $$i $(DESTDIR)$(XEN_SCRIPT_DIR); \
++	   $(INSTALL_PROG) $$i $(DESTDIR)$(XEN_EXAMPLES_DIR)/scripts; \
+ 	done
+ 	set -e; for i in $(XEN_SCRIPT_DATA); \
+ 	   do \
+@@ -33,12 +35,12 @@ install-scripts:
+ 
+ .PHONY: install-rcd
+ install-rcd:
+-	$(INSTALL_DIR) $(DESTDIR)$(INITD_DIR)
+-	set -e; for i in $(XEN_RCD_PROG); \
+-	   do \
+-	   $(INSTALL_PROG) $$i $(DESTDIR)$(INITD_DIR); \
+-	done
+-	$(INSTALL_DATA) ../common/hotplugpath.sh $(DESTDIR)$(INITD_DIR)/xen-hotplugpath.sh
++#	$(INSTALL_DIR) $(DESTDIR)$(INITD_DIR)
++#	set -e; for i in $(XEN_RCD_PROG); \
++#	   do \
++#	   $(INSTALL_PROG) $$i $(DESTDIR)$(INITD_DIR); \
++#	done
++#	$(INSTALL_DATA) ../common/hotplugpath.sh $(DESTDIR)$(INITD_DIR)/xen-hotplugpath.sh
+ 
+ .PHONY: clean
+ clean:
diff --git a/xentools48/patches/patch-tools_hotplug_NetBSD_block b/xentools48/patches/patch-tools_hotplug_NetBSD_block
new file mode 100644
index 0000000000..f8c2e9b95a
--- /dev/null
+++ b/xentools48/patches/patch-tools_hotplug_NetBSD_block
@@ -0,0 +1,37 @@
+$NetBSD: patch-tools_hotplug_NetBSD_block,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/hotplug/NetBSD/block.orig	2016-02-09 14:44:19.000000000 +0000
++++ tools/hotplug/NetBSD/block
+@@ -6,6 +6,7 @@
+ 
+ DIR=$(dirname "$0")
+ . "${DIR}/hotplugpath.sh"
++. "${DIR}/locking.sh"
+ 
+ PATH=${bindir}:${sbindir}:${LIBEXEC_BIN}:/bin:/usr/bin:/sbin:/usr/sbin
+ export PATH
+@@ -62,6 +63,7 @@ case $xstatus in
+ 			available_disks="$available_disks $disk"
+ 			eval $disk=free
+ 		done
++		claim_lock block
+ 		# Mark the used vnd(4) devices as ``used''.
+ 		for disk in `sysctl hw.disknames`; do
+ 			case $disk in
+@@ -77,6 +79,7 @@ case $xstatus in
+ 				break	
+ 			fi
+ 		done
++		release_lock block
+ 		if [ x$device = x ] ; then
+ 			error "no available vnd device"
+ 		fi
+@@ -86,7 +89,7 @@ case $xstatus in
+ 		device=$xparams
+ 		;;
+ 	esac
+-	physical_device=$(stat -f '%r' "$device")
++	physical_device=$(stat -L -f '%r' "$device")
+ 	xenstore-write $xpath/physical-device $physical_device
+ 	xenstore-write $xpath/hotplug-status connected
+ 	exit 0
diff --git a/xentools48/patches/patch-tools_hotplug_NetBSD_vif-bridge b/xentools48/patches/patch-tools_hotplug_NetBSD_vif-bridge
new file mode 100644
index 0000000000..267728bbb3
--- /dev/null
+++ b/xentools48/patches/patch-tools_hotplug_NetBSD_vif-bridge
@@ -0,0 +1,16 @@
+$NetBSD: patch-tools_hotplug_NetBSD_vif-bridge,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/hotplug/NetBSD/vif-bridge.orig	2015-01-12 17:53:24.000000000 +0100
++++ tools/hotplug/NetBSD/vif-bridge	2015-01-19 13:16:37.000000000 +0100
+@@ -23,7 +23,10 @@
+ 	xbridge=$(xenstore-read "$xpath/bridge")
+ 	xfid=$(xenstore-read "$xpath/frontend-id")
+ 	xhandle=$(xenstore-read "$xpath/handle")
+-	iface=$(xenstore-read "$xpath/vifname")
++	iface=$(xenstore-read "$xpath/vifname") || true
++	if [ x${iface} = "x" ] ; then
++		iface=xvif$xfid.$xhandle
++	fi
+ 	ifconfig $iface up
+ 	brconfig $xbridge add $iface
+ 	xenstore-write $xpath/hotplug-status connected
diff --git a/xentools48/patches/patch-tools_hotplug_NetBSD_vif-ip b/xentools48/patches/patch-tools_hotplug_NetBSD_vif-ip
new file mode 100644
index 0000000000..50d35598ab
--- /dev/null
+++ b/xentools48/patches/patch-tools_hotplug_NetBSD_vif-ip
@@ -0,0 +1,15 @@
+$NetBSD: patch-tools_hotplug_NetBSD_vif-ip,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/hotplug/NetBSD/vif-ip.orig	2015-01-12 17:53:24.000000000 +0100
++++ tools/hotplug/NetBSD/vif-ip	2015-01-19 13:16:37.000000000 +0100
+@@ -24,6 +24,10 @@
+ 	xfid=$(xenstore-read "$xpath/frontend-id")
+ 	xhandle=$(xenstore-read "$xpath/handle")
+ 	iface=$(xenstore-read "$xpath/vifname")
++	iface=$(xenstore-read "$xpath/vifname") || true
++	if [ x${iface} = "x" ] ; then
++		iface=xvif$xfid.$xhandle
++	fi
+ 	ifconfig $iface $xip up
+ 	xenstore-write $xpath/hotplug-status connected
+ 	exit 0
diff --git a/xentools48/patches/patch-tools_hotplug_common_Makefile b/xentools48/patches/patch-tools_hotplug_common_Makefile
new file mode 100644
index 0000000000..164777f50d
--- /dev/null
+++ b/xentools48/patches/patch-tools_hotplug_common_Makefile
@@ -0,0 +1,24 @@
+$NetBSD: patch-tools_hotplug_common_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/hotplug/common/Makefile.orig	2015-01-12 17:53:24.000000000 +0100
++++ tools/hotplug/common/Makefile	2015-01-19 13:16:37.000000000 +0100
+@@ -23,15 +23,15 @@
+ 
+ .PHONY: install-scripts
+ install-scripts: build
+-	[ -d $(DESTDIR)$(XEN_SCRIPT_DIR) ] || \
+-		$(INSTALL_DIR) $(DESTDIR)$(XEN_SCRIPT_DIR)
++	[ -d $(DESTDIR)${XEN_EXAMPLES_DIR}/scripts ] || \
++		$(INSTALL_DIR) $(DESTDIR)${XEN_EXAMPLES_DIR}/scripts
+ 	set -e; for i in $(XEN_SCRIPTS); \
+ 	   do \
+-	   $(INSTALL_PROG) $$i $(DESTDIR)$(XEN_SCRIPT_DIR); \
++	   $(INSTALL_PROG) $$i $(DESTDIR)${XEN_EXAMPLES_DIR}/scripts; \
+ 	done
+ 	set -e; for i in $(XEN_SCRIPT_DATA); \
+ 	   do \
+-	   $(INSTALL_DATA) $$i $(DESTDIR)$(XEN_SCRIPT_DIR); \
++	   $(INSTALL_DATA) $$i $(DESTDIR)${XEN_EXAMPLES_DIR}/scripts; \
+ 	done
+ 
+ .PHONY: clean
diff --git a/xentools48/patches/patch-tools_include_xen-sys_NetBSD_gntdev.h b/xentools48/patches/patch-tools_include_xen-sys_NetBSD_gntdev.h
new file mode 100644
index 0000000000..e21b4d9803
--- /dev/null
+++ b/xentools48/patches/patch-tools_include_xen-sys_NetBSD_gntdev.h
@@ -0,0 +1,110 @@
+$NetBSD: patch-tools_include_xen-sys_NetBSD_gntdev.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/include/xen-sys/NetBSD/gntdev.h.orig	2015-01-19 13:16:37.000000000 +0100
++++ tools/include/xen-sys/NetBSD/gntdev.h	2015-01-19 13:16:37.000000000 +0100
+@@ -0,0 +1,105 @@
++/******************************************************************************
++ * gntdev.h
++ * 
++ * Interface to /dev/xen/gntdev.
++ * 
++ * Copyright (c) 2007, D G Murray
++ * 
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version 2
++ * as published by the Free Software Foundation; or, when distributed
++ * separately from the Linux kernel or incorporated into other
++ * software packages, subject to the following license:
++ * 
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this source file (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.
++ */
++
++#ifndef __NetBSD_PUBLIC_GNTDEV_H__
++#define __NetBSD_PUBLIC_GNTDEV_H__
++
++struct ioctl_gntdev_grant_ref {
++	/* The domain ID of the grant to be mapped. */
++	uint32_t domid;
++	/* The grant reference of the grant to be mapped. */
++	uint32_t ref;
++};
++
++/*
++ * Inserts the grant references into the mapping table of an instance
++ * of gntdev. N.B. This does not perform the mapping, which is deferred
++ * until mmap() is called with @index as the offset.
++ */
++#define IOCTL_GNTDEV_MAP_GRANT_REF				\
++	_IOWR('G', 0, sizeof(struct ioctl_gntdev_map_grant_ref))
++struct ioctl_gntdev_map_grant_ref {
++	/* IN parameters */
++	/* The number of grants to be mapped. */
++	uint32_t count;
++	uint32_t pad;
++	/* OUT parameters */
++	/* The offset to be used on a subsequent call to mmap(). */
++	uint64_t index;
++	/* Variable IN parameter. */
++	/* Array of grant references, of size @count. */
++	struct ioctl_gntdev_grant_ref refs[1];
++};
++
++/*
++ * Removes the grant references from the mapping table of an instance of
++ * of gntdev. N.B. munmap() must be called on the relevant virtual address(es)
++ * before this ioctl is called, or an error will result.
++ */
++#define IOCTL_GNTDEV_UNMAP_GRANT_REF				\
++	_IOW('G', 1, sizeof(struct ioctl_gntdev_unmap_grant_ref))       
++struct ioctl_gntdev_unmap_grant_ref {
++	/* IN parameters */
++	/* The offset was returned by the corresponding map operation. */
++	uint64_t index;
++	/* The number of pages to be unmapped. */
++	uint32_t count;
++	uint32_t pad;
++};
++
++/*
++ * Returns the offset in the driver's address space that corresponds
++ * to @vaddr. This can be used to perform a munmap(), followed by an
++ * UNMAP_GRANT_REF ioctl, where no state about the offset is retained by
++ * the caller. The number of pages that were allocated at the same time as
++ * @vaddr is returned in @count.
++ *
++ * N.B. Where more than one page has been mapped into a contiguous range, the
++ *      supplied @vaddr must correspond to the start of the range; otherwise
++ *      an error will result. It is only possible to munmap() the entire
++ *      contiguously-allocated range at once, and not any subrange thereof.
++ */
++#define IOCTL_GNTDEV_GET_OFFSET_FOR_VADDR			\
++	_IOWR('G', 2, sizeof(struct ioctl_gntdev_get_offset_for_vaddr))
++struct ioctl_gntdev_get_offset_for_vaddr {
++	/* IN parameters */
++	/* The virtual address of the first mapped page in a range. */
++	uint64_t vaddr;
++	/* OUT parameters */
++	/* The offset that was used in the initial mmap() operation. */
++	uint64_t offset;
++	/* The number of pages mapped in the VM area that begins at @vaddr. */
++	uint32_t count;
++	uint32_t pad;
++};
++
++#endif /* __NetBSD_PUBLIC_GNTDEV_H__ */
diff --git a/xentools48/patches/patch-tools_libs_call_netbsd.c b/xentools48/patches/patch-tools_libs_call_netbsd.c
new file mode 100644
index 0000000000..1ee7f7d6b3
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_call_netbsd.c
@@ -0,0 +1,55 @@
+$NetBSD: patch-tools_libs_call_netbsd.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/call/netbsd.c.orig	2017-03-24 18:29:45.000000000 +0100
++++ tools/libs/call/netbsd.c	2017-03-24 18:34:05.000000000 +0100
+@@ -19,12 +19,14 @@
+  * Split from xc_netbsd.c
+  */
+ 
+-#include "xc_private.h"
+ 
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <malloc.h>
++#include <errno.h>
+ #include <sys/mman.h>
++#include <sys/ioctl.h>
++#include "private.h"
+ 
+ int osdep_xencall_open(xencall_handle *xcall)
+ {
+@@ -69,12 +71,13 @@
+     return close(fd);
+ }
+ 
+-void *osdep_alloc_hypercall_buffer(xencall_handle *xcall, size_t npages)
++void *osdep_alloc_pages(xencall_handle *xcall, size_t npages)
+ {
+-    size_t size = npages * XC_PAGE_SIZE;
++    size_t size = npages * PAGE_SIZE;
+     void *p;
++    int ret;
+ 
+-    ret = posix_memalign(&p, XC_PAGE_SIZE, size);
++    ret = posix_memalign(&p, PAGE_SIZE, size);
+     if ( ret != 0 || !p )
+         return NULL;
+ 
+@@ -86,14 +89,13 @@
+     return p;
+ }
+ 
+-void osdep_free_hypercall_buffer(xencall_handle *xcall, void *ptr,
+-                                 size_t npages)
++void osdep_free_pages(xencall_handle *xcall, void *ptr, size_t npages)
+ {
+-    (void) munlock(ptr, npages * XC_PAGE_SIZE);
++    (void) munlock(ptr, npages * PAGE_SIZE);
+     free(ptr);
+ }
+ 
+-int do_xen_hypercall(xencall_handle *xcall, privcmd_hypercall_t *hypercall)
++int osdep_hypercall(xencall_handle *xcall, privcmd_hypercall_t *hypercall)
+ {
+     int fd = xcall->fd;
+     int error = ioctl(fd, IOCTL_PRIVCMD_HYPERCALL, hypercall);
diff --git a/xentools48/patches/patch-tools_libs_call_private.h b/xentools48/patches/patch-tools_libs_call_private.h
new file mode 100644
index 0000000000..e0c35f8c06
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_call_private.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-tools_libs_call_private.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/call/private.h.orig	2017-03-28 10:42:37.000000000 +0200
++++ tools/libs/call/private.h	2017-03-28 10:43:04.000000000 +0200
+@@ -11,8 +11,10 @@
+ #ifndef PAGE_SHIFT /* Mini-os, Yukk */
+ #define PAGE_SHIFT           12
+ #endif
+-#ifndef __MINIOS__ /* Yukk */
++#ifndef PAGE_SIZE
+ #define PAGE_SIZE            (1UL << PAGE_SHIFT)
++#endif
++#ifndef PAGE_MASK
+ #define PAGE_MASK            (~(PAGE_SIZE-1))
+ #endif
+ 
diff --git a/xentools48/patches/patch-tools_libs_evtchn_netbsd.c b/xentools48/patches/patch-tools_libs_evtchn_netbsd.c
new file mode 100644
index 0000000000..437824ab05
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_evtchn_netbsd.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-tools_libs_evtchn_netbsd.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/evtchn/netbsd.c.orig	2017-03-24 18:23:27.000000000 +0100
++++ tools/libs/evtchn/netbsd.c	2017-03-24 18:23:40.000000000 +0100
+@@ -124,7 +124,7 @@
+     int fd = xce->fd;
+     evtchn_port_t port;
+ 
+-    if ( read_exact(fd, (char *)&port, sizeof(port)) == -1 )
++    if ( read(fd, (char *)&port, sizeof(port)) == -1 )
+         return -1;
+ 
+     return port;
+@@ -133,7 +133,7 @@
+ int xenevtchn_unmask(xenevtchn_handle *xce, evtchn_port_t port)
+ {
+     int fd = xce->fd;
+-    return write_exact(fd, (char *)&port, sizeof(port));
++    return write(fd, (char *)&port, sizeof(port));
+ }
+ 
+ /*
diff --git a/xentools48/patches/patch-tools_libs_foreignmemory_compat.c b/xentools48/patches/patch-tools_libs_foreignmemory_compat.c
new file mode 100644
index 0000000000..e0a7330e2f
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_foreignmemory_compat.c
@@ -0,0 +1,14 @@
+$NetBSD: patch-tools_libs_foreignmemory_compat.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/foreignmemory/compat.c.orig	2017-03-24 18:42:26.000000000 +0100
++++ tools/libs/foreignmemory/compat.c	2017-03-24 18:41:44.000000000 +0100
+@@ -20,6 +20,9 @@
+ #endif
+ 
+ #include "private.h"
++#include <stdlib.h>
++#include <errno.h>
++#include <string.h>
+ 
+ void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem,
+                                  uint32_t dom, int prot, size_t num,
diff --git a/xentools48/patches/patch-tools_libs_foreignmemory_netbsd.c b/xentools48/patches/patch-tools_libs_foreignmemory_netbsd.c
new file mode 100644
index 0000000000..bb4efab264
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_foreignmemory_netbsd.c
@@ -0,0 +1,48 @@
+$NetBSD: patch-tools_libs_foreignmemory_netbsd.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/foreignmemory/netbsd.c.orig	2017-03-24 18:51:51.000000000 +0100
++++ tools/libs/foreignmemory/netbsd.c	2017-03-24 18:55:36.000000000 +0100
+@@ -19,7 +19,9 @@
+ 
+ #include <unistd.h>
+ #include <fcntl.h>
++#include <errno.h>
+ #include <sys/mman.h>
++#include <sys/ioctl.h>
+ 
+ #include "private.h"
+ 
+@@ -66,13 +68,13 @@
+     return close(fd);
+ }
+ 
+-void *osdep_map_foreign_batch(xenforeignmem_handle *fmem, uint32_t dom,
++void *osdep_map_foreign_batch(xenforeignmemory_handle *fmem, uint32_t dom,
+                               int prot, xen_pfn_t *arr, int num)
+ {
+     int fd = fmem->fd;
+     privcmd_mmapbatch_t ioctlx;
+     void *addr;
+-    addr = mmap(NULL, num*XC_PAGE_SIZE, prot, MAP_ANON | MAP_SHARED, -1, 0);
++    addr = mmap(NULL, num*PAGE_SIZE, prot, MAP_ANON | MAP_SHARED, -1, 0);
+     if ( addr == MAP_FAILED ) {
+         PERROR("osdep_map_foreign_batch: mmap failed");
+         return NULL;
+@@ -86,7 +88,7 @@
+     {
+         int saved_errno = errno;
+         PERROR("osdep_map_foreign_batch: ioctl failed");
+-        (void)munmap(addr, num*XC_PAGE_SIZE);
++        (void)munmap(addr, num*PAGE_SIZE);
+         errno = saved_errno;
+         return NULL;
+     }
+@@ -97,7 +99,7 @@
+ int osdep_xenforeignmemory_unmap(xenforeignmemory_handle *fmem,
+                                  void *addr, size_t num)
+ {
+-    return munmap(addr, num*XC_PAGE_SIZE);
++    return munmap(addr, num*PAGE_SIZE);
+ }
+ 
+ /*
diff --git a/xentools48/patches/patch-tools_libs_foreignmemory_private.h b/xentools48/patches/patch-tools_libs_foreignmemory_private.h
new file mode 100644
index 0000000000..ba14f36790
--- /dev/null
+++ b/xentools48/patches/patch-tools_libs_foreignmemory_private.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_libs_foreignmemory_private.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libs/foreignmemory/private.h.orig	2017-03-24 18:38:28.000000000 +0100
++++ tools/libs/foreignmemory/private.h	2017-03-24 18:52:19.000000000 +0100
+@@ -34,7 +34,7 @@
+ 
+ #if defined(__NetBSD__) || defined(__sun__)
+ /* Strictly compat for those two only only */
+-void *compat_mapforeign_batch(xenforeignmem_handle *fmem, uint32_t dom,
++void *osdep_map_foreign_batch(xenforeignmemory_handle *fmem, uint32_t dom,
+                               int prot, xen_pfn_t *arr, int num);
+ #endif
+ 
diff --git a/xentools48/patches/patch-tools_libxl_Makefile b/xentools48/patches/patch-tools_libxl_Makefile
new file mode 100644
index 0000000000..9ab571f684
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_Makefile
@@ -0,0 +1,22 @@
+$NetBSD: patch-tools_libxl_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libxl/Makefile.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/libxl/Makefile	2017-03-24 18:00:08.000000000 +0100
+@@ -306,7 +306,7 @@
+ 	$(INSTALL_DIR) $(DESTDIR)$(sbindir)
+ 	$(INSTALL_DIR) $(DESTDIR)$(libdir)
+ 	$(INSTALL_DIR) $(DESTDIR)$(includedir)
+-	$(INSTALL_DIR) $(DESTDIR)$(BASH_COMPLETION_DIR)
++	$(INSTALL_DIR) $(DESTDIR)$(XEN_EXAMPLES_DIR)
+ 	$(INSTALL_DIR) $(DESTDIR)$(LIBEXEC_BIN)
+ 	$(INSTALL_DIR) $(DESTDIR)$(PKG_INSTALLDIR)
+ 	$(INSTALL_PROG) xl $(DESTDIR)$(sbindir)
+@@ -320,7 +320,7 @@
+ 	$(SYMLINK_SHLIB) libxlutil.so.$(XLUMAJOR) $(DESTDIR)$(libdir)/libxlutil.so
+ 	$(INSTALL_DATA) libxlutil.a $(DESTDIR)$(libdir)
+ 	$(INSTALL_DATA) libxl.h libxl_event.h libxl_json.h _libxl_types.h _libxl_types_json.h _libxl_list.h libxl_utils.h libxl_uuid.h libxlutil.h $(DESTDIR)$(includedir)
+-	$(INSTALL_DATA) bash-completion $(DESTDIR)$(BASH_COMPLETION_DIR)/xl.sh
++	$(INSTALL_DATA) bash-completion $(DESTDIR)$(XEN_EXAMPLES_DIR)/xl.sh
+ 	$(INSTALL_DATA) xenlight.pc $(DESTDIR)$(PKG_INSTALLDIR)
+ 	$(INSTALL_DATA) xlutil.pc $(DESTDIR)$(PKG_INSTALLDIR)
+ 
diff --git a/xentools48/patches/patch-tools_libxl_libxl__create.c b/xentools48/patches/patch-tools_libxl_libxl__create.c
new file mode 100644
index 0000000000..a5175dfbde
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_libxl__create.c
@@ -0,0 +1,40 @@
+$NetBSD: patch-tools_libxl_libxl__create.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libxl/libxl_create.c.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/libxl/libxl_create.c	2017-03-24 18:03:19.000000000 +0100
+@@ -451,7 +451,7 @@
+         vments[2] = "image/ostype";
+         vments[3] = "hvm";
+         vments[4] = "start_time";
+-        vments[5] = GCSPRINTF("%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
++        vments[5] = GCSPRINTF("%jd.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
+ 
+         localents = libxl__calloc(gc, 9, sizeof(char *));
+         i = 0;
+@@ -488,7 +488,7 @@
+         vments[i++] = "image/kernel";
+         vments[i++] = (char *) state->pv_kernel.path;
+         vments[i++] = "start_time";
+-        vments[i++] = GCSPRINTF("%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
++        vments[i++] = GCSPRINTF("%jd.%02d", (intmax_t)start_time.tv_sec,(int)start_time.tv_usec/10000);
+         if (state->pv_ramdisk.path) {
+             vments[i++] = "image/ramdisk";
+             vments[i++] = (char *) state->pv_ramdisk.path;
+@@ -1161,7 +1161,7 @@
+         vments[2] = "image/ostype";
+         vments[3] = "hvm";
+         vments[4] = "start_time";
+-        vments[5] = GCSPRINTF("%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
++        vments[5] = GCSPRINTF("%jd.%02d", (intmax_t)start_time.tv_sec,(int)start_time.tv_usec/10000);
+         break;
+     case LIBXL_DOMAIN_TYPE_PV:
+         vments = libxl__calloc(gc, 11, sizeof(char *));
+@@ -1171,7 +1171,7 @@
+         vments[i++] = "image/kernel";
+         vments[i++] = (char *) state->pv_kernel.path;
+         vments[i++] = "start_time";
+-        vments[i++] = GCSPRINTF("%lu.%02d", start_time.tv_sec,(int)start_time.tv_usec/10000);
++        vments[i++] = GCSPRINTF("%jd.%02d", (intmax_t)start_time.tv_sec,(int)start_time.tv_usec/10000);
+         if (state->pv_ramdisk.path) {
+             vments[i++] = "image/ramdisk";
+             vments[i++] = (char *) state->pv_ramdisk.path;
diff --git a/xentools48/patches/patch-tools_libxl_libxl_dom.c b/xentools48/patches/patch-tools_libxl_libxl_dom.c
new file mode 100644
index 0000000000..29de570b2b
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_libxl_dom.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_libxl_libxl_dom.c,v 1.1 2018/03/13 15:15:01 bouyer Exp $
+
+--- tools/libxl/libxl_dom.c.orig
++++ tools/libxl/libxl_dom.c
+@@ -1361,7 +1361,7 @@ const char *libxl__userdata_path(libxl__gc *gc, uint32_t domid,
+         goto out;
+     }
+     uuid_string = GCSPRINTF(LIBXL_UUID_FMT, LIBXL_UUID_BYTES(info.uuid));
+-    path = GCSPRINTF(XEN_LIB_DIR "/userdata-%s.%u.%s.%s",
++    path = GCSPRINTF(XEN_RUN_DIR "/userdata-%s.%u.%s.%s",
+                      wh, domid, uuid_string, userdata_userid);
+ 
+  out:
diff --git a/xentools48/patches/patch-tools_libxl_libxl_event.c b/xentools48/patches/patch-tools_libxl_libxl_event.c
new file mode 100644
index 0000000000..73cfe79b23
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_libxl_event.c
@@ -0,0 +1,24 @@
+$NetBSD: patch-tools_libxl_libxl_event.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+The SIGCHLD handler just writes to a pipe where the reader is the
+same process. The idea is that this will cause poll(2) in the main
+thread to exit with the reaper pipe readable, and do child cleanup here.
+
+Unfortunably, is the child also has a write pipe back to the
+parent (as e.g. with pygrub), the loop in afterpoll_internal() may see the
+POLLHUP event on this pipe before the POLLIN even on the reaper pipe, and
+this will be considered as an error (from e.g. pygrub).
+
+work around by filtering POLLHUP events here
+
+--- tools/libxl/libxl_event.c.orig	2016-12-20 16:01:30.000000000 +0100
++++ tools/libxl/libxl_event.c	2016-12-20 17:28:52.000000000 +0100
+@@ -1261,7 +1261,7 @@
+ 
+             revents = afterpoll_check_fd(poller,fds,nfds,
+                                          efd->fd,efd->events);
+-            if (revents)
++            if (revents & ~POLLHUP)
+                 goto found_fd_event;
+         }
+         /* no ordinary fd events, then */
diff --git a/xentools48/patches/patch-tools_libxl_libxl_internal.h b/xentools48/patches/patch-tools_libxl_libxl_internal.h
new file mode 100644
index 0000000000..88ea23e5d5
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_libxl_internal.h
@@ -0,0 +1,23 @@
+$NetBSD: patch-tools_libxl_libxl_internal.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+bump some timeouts to more reasonable values. 40s is not enough
+if there is lots of them (e.g lots of network interfaces) and they
+need to be serialized.
+
+--- tools/libxl/libxl_internal.h.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/libxl/libxl_internal.h	2017-03-24 18:07:05.000000000 +0100
+@@ -88,11 +88,11 @@
+ #include "_libxl_types_internal_json.h"
+ 
+ #define LIBXL_INIT_TIMEOUT 10
+-#define LIBXL_DESTROY_TIMEOUT 10
+-#define LIBXL_HOTPLUG_TIMEOUT 40
++#define LIBXL_DESTROY_TIMEOUT 120
++#define LIBXL_HOTPLUG_TIMEOUT 120
+ /* QEMU may be slow to load and start due to a bug in Linux where the I/O
+  * subsystem sometime produce high latency under load. */
+-#define LIBXL_DEVICE_MODEL_START_TIMEOUT 60
++#define LIBXL_DEVICE_MODEL_START_TIMEOUT 120
+ #define LIBXL_DEVICE_MODEL_SAVE_FILE XEN_LIB_DIR "/qemu-save" /* .$domid */
+ #define LIBXL_DEVICE_MODEL_RESTORE_FILE XEN_LIB_DIR "/qemu-resume" /* .$domid */
+ #define LIBXL_STUBDOM_START_TIMEOUT 30
diff --git a/xentools48/patches/patch-tools_libxl_libxl_uuid.c b/xentools48/patches/patch-tools_libxl_libxl_uuid.c
new file mode 100644
index 0000000000..83e7059481
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_libxl_uuid.c
@@ -0,0 +1,22 @@
+$NetBSD: patch-tools_libxl_libxl_uuid.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libxl/libxl_uuid.c.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/libxl/libxl_uuid.c	2017-03-24 18:15:58.000000000 +0100
+@@ -82,7 +82,7 @@
+     uuid_enc_be(uuid->uuid, &nat_uuid);
+ }
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
+ {
+     uint32_t status;
+@@ -120,7 +120,7 @@
+     memset(&uuid->uuid, 0, sizeof(uuid->uuid));
+ }
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ int libxl_uuid_compare(const libxl_uuid *uuid1, const libxl_uuid *uuid2)
+ {
+     uuid_t nat_uuid1, nat_uuid2;
diff --git a/xentools48/patches/patch-tools_libxl_xl__cmdtable.c b/xentools48/patches/patch-tools_libxl_xl__cmdtable.c
new file mode 100644
index 0000000000..a678178351
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_xl__cmdtable.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_libxl_xl__cmdtable.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/libxl/xl_cmdtable.c.orig	2015-11-03 09:11:18.000000000 +0000
++++ tools/libxl/xl_cmdtable.c
+@@ -507,7 +507,7 @@ struct cmd_spec cmd_table[] = {
+       "-e                      Do not wait in the background (on <host>) for the death\n"
+       "                        of the domain.\n"
+       "-N <netbufscript>       Use netbufscript to setup network buffering instead of the\n"
+-      "                        default script (/etc/xen/scripts/remus-netbuf-setup).\n"
++      "                        default script (@XENDCONFDIR@/scripts/remus-netbuf-setup).\n"
+       "-F                      Enable unsafe configurations [-b|-n|-d flags]. Use this option\n"
+       "                        with caution as failover may not work as intended.\n"
+       "-b                      Replicate memory checkpoints to /dev/null (blackhole).\n"
diff --git a/xentools48/patches/patch-tools_libxl_xl_cmdimpl.c b/xentools48/patches/patch-tools_libxl_xl_cmdimpl.c
new file mode 100644
index 0000000000..cd202b956f
--- /dev/null
+++ b/xentools48/patches/patch-tools_libxl_xl_cmdimpl.c
@@ -0,0 +1,49 @@
+$NetBSD: patch-tools_libxl_xl_cmdimpl.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+avoid shadowing a global on netbsd-6.
+
+--- tools/libxl/xl_cmdimpl.c.orig	2017-03-21 23:27:46.000000000 +0100
++++ tools/libxl/xl_cmdimpl.c	2017-03-21 23:28:17.000000000 +0100
+@@ -473,7 +473,7 @@
+     flush_stream(fh);
+ }
+ 
+-static int do_daemonize(char *name, const char *pidfile)
++static int do_daemonize(char *name, const char *l_pidfile)
+ {
+     char *fullname;
+     pid_t child1;
+@@ -505,8 +505,8 @@
+ 
+     CHK_SYSCALL(daemon(0, 1));
+ 
+-    if (pidfile) {
+-        int fd = open(pidfile, O_RDWR | O_CREAT, S_IRUSR|S_IWUSR);
++    if (l_pidfile) {
++        int fd = open(l_pidfile, O_RDWR | O_CREAT, S_IRUSR|S_IWUSR);
+         char *pid = NULL;
+ 
+         if (fd == -1) {
+@@ -8076,7 +8076,7 @@
+ int main_devd(int argc, char **argv)
+ {
+     int ret = 0, opt = 0, daemonize = 1;
+-    const char *pidfile = NULL;
++    const char *l_pidfile = NULL;
+     static const struct option opts[] = {
+         {"pidfile", 1, 0, 'p'},
+         COMMON_LONG_OPTS,
+@@ -8088,12 +8088,12 @@
+         daemonize = 0;
+         break;
+     case 'p':
+-        pidfile = optarg;
++        l_pidfile = optarg;
+         break;
+     }
+ 
+     if (daemonize) {
+-        ret = do_daemonize("xldevd", pidfile);
++        ret = do_daemonize("xldevd", l_pidfile);
+         if (ret) {
+             ret = (ret == 1) ? 0 : ret;
+             goto out;
diff --git a/xentools48/patches/patch-tools_misc_xenlockprof.c b/xentools48/patches/patch-tools_misc_xenlockprof.c
new file mode 100644
index 0000000000..846f4a2ebf
--- /dev/null
+++ b/xentools48/patches/patch-tools_misc_xenlockprof.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+char bufer too small
+
+--- tools/misc/xenlockprof.c.orig	2020-01-01 19:43:06.189653207 +0900
++++ tools/misc/xenlockprof.c	2020-01-01 19:37:55.053480360 +0900
+@@ -24,7 +24,7 @@
+     uint32_t           i, j, n;
+     uint64_t           time;
+     double             l, b, sl, sb;
+-    char               name[60];
++    char               name[128];
+     DECLARE_HYPERCALL_BUFFER(xc_lockprof_data_t, data);
+ 
+     if ( (argc > 2) || ((argc == 2) && (strcmp(argv[1], "-r") != 0)) )
diff --git a/xentools48/patches/patch-tools_ocaml_common.make b/xentools48/patches/patch-tools_ocaml_common.make
new file mode 100644
index 0000000000..77899eba37
--- /dev/null
+++ b/xentools48/patches/patch-tools_ocaml_common.make
@@ -0,0 +1,31 @@
+$NetBSD: patch-tools_ocaml_common.make,v 1.4 2018/01/27 17:37:51 abs Exp $
+
+Handle ocaml-findlib 1.7.3 already appending destdir
+Add -unsafe-string to fix build with ocaml-4.06.0 and later
+
+--- tools/ocaml/common.make.orig	2018-01-23 13:49:58.000000000 +0000
++++ tools/ocaml/common.make
+@@ -3,7 +3,7 @@ include $(XEN_ROOT)/tools/Rules.mk
+ CC ?= gcc
+ OCAMLOPT ?= ocamlopt
+ OCAMLC ?= ocamlc
+-OCAMLMKLIB ?= ocamlmklib
++OCAMLMKLIB ?= ocamlmklib -elfmode
+ OCAMLDEP ?= ocamldep
+ OCAMLLEX ?= ocamllex
+ OCAMLYACC ?= ocamlyacc
+@@ -12,11 +12,11 @@ OCAMLFIND ?= ocamlfind
+ CFLAGS += -fPIC -Werror -I$(shell ocamlc -where)
+ 
+ OCAMLOPTFLAG_G := $(shell $(OCAMLOPT) -h 2>&1 | sed -n 's/^  *\(-g\) .*/\1/p')
+-OCAMLOPTFLAGS = $(OCAMLOPTFLAG_G) -ccopt "$(LDFLAGS)" -dtypes $(OCAMLINCLUDE) -cc $(CC) -w F -warn-error F
+-OCAMLCFLAGS += -g $(OCAMLINCLUDE) -w F -warn-error F
++OCAMLOPTFLAGS = $(OCAMLOPTFLAG_G) -unsafe-string -ccopt "$(LDFLAGS)" -dtypes $(OCAMLINCLUDE) -cc $(CC) -w F -warn-error F
++OCAMLCFLAGS += -unsafe-string -g $(OCAMLINCLUDE) -w F -warn-error F
+ 
+ VERSION := 4.1
+ 
+-OCAMLDESTDIR ?= $(DESTDIR)$(shell $(OCAMLFIND) printconf destdir)
++OCAMLDESTDIR ?= $(shell $(OCAMLFIND) printconf destdir)
+ 
+ o= >$@.new && mv -f $@.new $@
diff --git a/xentools48/patches/patch-tools_ocaml_libs_xc_xenctl_stubs.c b/xentools48/patches/patch-tools_ocaml_libs_xc_xenctl_stubs.c
new file mode 100644
index 0000000000..70c800af80
--- /dev/null
+++ b/xentools48/patches/patch-tools_ocaml_libs_xc_xenctl_stubs.c
@@ -0,0 +1,15 @@
+$NetBSD$
+
+char buffer too small
+
+--- tools/ocaml/libs/xc/xenctrl_stubs.c.orig	2018-12-03 18:03:57.000000000 +0900
++++ tools/ocaml/libs/xc/xenctrl_stubs.c	2020-01-01 20:11:19.784021537 +0900
+@@ -54,7 +54,7 @@
+ 
+ static void Noreturn failwith_xc(xc_interface *xch)
+ {
+-	char error_str[256];
++	char error_str[1192];
+ 	if (xch) {
+ 		const xc_error *error = xc_get_last_error(xch);
+ 		if (error->code == XC_ERROR_NONE)
diff --git a/xentools48/patches/patch-tools_ocaml_xenstored_Makefile b/xentools48/patches/patch-tools_ocaml_xenstored_Makefile
new file mode 100644
index 0000000000..a8621a8a9e
--- /dev/null
+++ b/xentools48/patches/patch-tools_ocaml_xenstored_Makefile
@@ -0,0 +1,12 @@
+$NetBSD: patch-tools_ocaml_xenstored_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/ocaml/xenstored/Makefile.orig	2016-02-09 14:44:19.000000000 +0000
++++ tools/ocaml/xenstored/Makefile
+@@ -1,6 +1,7 @@
+ XEN_ROOT = $(CURDIR)/../../..
+ OCAML_TOPLEVEL = $(CURDIR)/..
+ include $(OCAML_TOPLEVEL)/common.make
++XEN_CONFIG_DIR=${XEN_EXAMPLES_DIR}
+ 
+ # Include configure output (config.h)
+ CFLAGS += -include $(XEN_ROOT)/tools/config.h
diff --git a/xentools48/patches/patch-tools_ocaml_xenstored_define.ml b/xentools48/patches/patch-tools_ocaml_xenstored_define.ml
new file mode 100644
index 0000000000..442193e534
--- /dev/null
+++ b/xentools48/patches/patch-tools_ocaml_xenstored_define.ml
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_ocaml_xenstored_define.ml,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/ocaml/xenstored/define.ml.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/ocaml/xenstored/define.ml	2017-03-24 17:29:24.000000000 +0100
+@@ -17,7 +17,7 @@
+ let xenstored_major = 1
+ let xenstored_minor = 0
+ 
+-let xenstored_proc_kva = "/proc/xen/xsd_kva"
++let xenstored_proc_kva = "@PROCDEV@/xen/xsd_kva"
+ let xenstored_proc_port = "/proc/xen/xsd_port"
+ 
+ let xs_daemon_socket = Paths.xen_run_stored ^ "/socket"
diff --git a/xentools48/patches/patch-tools_ocaml_xenstored_utils.ml b/xentools48/patches/patch-tools_ocaml_xenstored_utils.ml
new file mode 100644
index 0000000000..4cf25679f6
--- /dev/null
+++ b/xentools48/patches/patch-tools_ocaml_xenstored_utils.ml
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_ocaml_xenstored_utils.ml,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/ocaml/xenstored/utils.ml.orig	2016-12-05 13:03:27.000000000 +0100
++++ tools/ocaml/xenstored/utils.ml	2017-03-24 17:31:22.000000000 +0100
+@@ -87,7 +87,7 @@
+ 	let buf = String.make 20 (char_of_int 0) in
+ 	let sz = Unix.read fd buf 0 20 in
+ 	Unix.close fd;
+-	int_of_string (String.sub buf 0 sz)
++	int_of_string (String.trim (String.sub buf 0 sz))
+ 
+ let path_complete path connection_path =
+ 	if String.get path 0 <> '/' then
diff --git a/xentools48/patches/patch-tools_pygrub_Makefile b/xentools48/patches/patch-tools_pygrub_Makefile
new file mode 100644
index 0000000000..aba0c96230
--- /dev/null
+++ b/xentools48/patches/patch-tools_pygrub_Makefile
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_pygrub_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/pygrub/Makefile.orig	2016-02-09 14:44:19.000000000 +0000
++++ tools/pygrub/Makefile
+@@ -17,7 +17,7 @@ install: all
+ 		--install-scripts=$(LIBEXEC_BIN) --force
+ 	set -e; if [ $(bindir) != $(LIBEXEC_BIN) -a \
+ 	             "`readlink -f $(DESTDIR)/$(bindir)`" != \
+-	             "`readlink -f $(LIBEXEC_BIN)`" ]; then \
++	             "`readlink -f $(DESTDIR)/$(LIBEXEC_BIN)`" ]; then \
+ 	    ln -sf $(LIBEXEC_BIN)/pygrub $(DESTDIR)/$(bindir); \
+ 	fi
+ 
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_Makefile b/xentools48/patches/patch-tools_qemu-xen-traditional_Makefile
new file mode 100644
index 0000000000..3a8b43f859
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_Makefile
@@ -0,0 +1,84 @@
+$NetBSD: patch-tools_qemu-xen-traditional_Makefile,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/Makefile.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/Makefile	2015-01-19 14:16:12.000000000 +0100
+@@ -1,7 +1,7 @@
+ # Makefile for QEMU.
+ 
+-include config-host.mak
+-include $(SRC_PATH)/rules.mak
++-include config-host.mak
++-include $(SRC_PATH)/rules.mak
+ 
+ .PHONY: all clean cscope distclean dvi html info install install-doc \
+ 	recurse-all speed tar tarbin test
+@@ -231,30 +231,30 @@
+ endif
+ 
+ install-doc: $(DOCS)
+-	mkdir -p "$(DESTDIR)$(docdir)"
+-	$(INSTALL) -m 644 qemu-doc.html  qemu-tech.html "$(DESTDIR)$(docdir)"
++	$(INSTALL_DIR) "$(DESTDIR)$(docdir)"
++	$(INSTALL_DATA) qemu-doc.html  qemu-tech.html "$(DESTDIR)$(docdir)"
+ ifndef CONFIG_WIN32
+-	mkdir -p "$(DESTDIR)$(mandir)/man1"
+-	$(INSTALL) -m 644 qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1"
+-	mkdir -p "$(DESTDIR)$(mandir)/man8"
+-	$(INSTALL) -m 644 qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
++	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
++	$(INSTALL_DATA) qemu.1 qemu-img.1 "$(DESTDIR)$(mandir)/man1"
++	$(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
++	$(INSTALL_DATA) qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
+ endif
+ 
+ install: all $(if $(BUILD_DOCS),install-doc)
+-	mkdir -p "$(DESTDIR)$(bindir)"
++	$(INSTALL_DIR) "$(DESTDIR)$(bindir)"
+ ifneq ($(TOOLS),)
+ 	$(INSTALL_PROG) $(STRIP_OPT) $(TOOLS) "$(DESTDIR)$(bindir)"
+ endif
+ ifneq ($(BLOBS),)
+-	mkdir -p "$(DESTDIR)$(datadir)"
++	$(INSTALL_DIR) "$(DESTDIR)$(datadir)"
+ 	set -e; for x in $(BLOBS); do \
+-		$(INSTALL) -m 644 $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \
++		$(INSTALL_DATA) $(SRC_PATH)/pc-bios/$$x "$(DESTDIR)$(datadir)"; \
+ 	done
+ endif
+ ifndef CONFIG_WIN32
+-	mkdir -p "$(DESTDIR)$(datadir)/keymaps"
++	$(INSTALL_DIR) "$(DESTDIR)$(datadir)/keymaps"
+ 	set -e; for x in $(KEYMAPS); do \
+-		$(INSTALL) -m 644 $(SRC_PATH)/keymaps/$$x "$(DESTDIR)$(datadir)/keymaps"; \
++		$(INSTALL_DATA) $(SRC_PATH)/keymaps/$$x "$(DESTDIR)$(datadir)/keymaps"; \
+ 	done
+ endif
+ 	for d in $(TARGET_DIRS); do \
+@@ -275,7 +275,7 @@
+ 
+ # documentation
+ %.html: %.texi
+-	texi2html -monolithic -number $<
++	texi2html -monolithic -number-sections $<
+ 
+ %.info: %.texi
+ 	makeinfo $< -o $@
+@@ -284,15 +284,15 @@
+ 	texi2dvi $<
+ 
+ qemu.1: qemu-doc.texi
+-	$(SRC_PATH)/texi2pod.pl $< qemu.pod
++	perl $(SRC_PATH)/texi2pod.pl $< qemu.pod
+ 	pod2man --section=1 --center=" " --release=" " qemu.pod > $@
+ 
+ qemu-img.1: qemu-img.texi
+-	$(SRC_PATH)/texi2pod.pl $< qemu-img.pod
++	perl $(SRC_PATH)/texi2pod.pl $< qemu-img.pod
+ 	pod2man --section=1 --center=" " --release=" " qemu-img.pod > $@
+ 
+ qemu-nbd.8: qemu-nbd.texi
+-	$(SRC_PATH)/texi2pod.pl $< qemu-nbd.pod
++	perl $(SRC_PATH)/texi2pod.pl $< qemu-nbd.pod
+ 	pod2man --section=8 --center=" " --release=" " qemu-nbd.pod > $@
+ 
+ info: qemu-doc.info qemu-tech.info
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_block-raw-posix.c b/xentools48/patches/patch-tools_qemu-xen-traditional_block-raw-posix.c
new file mode 100644
index 0000000000..ea98fe6d6f
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_block-raw-posix.c
@@ -0,0 +1,62 @@
+$NetBSD: patch-tools_qemu-xen-traditional_block-raw-posix.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+- if given a block device, use the character device instead.
+
+--- tools/qemu-xen-traditional/block-raw-posix.c.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/block-raw-posix.c	2015-01-19 13:16:38.000000000 +0100
+@@ -65,6 +65,7 @@
+ #include <sys/disklabel.h>
+ #include <sys/dkio.h>
+ #include <sys/disk.h>
++#include <sys/param.h>
+ #endif
+ 
+ #ifdef __OpenBSD__
+@@ -72,6 +73,13 @@
+ #include <sys/disklabel.h>
+ #include <sys/dkio.h>
+ #endif
++#if defined(__NetBSD__)
++#include <sys/ioctl.h>
++#include <sys/disklabel.h>
++#include <sys/dkio.h>
++#define SLIST_ENTRY(x) int /*XXXX !*/
++#include <sys/disk.h>
++#endif
+ 
+ //#define DEBUG_FLOPPY
+ 
+@@ -1008,6 +1016,33 @@
+ {
+     BDRVRawState *s = bs->opaque;
+     int fd, open_flags, ret;
++#ifdef __NetBSD__
++    struct stat sb;
++    static char namebuf[MAXPATHLEN];
++    const char *dp;
++
++    if (lstat(filename, &sb) < 0) {
++	fprintf(stderr, "%s: stat failed: %s\n", filename, strerror(errno));
++	return -errno;
++    }
++    if (S_ISLNK(sb.st_mode)) {
++	fprintf(stderr, "%s: symolink links not supported by qemu-dm\n",
++	    filename);
++	return -EINVAL;
++    }
++    if (S_ISBLK(sb.st_mode)) {
++	dp = strrchr(filename, '/');
++	if (dp == NULL) {
++		snprintf(namebuf, MAXPATHLEN, "r%s", filename);
++	} else {
++		snprintf(namebuf, MAXPATHLEN, "%.*s/r%s",
++		    (int)(dp - filename), filename, dp + 1);
++	}
++	fprintf(stderr, "%s is a block device", filename);
++	filename = namebuf;
++	fprintf(stderr, ", using %s\n", filename);
++    }
++#endif
+ 
+     posix_aio_init();
+ 
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_configure b/xentools48/patches/patch-tools_qemu-xen-traditional_configure
new file mode 100644
index 0000000000..ec68e611a7
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_configure
@@ -0,0 +1,41 @@
+$NetBSD: patch-tools_qemu-xen-traditional_configure,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/configure.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/configure	2015-01-20 22:58:07.000000000 +0100
+@@ -1089,7 +1089,7 @@
+ # Check if tools are available to build documentation.
+ if [ -x "`which texi2html 2>/dev/null`" ] && \
+    [ -x "`which pod2man 2>/dev/null`" ]; then
+-  build_docs="yes"
++#  build_docs="yes"
+ fi
+ 
+ ##########################################
+@@ -1124,7 +1124,7 @@
+   if test -z "$prefix" ; then
+       prefix="/usr/local"
+   fi
+-  mansuffix="/share/man"
++  mansuffix="/man"
+   datasuffix="/share/qemu"
+   docsuffix="/share/doc/qemu"
+   binsuffix="/bin"
+@@ -1216,6 +1216,8 @@
+ echo "MAKE=$make" >> $config_mak
+ echo "INSTALL=$install" >> $config_mak
+ echo "INSTALL_PROG=$install -m 0755" >> $config_mak
++echo "INSTALL_DATA=$install -m0644" >> $config_mak
++echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_mak
+ echo "CC=$cc" >> $config_mak
+ echo "HOST_CC=$host_cc" >> $config_mak
+ echo "AR=$ar" >> $config_mak
+@@ -1493,7 +1495,9 @@
+ # XXX: suppress that
+ if [ "$bsd" = "yes" ] ; then
+   echo "#define O_LARGEFILE 0" >> $config_h
++  echo "#ifndef MAP_ANONYMOUS" >> $config_h
+   echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
++  echo "#endif" >> $config_h
+   echo "#define _BSD 1" >> $config_h
+ fi
+ 
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_e1000.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_e1000.c
new file mode 100644
index 0000000000..4adb5ccfb1
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_e1000.c
@@ -0,0 +1,34 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_e1000.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+From sysutils/xentools33/patches/patch-ak.
+
+qemu-0.13.x will include this fix:
+http://git.qemu.org/qemu.git/commit/?id=9651ac55e5de0e1534d898316cc851af6ffc4334
+
+--- tools/qemu-xen-traditional/hw/e1000.c.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/e1000.c	2015-01-19 13:16:38.000000000 +0100
+@@ -265,16 +265,20 @@
+ 
+     s->eecd_state.old_eecd = val & (E1000_EECD_SK | E1000_EECD_CS |
+             E1000_EECD_DI|E1000_EECD_FWE_MASK|E1000_EECD_REQ);
++    if (!(E1000_EECD_CS & val))                        // CS inactive; nothing to do
++       return;
++    if (E1000_EECD_CS & (val ^ oldval)) {      // CS rise edge; reset state
++       s->eecd_state.val_in = 0;
++       s->eecd_state.bitnum_in = 0;
++       s->eecd_state.bitnum_out = 0;
++       s->eecd_state.reading = 0;
++    }
+     if (!(E1000_EECD_SK & (val ^ oldval)))	// no clock edge
+         return;
+     if (!(E1000_EECD_SK & val)) {		// falling edge
+         s->eecd_state.bitnum_out++;
+         return;
+     }
+-    if (!(val & E1000_EECD_CS)) {		// rising, no CS (EEPROM reset)
+-        memset(&s->eecd_state, 0, sizeof s->eecd_state);
+-        return;
+-    }
+     s->eecd_state.val_in <<= 1;
+     if (val & E1000_EECD_DI)
+         s->eecd_state.val_in |= 1;
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_ide.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_ide.c
new file mode 100644
index 0000000000..e86fa26043
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_ide.c
@@ -0,0 +1,37 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_ide.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/ide.c.orig	2014-01-09 13:44:42.000000000 +0100
++++ tools/qemu-xen-traditional/hw/ide.c	2015-06-11 16:15:49.000000000 +0200
+@@ -757,10 +757,15 @@
+     put_le16(p + 58, oldsize >> 16);
+     if (s->mult_sectors)
+         put_le16(p + 59, 0x100 | s->mult_sectors);
+-    put_le16(p + 60, s->nb_sectors);
+-    put_le16(p + 61, s->nb_sectors >> 16);
++    if (s->nb_sectors > 0x10000000)
++	oldsize = 0x10000000; /* report only 128GB */
++    else
++	oldsize =  s->nb_sectors;
++    put_le16(p + 60, oldsize);
++    put_le16(p + 61, oldsize >> 16);
+     put_le16(p + 62, 0x07); /* single word dma0-2 supported */
+     put_le16(p + 63, 0x07); /* mdma0-2 supported */
++    put_le16(p + 64, 0x03); /* pio3-4 supported */
+     put_le16(p + 65, 120);
+     put_le16(p + 66, 120);
+     put_le16(p + 67, 120);
+@@ -812,13 +817,12 @@
+     put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */
+     put_le16(p + 62, 7);  /* single word dma0-2 supported */
+     put_le16(p + 63, 7);  /* mdma0-2 supported */
+-    put_le16(p + 64, 0x3f); /* PIO modes supported */
+ #else
+     put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
+     put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
+     put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
+-    put_le16(p + 64, 1); /* PIO modes */
+ #endif
++    put_le16(p + 64, 3); /* pio3-4 supported */
+     put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
+     put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
+     put_le16(p + 67, 0x12c); /* minimum PIO cycle time without flow control */
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.c
new file mode 100644
index 0000000000..a7f2bb8e55
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_pass-through.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/pass-through.c.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/pass-through.c	2015-01-19 13:16:38.000000000 +0100
+@@ -84,8 +84,6 @@
+  */
+ 
+ #include "pass-through.h"
+-#include "pci/header.h"
+-#include "pci/pci.h"
+ #include "pt-msi.h"
+ #include "qemu-xen.h"
+ #include "iomulti.h"
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.h b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.h
new file mode 100644
index 0000000000..e53a719e6e
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pass-through.h
@@ -0,0 +1,18 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_pass-through.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/pass-through.h.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/pass-through.h	2015-01-19 13:16:38.000000000 +0100
+@@ -20,8 +20,13 @@
+ 
+ #include "hw.h"
+ #include "pci.h"
++#ifdef __NetBSD__
++#include "pciutils/header.h"
++#include "pciutils/pci.h"
++#else
+ #include "pci/header.h"
+ #include "pci/pci.h"
++#endif
+ #include "exec-all.h"
+ #include "sys-queue.h"
+ #include "qemu-timer.h"
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_piix4acpi.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_piix4acpi.c
new file mode 100644
index 0000000000..83c7be3b3d
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_piix4acpi.c
@@ -0,0 +1,17 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_piix4acpi.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/piix4acpi.c.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/piix4acpi.c	2015-01-19 13:16:38.000000000 +0100
+@@ -41,8 +41,12 @@
+ #define PIIX4ACPI_LOG(level, fmt, ...) do { if (level <= PIIX4ACPI_LOGLEVEL) qemu_log(fmt, ## __VA_ARGS__); } while (0)
+ 
+ #ifdef CONFIG_PASSTHROUGH
++#ifdef __NetBSD__
++#include <pciutils/header.h>
++#else
+ #include <pci/header.h>
+ #endif
++#endif
+ 
+ /* PM1a_CNT bits, as defined in the ACPI specification. */
+ #define SCI_EN            (1 <<  0)
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-graphics.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-graphics.c
new file mode 100644
index 0000000000..7825c4930c
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-graphics.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_pt-graphics.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/pt-graphics.c.orig	2015-01-19 16:14:46.000000000 +0100
++++ tools/qemu-xen-traditional/hw/pt-graphics.c	2015-01-19 16:14:51.000000000 +0100
+@@ -4,8 +4,6 @@
+ 
+ #include "pass-through.h"
+ #include "pci.h"
+-#include "pci/header.h"
+-#include "pci/pci.h"
+ 
+ #include <unistd.h>
+ #include <sys/ioctl.h>
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.c b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.c
new file mode 100644
index 0000000000..e0449562d1
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_pt-msi.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/pt-msi.c.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/pt-msi.c	2015-01-19 13:16:38.000000000 +0100
+@@ -22,6 +22,10 @@
+ #include "pt-msi.h"
+ #include <sys/mman.h>
+ 
++#ifdef __NetBSD__
++#define MAP_LOCKED MAP_WIRED
++#endif
++
+ void msi_set_enable(struct pt_dev *dev, int en)
+ {
+     uint16_t val = 0;
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.h b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.h
new file mode 100644
index 0000000000..61416b29f0
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_hw_pt-msi.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-tools_qemu-xen-traditional_hw_pt-msi.h,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/hw/pt-msi.h.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/hw/pt-msi.h	2015-01-19 13:16:38.000000000 +0100
+@@ -1,7 +1,6 @@
+ #ifndef _PT_MSI_H
+ #define _PT_MSI_H
+ 
+-#include "pci/pci.h"
+ #include "pass-through.h"
+ 
+ #define  PCI_CAP_ID_MSI     0x05    /* Message Signalled Interrupts */
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak b/xentools48/patches/patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak
new file mode 100644
index 0000000000..1449e11c5f
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak
@@ -0,0 +1,12 @@
+$NetBSD: patch-tools_qemu-xen-traditional_i386-dm_hookstarget.mak,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen-traditional/i386-dm/hookstarget.mak.orig	2014-10-06 17:50:24.000000000 +0200
++++ tools/qemu-xen-traditional/i386-dm/hookstarget.mak	2015-01-19 13:16:38.000000000 +0100
+@@ -2,5 +2,5 @@
+ 
+ install-hook:
+ 	$(INSTALL_DIR) "$(DESTDIR)/$(bindir)"
+-	$(INSTALL_DIR) "$(DESTDIR)/$(configdir)"
+-	$(INSTALL_PROG) $(QEMU_ROOT)/i386-dm/qemu-ifup-$(IOEMU_OS) "$(DESTDIR)/$(configdir)/qemu-ifup"
++	$(INSTALL_DIR) "$(DESTDIR)/$(XEN_EXAMPLES_DIR)/scripts"
++	$(INSTALL_PROG) $(QEMU_ROOT)/i386-dm/qemu-ifup-$(IOEMU_OS) "$(DESTDIR)/$(XEN_EXAMPLES_DIR)/scripts/qemu-ifup"
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_net.c b/xentools48/patches/patch-tools_qemu-xen-traditional_net.c
new file mode 100644
index 0000000000..80bbc73e2d
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_net.c
@@ -0,0 +1,46 @@
+$NetBSD: patch-tools_qemu-xen-traditional_net.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+--- tools/qemu-xen-traditional/net.c.orig	2016-11-29 17:36:38.000000000 +0100
++++ tools/qemu-xen-traditional/net.c	2017-03-29 18:16:54.000000000 +0200
+@@ -990,6 +990,7 @@
+ #define DEFAULT_NETWORK_DOWN_SCRIPT ""
+ #endif
+ 
++#if !defined(CONFIG_STUBDOM)
+ static int launch_script(const char *setup_script, const char *ifname,
+                          const char *script_arg, int fd)
+ {
+@@ -1028,6 +1029,7 @@
+         }
+     return 0;
+ }
++#endif
+ 
+ static int net_tap_init(VLANState *vlan, const char *model,
+                         const char *name, const char *ifname1,
+@@ -1048,12 +1050,14 @@
+ 
+     if (!setup_script || !strcmp(setup_script, "no"))
+         setup_script = "";
++#if !defined(CONFIG_STUBDOM)
+     if (setup_script[0] != '\0') {
+ 	if (launch_script(setup_script, ifname, script_arg, fd)) {
+ 	    close(fd);
+ 	    return -1;
+ 	}
+     }
++#endif
+     s = net_tap_fd_init(vlan, model, name, fd);
+     if (!s)
+         return -1;
+@@ -1965,9 +1969,11 @@
+             if (vc->fd_read == tap_receive) {
+                 TAPState *s = vc->opaque;
+ 
++#ifndef CONFIG_STUBDOM
+                 if (s->down_script[0])
+                     launch_script(s->down_script, s->down_script_arg,
+ 				  s->script_arg, s->fd);
++#endif
+             }
+ #if defined(CONFIG_VDE)
+             if (vc->fd_read == vde_from_qemu) {
diff --git a/xentools48/patches/patch-tools_qemu-xen-traditional_xen-hooks.mak b/xentools48/patches/patch-tools_qemu-xen-traditional_xen-hooks.mak
new file mode 100644
index 0000000000..e60dde92a4
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen-traditional_xen-hooks.mak
@@ -0,0 +1,47 @@
+$NetBSD: patch-tools_qemu-xen-traditional_xen-hooks.mak,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+enable PCI passthrough when pciutils is present
+
+--- tools/qemu-xen-traditional/xen-hooks.mak.orig	2016-11-29 17:36:38.000000000 +0100
++++ tools/qemu-xen-traditional/xen-hooks.mak	2017-03-24 20:09:07.000000000 +0100
+@@ -25,9 +25,9 @@
+ LIBS += -L$(XEN_ROOT)/tools/libs/gnttab -lxengnttab
+ LIBS += -L$(XEN_ROOT)/tools/libxc -lxenctrl -lxenguest
+ LIBS += -L$(XEN_ROOT)/tools/xenstore -lxenstore
+-LIBS += -Wl,-rpath-link=$(XEN_ROOT)/tools/libs/toollog
+-LIBS += -Wl,-rpath-link=$(XEN_ROOT)/tools/libs/call
+-LIBS += -Wl,-rpath-link=$(XEN_ROOT)/tools/libs/foreignmemory
++LIBS += -Wl,-rpath-link,$(XEN_ROOT)/tools/libs/toollog
++LIBS += -Wl,-rpath-link,$(XEN_ROOT)/tools/libs/call
++LIBS += -Wl,-rpath-link,$(XEN_ROOT)/tools/libs/foreignmemory
+ 
+ LDFLAGS := $(CFLAGS) $(LDFLAGS)
+ 
+@@ -68,17 +68,25 @@
+ ifdef CONFIG_STUBDOM
+ CONFIG_PASSTHROUGH=1
+ else
+-  ifeq (,$(wildcard /usr/include/pci))
++  ifeq ($(CONFIG_NetBSD), y)
++CONFIG_PASSTHROUGH=1
++  else
++    ifeq (,$(wildcard /usr/include/pci))
+ $(warning === pciutils-dev package not found - missing /usr/include/pci)
+ $(warning === PCI passthrough capability has been disabled)
+-  else
++    else
+ CONFIG_PASSTHROUGH=1
++    endif
+   endif
+ endif
+ 
+ ifdef CONFIG_PASSTHROUGH
+ OBJS+= pass-through.o pt-msi.o pt-graphics.o
++ifeq ($(CONFIG_NetBSD), y)
++LIBS += -lpciutils -lpci
++else
+ LIBS += -lpci
++endif
+ CFLAGS += -DCONFIG_PASSTHROUGH 
+ $(info === PCI passthrough capability has been enabled ===)
+ endif
diff --git a/xentools48/patches/patch-tools_qemu-xen_audio_audio.c b/xentools48/patches/patch-tools_qemu-xen_audio_audio.c
new file mode 100644
index 0000000000..30f56f7abc
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen_audio_audio.c
@@ -0,0 +1,12 @@
+$NetBSD: patch-tools_qemu-xen_audio_audio.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen/audio/audio.c.orig	2016-11-24 13:24:26.000000000 +0100
++++ tools/qemu-xen/audio/audio.c	2017-03-24 18:11:17.000000000 +0100
+@@ -1156,6 +1156,7 @@
+         return 0;
+     }
+ 
++#undef read
+     return sw->hw->pcm_ops->read(sw, buf, size);
+ }
+ 
diff --git a/xentools48/patches/patch-tools_qemu-xen_configure b/xentools48/patches/patch-tools_qemu-xen_configure
new file mode 100644
index 0000000000..b79b79976b
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen_configure
@@ -0,0 +1,14 @@
+$NetBSD: patch-tools_qemu-xen_configure,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+-lrt is needed for shm_open()
+
+--- tools/qemu-xen/configure.orig	2017-03-26 22:27:41.000000000 +0200
++++ tools/qemu-xen/configure	2017-03-26 22:27:46.000000000 +0200
+@@ -594,6 +594,7 @@
+   audio_drv_list="oss"
+   audio_possible_drivers="oss sdl"
+   oss_lib="-lossaudio"
++  LIBS="-lrt $LIBS"
+   HOST_VARIANT_DIR="netbsd"
+ ;;
+ OpenBSD)
diff --git a/xentools48/patches/patch-tools_qemu-xen_qemu-doc.texi b/xentools48/patches/patch-tools_qemu-xen_qemu-doc.texi
new file mode 100644
index 0000000000..6d408005f1
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen_qemu-doc.texi
@@ -0,0 +1,15 @@
+$NetBSD: patch-tools_qemu-xen_qemu-doc.texi,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+Avoid encoding issues in pod2man.
+
+--- tools/qemu-xen/qemu-doc.texi.orig	2014-12-02 11:41:02.000000000 +0100
++++ tools/qemu-xen/qemu-doc.texi	2015-01-19 14:24:23.000000000 +0100
+@@ -220,7 +220,7 @@
+ QEMU uses YM3812 emulation by Tatsuyuki Satoh.
+ 
+ QEMU uses GUS emulation (GUSEMU32 @url{http://www.deinmeister.de/gusemu/})
+-by Tibor "TS" Schütz.
++by Tibor "TS" Schuetz.
+ 
+ Note that, by default, GUS shares IRQ(7) with parallel ports and so
+ QEMU must be told to not have parallel ports to have working GUS.
diff --git a/xentools48/patches/patch-tools_qemu-xen_xen-hvm.c b/xentools48/patches/patch-tools_qemu-xen_xen-hvm.c
new file mode 100644
index 0000000000..8d2a7c2c1c
--- /dev/null
+++ b/xentools48/patches/patch-tools_qemu-xen_xen-hvm.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_qemu-xen_xen-hvm.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/qemu-xen/xen-hvm.c.orig	2016-01-06 16:42:43.000000000 +0000
++++ tools/qemu-xen/xen-hvm.c
+@@ -612,7 +612,7 @@ static void xen_sync_dirty_bitmap(XenIOS
+     for (i = 0; i < ARRAY_SIZE(bitmap); i++) {
+         unsigned long map = bitmap[i];
+         while (map != 0) {
+-            j = ctzl(map);
++            j = __builtin_ctzl(map);
+             map &= ~(1ul << j);
+             memory_region_set_dirty(framebuffer,
+                                     (i * width + j) * TARGET_PAGE_SIZE,
diff --git a/xentools48/patches/patch-tools_xenpaging_xenpaging.c b/xentools48/patches/patch-tools_xenpaging_xenpaging.c
new file mode 100644
index 0000000000..598793fe9e
--- /dev/null
+++ b/xentools48/patches/patch-tools_xenpaging_xenpaging.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-tools_xenpaging_xenpaging.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/xenpaging/xenpaging.c.orig	2016-06-20 12:08:22.000000000 +0000
++++ tools/xenpaging/xenpaging.c
+@@ -182,10 +182,11 @@ static int xenpaging_get_tot_pages(struc
+ static void *init_page(void)
+ {
+     void *buffer;
++    int rc;
+ 
+     /* Allocated page memory */
+-    errno = posix_memalign(&buffer, PAGE_SIZE, PAGE_SIZE);
+-    if ( errno != 0 )
++    rc = posix_memalign(&buffer, PAGE_SIZE, PAGE_SIZE);
++    if ( rc != 0 )
+         return NULL;
+ 
+     /* Lock buffer in memory so it can't be paged out */
diff --git a/xentools48/patches/patch-tools_xenpmd_xenpmd.c b/xentools48/patches/patch-tools_xenpmd_xenpmd.c
new file mode 100644
index 0000000000..d117f0dd43
--- /dev/null
+++ b/xentools48/patches/patch-tools_xenpmd_xenpmd.c
@@ -0,0 +1,37 @@
+$NetBSD$
+
+char buffer too small
+
+--- tools/xenpmd/xenpmd.c.orig	2018-12-03 18:03:57.000000000 +0900
++++ tools/xenpmd/xenpmd.c	2020-01-01 19:55:28.942003628 +0900
+@@ -71,7 +71,7 @@
+     unsigned long           capacity_granularity_2;
+     char                    model_number[32];
+     char                    serial_number[32];
+-    char                    battery_type[32];
++    char                    battery_type[128];
+     char                    oem_info[32];
+ };
+ 
+@@ -100,7 +100,7 @@
+ {
+     FILE *file = 0;
+     struct dirent *dir_entries;
+-    char file_name[32];
++    char file_name[540];
+     
+     do 
+     {
+@@ -110,10 +110,10 @@
+         if ( strlen(dir_entries->d_name) < 4 )
+             continue;
+         if ( battery_info_type == BIF ) 
+-            snprintf(file_name, 32, BATTERY_INFO_FILE_PATH,
++            snprintf(file_name, 540, BATTERY_INFO_FILE_PATH,
+                      dir_entries->d_name);
+         else 
+-            snprintf(file_name, 32, BATTERY_STATE_FILE_PATH,
++            snprintf(file_name, 540, BATTERY_STATE_FILE_PATH,
+                      dir_entries->d_name);
+         file = fopen(file_name, "r");
+     } while ( !file );
diff --git a/xentools48/patches/patch-tools_xenstore_xc.c b/xentools48/patches/patch-tools_xenstore_xc.c
new file mode 100644
index 0000000000..d767d49bd4
--- /dev/null
+++ b/xentools48/patches/patch-tools_xenstore_xc.c
@@ -0,0 +1,18 @@
+$NetBSD: patch-tools_xenstore_xc.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/xenstore/xs.c.orig	2015-01-19 15:40:00.000000000 +0100
++++ tools/xenstore/xs.c	2015-01-19 15:46:56.000000000 +0100
+@@ -725,9 +725,13 @@
+ 
+ #ifdef USE_PTHREAD
+ #define DEFAULT_THREAD_STACKSIZE (16 * 1024)
++#ifndef PTHREAD_STACK_MIN
++#define READ_THREAD_STACKSIZE DEFAULT_THREAD_STACKSIZE
++#else
+ #define READ_THREAD_STACKSIZE 					\
+ 	((DEFAULT_THREAD_STACKSIZE < PTHREAD_STACK_MIN) ? 	\
+ 	PTHREAD_STACK_MIN : DEFAULT_THREAD_STACKSIZE)
++#endif
+ 
+ 	/* We dynamically create a reader thread on demand. */
+ 	mutex_lock(&h->request_mutex);
diff --git a/xentools48/patches/patch-tools_xenstore_xs_lib.c b/xentools48/patches/patch-tools_xenstore_xs_lib.c
new file mode 100644
index 0000000000..be4663440d
--- /dev/null
+++ b/xentools48/patches/patch-tools_xenstore_xs_lib.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_xenstore_xs_lib.c,v 1.1 2018/03/13 15:15:01 bouyer Exp $
+
+--- tools/xenstore/xs_lib.c.orig
++++ tools/xenstore/xs_lib.c
+@@ -52,7 +52,7 @@ static const char *xs_daemon_path(void)
+ const char *xs_daemon_tdb(void)
+ {
+ 	static char buf[PATH_MAX];
+-	snprintf(buf, sizeof(buf), "%s/tdb", xs_daemon_rootdir());
++	snprintf(buf, sizeof(buf), "%s/tdb", xs_daemon_rundir());
+ 	return buf;
+ }
+ 
diff --git a/xentools48/patches/patch-tools_xentrace_xentrace.c b/xentools48/patches/patch-tools_xentrace_xentrace.c
new file mode 100644
index 0000000000..9cce192cb6
--- /dev/null
+++ b/xentools48/patches/patch-tools_xentrace_xentrace.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-tools_xentrace_xentrace.c,v 1.1 2017/03/30 09:15:10 bouyer Exp $
+
+--- tools/xentrace/xentrace.c.orig	2016-02-09 14:44:19.000000000 +0000
++++ tools/xentrace/xentrace.c
+@@ -945,7 +945,7 @@ static int parse_cpumask_range(const cha
+ {
+     unsigned int a, b;
+     int nmaskbits;
+-    char c;
++    unsigned char c;
+     int in_range;
+     const char *s;
+ 


Home | Main Index | Thread Index | Old Index