POSTS

Build Xen From Source Code with Ubuntu 18.04: need to update `qemu-xen`

Problem: When compiling Xen from source with Ubuntu 18.04, yields error: static declaration of ‘memfd_create’ follows non-static declaration:

$ cd xen-4.10.0
$ ./configure --enable-systemd --enable-stubdom
$ make -C xen menuconfig 
$ make dist-xen
$ make dist-tools
...... (looks good)
  CC      util/memfd.o
/xen-4.10.0/tools/qemu-xen/util/memfd.c:40:12: error: static declaration of ‘memfd_create’ follows non-static declaration
 static int memfd_create(const char *name, unsigned int flags)
            ^~~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/bits/mman-linux.h:115:0,
                 from /usr/include/x86_64-linux-gnu/bits/mman.h:45,
                 from /usr/include/x86_64-linux-gnu/sys/mman.h:41,
                 from /xen-4.10.0/tools/qemu-xen/include/sysemu/os-posix.h:29,
                 from /xen-4.10.0/tools/qemu-xen/include/qemu/osdep.h:104,
                 from /xen-4.10.0/tools/qemu-xen/util/memfd.c:28:
/usr/include/x86_64-linux-gnu/bits/mman-shared.h:46:5: note: previous declaration of ‘memfd_create’ was here
 int memfd_create (const char *__name, unsigned int __flags) __THROW;
     ^~~~~~~~~~~~
/xen-4.10.0/tools/qemu-xen/rules.mak:66: recipe for target 'util/memfd.o' failed
make: *** [util/memfd.o] Error 1
make: Leaving directory '/xen-4.10.0/tools/qemu-xen-build'
Makefile:220: recipe for target 'subdir-all-qemu-xen-dir' failed
make[3]: *** [subdir-all-qemu-xen-dir] Error 2
make[3]: Leaving directory '/xen-4.10.0/tools'
/xen-4.10.0/tools/../tools/Rules.mk:241: recipe for target 'subdirs-install' failed
make[2]: *** [subdirs-install] Error 2
make[2]: Leaving directory '/xen-4.10.0/tools'
Makefile:68: recipe for target 'install' failed
make[1]: *** [install] Error 2
make[1]: Leaving directory '/xen-4.10.0/tools'
Makefile:127: recipe for target 'install-tools' failed
make: *** [install-tools] Error 2

This is due to a bug here. Since ubuntu 18.04 shipped with a newer glibc (version ). And recent glibc added memfd_create in sys/mman.h, which conflicts with the definition in util/memfd.c. Fortunately, this is fixed at lastest source tree of Xen: qemu-xen. Therefore, we need to update the source of Xen with the patched qemu-xen.

Solution:

cd xen-4.10.0/tools/
rm -r qemu-xen/
git clone https://xenbits.xen.org/git-http/qemu-xen.git
git checkout master # commit: 43139135a8938de44f66333831d3a8655d07663a
make dist-tools
    # success
make dist
sudo make install
    # success