qemu build error with latest kernel headers due to net: socket: implement 64-bit timestamps

From: Christian Borntraeger
Date: Mon Jun 03 2019 - 13:27:56 EST


Arnd,

with kernel headers from the latest kernel QEMU fails to build if the user run
configure with --target-list=s390x-linux-user:

when the kernel has commit 0768e17073dc527ccd18ed5f96ce85f9985e9115
net: socket: implement 64-bit timestamps



/root/rpmbuild/BUILD/qemu-4.0.50/linux-user/ioctls.h:222:9: error: 'SIOCGSTAMP' undeclared here (not in a function); did you mean 'SIOCSRARP'?
222 | IOCTL(SIOCGSTAMP, IOC_R, MK_PTR(MK_STRUCT(STRUCT_timeval)))
| ^~~~~~~~~~

It seems that qemu build relies on SIOCGSTAMP to be present via sys/socket.h.

Adding this patch to qemu helps.

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index efa3ec2837..7332be9b06 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -34,6 +34,7 @@
#include <sys/resource.h>
#include <sys/swap.h>
#include <linux/capability.h>
+#include <linux/sockios.h>
#include <sched.h>
#include <sys/timex.h>
#include <sys/socket.h>

But it is also a change in behavior of the kernel headers. (but only for programs that
use sys/socket.h instead of linux/sockios.h.