The SIOCGSTAMP symbol was previously defined in the asm-generic/sockios.h header file. QEMU sees that header indirectly via
sys/socket.h -> bits/socket.h -> asm/socket.h -> asm-generic/socket.h -> asm/sockios.h -> asm-generic/sockios.h In linux kernel commit 0768e17073dc527ccd18ed5f96ce85f9985e9115 the asm-generic/sockios.h header no longer defines SIOCGSTAMP. Instead it provides only SIOCGSTAMP_OLD. The linux/sockios.h header now defines SIOCGSTAMP using either SIOCGSTAMP_OLD or SIOCGSTAMP_NEW as appropriate. This linux only header file is not pulled in by QEMU though, so we get a build failure: qemu/linux-user/ioctls.h:225:9: error: ‘SIOCGSTAMP’ undeclared here (not in a function); did you mean ‘SIOCSRARP’? 225 | IOCTL(SIOCGSTAMP, IOC_R, MK_PTR(MK_STRUCT(STRUCT_timeval))) | ^~~~~~~~~~ qemu/linux-user/syscall.c:4855:23: note: in definition of macro ‘IOCTL’ 4855 | { TARGET_ ## cmd, cmd, #cmd, access, 0, { __VA_ARGS__ } }, | ^~~ qemu/linux-user/ioctls.h:226:9: error: ‘SIOCGSTAMPNS’ undeclared here (not in a function); did you mean ‘SIOCGSTAMP_OLD’? 226 | IOCTL(SIOCGSTAMPNS, IOC_R, MK_PTR(MK_STRUCT(STRUCT_timespec))) | ^~~~~~~~~~~~ qemu/linux-user/syscall.c:4855:23: note: in definition of macro ‘IOCTL’ 4855 | { TARGET_ ## cmd, cmd, #cmd, access, 0, { __VA_ARGS__ } }, | ^~~ Signed-off-by: Daniel P. Berrangé <berra...@redhat.com> --- linux-user/syscall.c | 1 + 1 file changed, 1 insertion(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index b187c1281d..f13e260b02 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -37,6 +37,7 @@ #include <sched.h> #include <sys/timex.h> #include <sys/socket.h> +#include <linux/sockios.h> #include <sys/un.h> #include <sys/uio.h> #include <poll.h> -- 2.21.0