[PATCH v4 00/79] Userspace compile test and fixes for exported uapi header files
From: Mikko Rapeli
Date: Thu Oct 15 2015 - 01:57:29 EST
v4:
tried to fix v03 review findings
tried to fix all hack patches
v3:
https://lkml.org/lkml/2015/5/30/96
tried to fix all v2 review findings
tried to guess how to fix a few more issue
with a few hacks, 0 files fail and 760 files pass the compile test on 32bit x86
v2:
https://lkml.org/lkml/2015/2/16/521
added cross compiler support with CROSS_COMPILE,
detecting libc and GCC headers from compiler,
more header file fixes
v1:
https://lkml.org/lkml/2014/8/21/665
Users of kernel header files would be happier if they did not contain
kernel specific parts and would contain #include statements for all
other header files that they depend on, and in general would compile.
This patch set introduces a compile test for headers exported to userspace
and then fixes many of the userspace header compilation failures.
Changes are also available in headers_test_v04 branch at github:
https://github.com/mcfrisk/linux/tree/headers_test_v04
Here's how to run the userspace compile tests:
$ make headers_install && cd usr/include && \
../../scripts/headers_compile_test.sh
Additionally tested an allyesconfig compilation on i686, x86_64 and ARMEL.
For x86 and ARMEL all header file compile errors in userspace are
fixed with this series and Ingo Molnars x86/headers branch changes from
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git .
Remaining task is to fix all other archs.
If these changes are merged, it becomes possible to run abi-compliance-checker
tool https://lvc.github.io/abi-compliance-checker/ to detect API and ABI
breakages from the uapi headers.
Once all archs have completely compiling uapi headers, I would add this test
to 'make headers_check' build target to prevent regressions.
Mikko Rapeli (79):
headers_install.sh: enhance error handling
scripts/headers_compile_test.sh: compile test script for exported
headers
drm.h: use __kernel_size_t instead of size_t
drm_mode.h: use __u32 and __u64 from linux/types.h
exynos_drm.h: use __u64 from linux/types.h
nouveau_drm.h: use __u32 and __u64 from linux/types.h
radeon_drm.h: use __u32 and __u64 from linux/types.h
r128_drm.h: include drm/drm.h
via_drm.h: don't include non-existing via_drmclient.h
via_drm.h: move struct via_file_private definition to
drivers/gpu/drm/via/via_drv.h
savage_drm.h: include <drm/drm.h>
include/uapi/drm/sis_drm.h: move sis_file_private to
drivers/gpu/drm/sis/sis_drv.h
drm/i810_drm.h: include drm/drm.h
include/uapi/drm/vmwgfx_drm.h: use __s32, __u32 and __u64 from
linux/types.h
include/uapi/drm/qxl_drm.h: use __s32, __u32 and __u64 from
linux/types.h
include/uapi/linux/agpgart.h: include stdlib.h in userspace
include/uapi/sound/emu10k1.h: added EMU10K1 version of DECLARE_BITMAP
macro
dm-log-userspace.h: use __u32, __s32 and __u64 from linux/types.h
hsi_char.h: use __u32 from linux/types.h
include/uapi/linux/hsi/cs-protocol.h: include linux/time.h
ebtables.h: use __u64 from linux/types.h
cld.h: use __u8, __u16, __s16, __u32 and __s64 from linux/types.h
rds.h: use __u8, __u16, __s16, __u32 and __s64 from linux/types.h
sctp.h: use __u8 and __u32 from linux/types.h
scsi_bsg_fc.h: use __u8, __u32 and __u64 from linux/types.h
scsi_netlink.h: use __u8, __u16 and __u64 from linux/types.h
scsi_netlink_fc.h: use __u16, __u32 and __u64 from linux/types.h
hdspm.h: use __u8, __u32 and __u64 from linux/types.h instead of
stdint.h
gntalloc.h: use __u16, __u32 and __u64 from linux/types.h
gntdev.h: use __u32 and __u64 from linux/types.h
include/uapi/linux/sysctl.h: use __kernel_size_t instead of size_t
include/uapi/asm-generic/ipcbuf.h: include linux/posix_types.h
include/uapi/asm-generic/msgbuf.h: include asm/ipcbuf.h
include/uapi/asm-generic/shmbuf.h: include fixes
asm-generic/sembuf.h: include asm/posix_types.h and asm/ipcbuf.h
include/uapi/asm-generic/signal.h: use __kernel_size_t instead of
size_t
include/uapi/linux/socket.h: include sys/socket.h in userspace
include/uapi/linux/rds.h: include linux/socket.h and linux/types.h
include/uapi/linux/if_pppox.h: include linux/if.h
include/uapi/linux/if_tunnel.h: include linux/if.h, linux/ip.h and
linux/in6.h
include/uapi/linux/ipv6_route.h: include linux/in6.h
include/uapi/linux/ipv6_route.h: include linux/in6.h
include/uapi/linux/if_pppol2tp.h: include linux/in.h and linux/in6.h
include/uapi/linux/if_pppox.h: include linux/in.h and linux/in6.h
linux/if.h linux/hdlc/ioctl.h: move IFNAMSIZ definition to
hdlc/ioctl.h
include/uapi/linux/packet_diag.h: include linux/netdevice.h
include/uapi/linux/llc.h: include linux/if.h
include/uapi/linux/mqueue.h: include linux/types.h
include/uapi/linux/mroute.h: include linux/in.h
include/uapi/linux/dlm_netlink.h: include linux/dlmconstants.h
include/uapi/linux/ip6_tunnel.h: include linux/if.h and linux/in6.h
include/uapi/netfilter/*.h: fix include files for compilation
include/uapi/linux/errqueue.h: include linux/time.h
include/uapi/asm-generic/ucontext.h: include asm/signal.h and
asm/sigcontext.h
arch/x86/include/uapi/asm/signal.h: use __kernel_size_t instead of
size_t
include/uapi/linux/auto_fs.h: include linux/limits.h
include/uapi/linux/openvswitch.h: use __u32 from linux/types.h
include/uapi/linux/target_core_user.h: use __u8, __u16, __u32 and
__u64 from linux/types.h
include/uapi/linux/omapfb.h: use __kernel_size_t instead of size_t
include/uapi/linux/atm_zatm.h: include linux/time.h
include/uapi/linux/scc.h: include linux/sockios.h
include/uapi/linux/btrfs.h: define NULL
include/uapi/linux/kexec.h: use __kernel_size_t instead of size_t
include/uapi/linux/reiserfs_xattr.h: use __kernel_size_t instead of
size_t
include/uapi/linux/patchkey.h: change #error to #warning if file
included directly
include/uapi/linux/coda.h: use __kernel_pid_t and add u_short etc
definitions for userspace
include/uapi/linux/android/binder.h: use __kernel_pid_t and
__kernel_uid_t
arch/x86/include/uapi/asm/sembuf.h: include linux/types.h and
linux/ipc.h
include/uapi/linux/dvb/video.h: remove stdint.h include
include/uapi/mtd/mtd-user.h: remove stdint.h include
include/uapi/linux/fuse.h: use linux/types.h also in userspace
include/linux/ipmi-fru.h: use linux/types.h instead of stdint.h
include/linux/sdb.h: use linux/types.h types instead of stdint.h
include/linux/xz.h: use linux/types.h types instead of stdint.h
include/uapi/xen/privcmd.h: fix compilation in userspace
coda_psdev.h: move upc_req definition from uapi to kernel side headers
include/uapi/linux/elfcore.h: remove non-compiling userspace parts
include/uapi/linux/errqueue.h: include time.h in userspace
arch/arm/include/uapi/asm/signal.h: use __kernel_size_t instead of
size_t
arch/arm/include/asm/xen/interface.h | 2 +-
arch/arm/include/uapi/asm/signal.h | 2 +-
arch/x86/include/uapi/asm/sembuf.h | 3 +
arch/x86/include/uapi/asm/signal.h | 2 +-
drivers/gpu/drm/sis/sis_drv.h | 4 +
drivers/gpu/drm/via/via_drv.h | 4 +
include/linux/coda_psdev.h | 11 +
include/linux/ipmi-fru.h | 31 +-
include/linux/sdb.h | 62 ++-
include/linux/xz.h | 11 +-
include/uapi/asm-generic/ipcbuf.h | 2 +
include/uapi/asm-generic/msgbuf.h | 2 +
include/uapi/asm-generic/sembuf.h | 2 +
include/uapi/asm-generic/shmbuf.h | 4 +-
include/uapi/asm-generic/signal.h | 2 +-
include/uapi/asm-generic/ucontext.h | 3 +
include/uapi/drm/drm.h | 9 +-
include/uapi/drm/drm_mode.h | 16 +-
include/uapi/drm/exynos_drm.h | 6 +-
include/uapi/drm/i810_drm.h | 2 +
include/uapi/drm/nouveau_drm.h | 86 ++--
include/uapi/drm/qxl_drm.h | 74 ++--
include/uapi/drm/r128_drm.h | 2 +
include/uapi/drm/radeon_drm.h | 128 +++---
include/uapi/drm/savage_drm.h | 2 +
include/uapi/drm/sis_drm.h | 4 -
include/uapi/drm/via_drm.h | 7 -
include/uapi/drm/vmwgfx_drm.h | 264 ++++++-------
include/uapi/linux/agpgart.h | 1 +
include/uapi/linux/android/binder.h | 4 +-
include/uapi/linux/atm_zatm.h | 1 +
include/uapi/linux/auto_fs.h | 1 +
include/uapi/linux/btrfs.h | 6 +
include/uapi/linux/coda.h | 11 +-
include/uapi/linux/coda_psdev.h | 13 -
include/uapi/linux/dlm_netlink.h | 1 +
include/uapi/linux/dm-log-userspace.h | 43 +-
include/uapi/linux/dvb/video.h | 1 -
include/uapi/linux/elfcore.h | 21 +-
include/uapi/linux/errqueue.h | 6 +
include/uapi/linux/fuse.h | 440 ++++++++++-----------
include/uapi/linux/hdlc/ioctl.h | 1 +
include/uapi/linux/hsi/cs-protocol.h | 1 +
include/uapi/linux/hsi/hsi_char.h | 17 +-
include/uapi/linux/if.h | 6 +-
include/uapi/linux/if_pppol2tp.h | 3 +-
include/uapi/linux/if_pppox.h | 3 +
include/uapi/linux/if_tunnel.h | 3 +
include/uapi/linux/ip6_tunnel.h | 2 +
include/uapi/linux/ipv6_route.h | 1 +
include/uapi/linux/kexec.h | 4 +-
include/uapi/linux/llc.h | 1 +
include/uapi/linux/mqueue.h | 2 +
include/uapi/linux/mroute.h | 1 +
include/uapi/linux/mroute6.h | 1 +
include/uapi/linux/netfilter/ipset/ip_set_bitmap.h | 2 +
include/uapi/linux/netfilter/ipset/ip_set_hash.h | 2 +
include/uapi/linux/netfilter/ipset/ip_set_list.h | 2 +
.../linux/netfilter/nf_conntrack_tuple_common.h | 3 +
include/uapi/linux/netfilter/xt_HMARK.h | 1 +
include/uapi/linux/netfilter/xt_RATEEST.h | 1 +
include/uapi/linux/netfilter/xt_TEE.h | 2 +
include/uapi/linux/netfilter/xt_TPROXY.h | 1 +
include/uapi/linux/netfilter/xt_hashlimit.h | 1 +
include/uapi/linux/netfilter/xt_ipvs.h | 1 +
include/uapi/linux/netfilter/xt_mac.h | 2 +
include/uapi/linux/netfilter/xt_osf.h | 2 +
include/uapi/linux/netfilter/xt_physdev.h | 2 +-
include/uapi/linux/netfilter/xt_policy.h | 2 +
include/uapi/linux/netfilter/xt_rateest.h | 1 +
include/uapi/linux/netfilter/xt_recent.h | 1 +
include/uapi/linux/netfilter/xt_sctp.h | 12 +-
include/uapi/linux/netfilter_arp/arp_tables.h | 1 +
include/uapi/linux/netfilter_bridge.h | 1 +
include/uapi/linux/netfilter_bridge/ebt_arp.h | 1 +
include/uapi/linux/netfilter_bridge/ebt_arpreply.h | 2 +
include/uapi/linux/netfilter_bridge/ebt_ip6.h | 1 +
include/uapi/linux/netfilter_bridge/ebt_nat.h | 2 +
include/uapi/linux/netfilter_bridge/ebtables.h | 6 +-
include/uapi/linux/netfilter_ipv4/ip_tables.h | 1 +
include/uapi/linux/netfilter_ipv6/ip6_tables.h | 1 +
include/uapi/linux/netfilter_ipv6/ip6t_rt.h | 2 +-
include/uapi/linux/nfsd/cld.h | 14 +-
include/uapi/linux/omapfb.h | 2 +-
include/uapi/linux/openvswitch.h | 4 +-
include/uapi/linux/packet_diag.h | 1 +
include/uapi/linux/patchkey.h | 2 +-
include/uapi/linux/rds.h | 103 ++---
include/uapi/linux/reiserfs_xattr.h | 2 +-
include/uapi/linux/scc.h | 1 +
include/uapi/linux/sctp.h | 8 +-
include/uapi/linux/socket.h | 4 +
include/uapi/linux/sysctl.h | 4 +-
include/uapi/linux/target_core_user.h | 22 +-
include/uapi/mtd/mtd-user.h | 2 -
include/uapi/scsi/scsi_bsg_fc.h | 54 +--
include/uapi/scsi/scsi_netlink.h | 22 +-
include/uapi/scsi/scsi_netlink_fc.h | 16 +-
include/uapi/sound/emu10k1.h | 14 +-
include/uapi/sound/hdspm.h | 40 +-
include/uapi/xen/gntalloc.h | 22 +-
include/uapi/xen/gntdev.h | 34 +-
include/uapi/xen/privcmd.h | 14 +-
scripts/headers_compile_test.sh | 143 +++++++
scripts/headers_install.sh | 14 +-
105 files changed, 1096 insertions(+), 844 deletions(-)
create mode 100755 scripts/headers_compile_test.sh
--
2.5.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/