strace/tests
Dmitry V. Levin df7aa2b19e ioctl: take all 32 bits of ioctl commands into account
Historically, only 16 bits (8-bit number and 8-bit type) of 32-bit ioctl
commands were used for decoding, which was the source for numerous
annoying collisions like this:

	ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
	ioctl(0, MGSL_IOCGPARAMS or MMTIMER_GETRES or MTIOCTOP or SNDCTL_MIDI_MPUMODE, 0x7fffd47f7338) = -1 ENOTTY (Inappropriate ioctl for device)

The solution is to use all 32 bits for decoding, not just "number" and
"type", but also "size" and "direction".

As some architectures override defaults that come from asm-generic/ and
provide alternative definitions for some ioctl commands, we support
per-architecture ioctl definitions and merge them with common
definitions at build time.  During the merge, we used to keep both
generic and architecture-specific definitions, now architecture-specific
definitions have precedence over generic ones -- ioctlsort omits
definitions from asm-generic/ for those ioctl names that have different
definitions in asm/.

Additional bits of "direction" are architecture specific -- the number
of bits and their values differ between architectures.  To reduce
architecture differences in the source code, we keep "direction" in
symbolic form and compile it in ioctlsort.

Additional bits of "size" are also architecture specific -- not only the
number of bits differ between architectures, but sizes of many types
depend on sizeof(long).  To reduce architecture differences in the
source code, we keep 32-bit and 64-bit versions of common ioctl
definitions, and use the appropriate version for each architecture and
personality.

To implement this, the tools for generating ioctl definitions from
kernel headers have been rewritten, and the source format of ioctl
definitions has been extended.   The final ioctlent*.h files that are
included by syscall.c are now generated from source ioctls_inc*.h and
ioctls_arch*.h files at build time with ioctlsort.

* ioctl.c (ioctl_lookup): Use all 32 bits of ioctl command code.
* ioctlsort.c: Rewritten.
* linux/32/ioctls_inc.h: New file.
* linux/64/ioctls_inc.h: New file.
* linux/aarch64/ioctls_arch0.h: New file.
* linux/aarch64/ioctls_arch1.h: New file.
* linux/aarch64/ioctls_inc0.h: New file.
* linux/aarch64/ioctls_inc1.h: New file.
* linux/alpha/ioctls_arch0.h: New file.
* linux/alpha/ioctls_inc0.h: New file.
* linux/arc/ioctls_arch0.h: New file.
* linux/arc/ioctls_inc0.h: New file.
* linux/arm/ioctls_arch0.h: New file.
* linux/arm/ioctls_inc0.h: New file.
* linux/avr32/ioctls_arch0.h: New file.
* linux/avr32/ioctls_inc0.h: New file.
* linux/bfin/ioctls_arch0.h: New file.
* linux/bfin/ioctls_inc0.h: New file.
* linux/hppa/ioctls_arch0.h: New file.
* linux/hppa/ioctls_inc0.h: New file.
* linux/i386/ioctls_arch0.h: New file.
* linux/i386/ioctls_inc0.h: New file.
* linux/ia64/ioctls_arch0.h: New file.
* linux/ia64/ioctls_inc0.h: New file.
* linux/m68k/ioctls_arch0.h: New file.
* linux/m68k/ioctls_inc0.h: New file.
* linux/metag/ioctls_arch0.h: New file.
* linux/metag/ioctls_inc0.h: New file.
* linux/microblaze/ioctls_arch0.h: New file.
* linux/microblaze/ioctls_inc0.h: New file.
* linux/mips/ioctls_arch0.h: New file.
* linux/mips/ioctls_inc0.h: New file.
* linux/or1k/ioctls_arch0.h: New file.
* linux/or1k/ioctls_inc0.h: New file.
* linux/powerpc/ioctls_arch0.h: New file.
* linux/powerpc/ioctls_inc0.h: New file.
* linux/powerpc64/ioctls_arch0.h: New file.
* linux/powerpc64/ioctls_arch1.h: New file.
* linux/powerpc64/ioctls_inc0.h: New file.
* linux/powerpc64/ioctls_inc1.h: New file.
* linux/s390/ioctls_arch0.h: New file.
* linux/s390/ioctls_inc0.h: New file.
* linux/s390x/ioctls_arch0.h: New file.
* linux/s390x/ioctls_inc0.h: New file.
* linux/sh/ioctls_arch0.h: New file.
* linux/sh/ioctls_inc0.h: New file.
* linux/sh64/ioctls_arch0.h: New file.
* linux/sh64/ioctls_inc0.h: New file.
* linux/sparc/ioctls_arch0.h: New file.
* linux/sparc/ioctls_inc0.h: New file.
* linux/sparc64/ioctls_arch0.h: New file.
* linux/sparc64/ioctls_arch2.h: New file.
* linux/sparc64/ioctls_inc0.h: New file.
* linux/sparc64/ioctls_inc2.h: New file.
* linux/tile/ioctls_arch0.h: New file.
* linux/tile/ioctls_arch1.h: New file.
* linux/tile/ioctls_inc0.h: New file.
* linux/tile/ioctls_inc1.h: New file.
* linux/x32/ioctls_arch0.h: New file.
* linux/x32/ioctls_arch1.h: New file.
* linux/x32/ioctls_inc0.h: New file.
* linux/x32/ioctls_inc1.h: New file.
* linux/x86_64/ioctls_arch0.h: New file.
* linux/x86_64/ioctls_arch1.h: New file.
* linux/x86_64/ioctls_inc0.h: New file.
* linux/x86_64/ioctls_inc1.h: New file.
* linux/xtensa/ioctls_arch0.h: New file.
* linux/xtensa/ioctls_inc0.h: New file.
* linux/aarch64/ioctlent.h.in: Remove.
* linux/aarch64/ioctlent1.h: Remove.
* linux/alpha/ioctlent.h.in: Remove.
* linux/arc/ioctlent.h.in: Remove.
* linux/arm/ioctlent.h.in: Remove.
* linux/avr32/ioctlent.h.in: Remove.
* linux/bfin/ioctlent.h.in: Remove.
* linux/hppa/ioctlent.h.in: Remove.
* linux/i386/ioctlent.h.in: Remove.
* linux/ia64/ioctlent.h.in: Remove.
* linux/ioctlent.h.in: Remove.
* linux/ioctlent.sh: Remove.
* linux/m68k/ioctlent.h.in: Remove.
* linux/metag/ioctlent.h.in: Remove.
* linux/microblaze/ioctlent.h.in: Remove.
* linux/mips/ioctlent.h.in: Remove.
* linux/mips/ioctlent.sh: Remove.
* linux/or1k/ioctlent.h.in: Remove.
* linux/powerpc/ioctlent.h.in: Remove.
* linux/powerpc64/ioctlent.h: Remove.
* linux/powerpc64/ioctlent1.h: Remove.
* linux/s390/ioctlent.h.in: Remove.
* linux/s390x/ioctlent.h.in: Remove.
* linux/sh/ioctlent.h.in: Remove.
* linux/sh64/ioctlent.h.in: Remove.
* linux/sparc/ioctlent.h.in: Remove.
* linux/sparc64/ioctlent.h.in: Remove.
* linux/sparc64/ioctlent2.h: Remove.
* linux/tile/ioctlent.h.in: Remove.
* linux/tile/ioctlent1.h: Remove.
* linux/x32/ioctlent.h.in: Remove.
* linux/x32/ioctlent1.h: Remove.
* linux/x86_64/ioctlent.h.in: Remove.
* linux/x86_64/ioctlent1.h: Remove.
* linux/xtensa/ioctlent.h.in: Remove.
* linux/x86_64/ioctlent2.h: Include ioctlent0.h instead of ioctlent.h.
* syscall.c (struct_ioctlent ioctlent0): Likewise.
* Makefile.am: Remove all ioctlent-related definitions.
Define the list of ioctlent*.h files that have to be generated by
presence of $(srcdir)/$(OS)/$(ARCH)/ioctls_inc*.h files.
Add rules for ioctlent*.h files generation.
(EXTRA_DIST): Update.
* maint/ioctls_gen.sh: New file.
* maint/ioctls_hex.sh: New file.
* maint/ioctls_sym.sh: New file.
* maint/print_ioctlent.c: New file.
* HACKING-scripts: Update for ioctlent.sh -> ioctls_gen.sh migration.
* .gitignore: Add ioctlent[012].h and ioctls_all[012].h.
* configure.ac (AC_CHECK_HEADERS): Add linux/hiddev.h
and linux/mmtimer.h for tests.
* tests/ioctl.c: New file.
* tests/ioctl.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add ioctl.
(TESTS): Add ioctl.test.
* tests/.gitignore: Add ioctl.
2015-01-22 00:27:38 +00:00
..
.gitignore ioctl: take all 32 bits of ioctl commands into account 2015-01-22 00:27:38 +00:00
caps.awk tests: handle the case when all 64 process capability bits are set 2015-01-14 10:38:42 +00:00
caps.c Implement full decoding of 64-bit capabilities 2014-12-06 03:53:12 +00:00
caps.test Implement full decoding of 64-bit capabilities 2014-12-06 03:53:12 +00:00
count.test tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
detach-running.test tests: skip detach tests if kill does not work 2015-01-14 08:10:59 +00:00
detach-sleeping.test tests: skip detach tests if kill does not work 2015-01-14 08:10:59 +00:00
detach-stopped.test tests: skip detach tests if kill does not work 2015-01-14 08:10:59 +00:00
fanotify_mark.c Fix fanotify_mark decoding on 32-bit architectures 2015-01-10 00:40:10 +00:00
fanotify_mark.test Fix fanotify_mark decoding on 32-bit architectures 2015-01-10 00:40:10 +00:00
getdents.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
getdents.test tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
inet-accept-connect-send-recv.c tests: skip ip network tests when the network is not functional 2015-01-14 11:37:40 +00:00
init.sh tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
ioctl.c ioctl: take all 32 bits of ioctl commands into account 2015-01-22 00:27:38 +00:00
ioctl.test ioctl: take all 32 bits of ioctl commands into account 2015-01-22 00:27:38 +00:00
ipc_msg.c tests: add IPC_STAT to ipc tests, workaround limitiations of old kernels 2015-01-14 16:57:37 +00:00
ipc_msg.test tests: add tests for ipc syscalls decoding 2015-01-12 16:24:20 +00:00
ipc_sem.c tests: add IPC_STAT to ipc tests, workaround limitiations of old kernels 2015-01-14 16:57:37 +00:00
ipc_sem.test tests: add tests for ipc syscalls decoding 2015-01-12 16:24:20 +00:00
ipc_shm.c tests: add IPC_STAT to ipc tests, workaround limitiations of old kernels 2015-01-14 16:57:37 +00:00
ipc_shm.test tests: add tests for ipc syscalls decoding 2015-01-12 16:24:20 +00:00
Makefile.am ioctl: take all 32 bits of ioctl commands into account 2015-01-22 00:27:38 +00:00
mmsg.c tests: skip sendmmsg/recvmmsg test if these syscalls are not implemented in kernel 2015-01-14 13:18:05 +00:00
mmsg.expected tests: add a test for decoding and dumping of recvmmsg/sendmmsg 2014-11-11 15:45:26 +00:00
mmsg.test tests: add a test for decoding and dumping of recvmmsg/sendmmsg 2014-11-11 15:45:26 +00:00
net-accept-connect.c tests: fix race condition in net-accept-connect based tests 2015-01-07 22:05:38 +00:00
net-fd.test tests: portability fixes 2015-01-13 00:33:56 +00:00
net-yy-accept.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
net-yy-connect.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
net-yy.test tests: skip ip network tests when the network is not functional 2015-01-14 11:37:40 +00:00
net.test tests: portability fixes 2015-01-13 00:33:56 +00:00
netlink_inet_diag.c Consistently use C99 designated initializers in the new netlink code 2014-11-21 19:59:16 +00:00
netlink_unix_diag.c Fix build on systems that lack NETLINK_SOCK_DIAG definition 2015-01-09 03:05:56 +00:00
ptrace_setoptions.test tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
qual_syscall.test tests: rename all tests so that their names end in .test suffix 2014-02-02 16:49:41 +00:00
run.sh tests: enhance timeout checks 2013-06-18 17:07:37 +00:00
scm_rights-fd.test tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
scm_rights.c tests: fix SCM_RIGHTS test for big-endian systems 2014-05-30 15:18:00 +00:00
set_ptracer_any.c set_ptracer_any: add a little documentation 2014-08-11 17:19:17 +00:00
sigaction.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
sigaction.c Rewrite signal mask decoding without sigset_t 2014-02-27 00:28:39 +00:00
sigaction.test tests: rename all tests so that their names end in .test suffix 2014-02-02 16:49:41 +00:00
stack-fcall-0.c tests: robustify -k test 2014-06-18 15:18:47 +00:00
stack-fcall-1.c tests: robustify -k test 2014-06-18 15:18:47 +00:00
stack-fcall-2.c tests: robustify -k test 2014-06-18 15:18:47 +00:00
stack-fcall-3.c tests: robustify -k test 2014-06-18 15:18:47 +00:00
stack-fcall.c tests: robustify -k test 2014-06-18 15:18:47 +00:00
stat32-v.test tests: portability fixes 2015-01-13 00:33:56 +00:00
stat32.c tests: check verbose decoding of 32-bit and 64-bit struct stat 2015-01-08 00:59:42 +00:00
stat64-v.test tests: portability fixes 2015-01-13 00:33:56 +00:00
stat.c tests: check verbose decoding of 32-bit and 64-bit struct stat 2015-01-08 00:59:42 +00:00
stat.test tests: portability fixes 2015-01-13 00:33:56 +00:00
statfs.c fsmagic: sort array by value and use bsearch for faster lookup 2014-09-22 00:31:06 +00:00
statfs.test tests: portability fixes 2015-01-13 00:33:56 +00:00
strace-f.test tests: rename all tests so that their names end in .test suffix 2014-02-02 16:49:41 +00:00
strace-k.test tests: enhance -k test 2014-06-13 15:58:01 +00:00
uid16.c Fix decoding of getgroups, getgroups32, setgroups, and setgroups32 syscalls 2014-12-16 01:09:23 +00:00
uid16.test Fix decoding of 16-bit *chown and [gs]et*[gu]id syscalls 2014-12-16 01:07:12 +00:00
uid32.c Fix decoding of getgroups, getgroups32, setgroups, and setgroups32 syscalls 2014-12-16 01:09:23 +00:00
uid32.test printuid: fix uid_t decoding on 64-bit architectures 2014-12-14 03:54:04 +00:00
uid.awk tests: fix build with awk that does not support switch-case 2015-01-09 04:10:54 +00:00
uid.c Fix decoding of getgroups, getgroups32, setgroups, and setgroups32 syscalls 2014-12-16 01:09:23 +00:00
uid.test tests: explicitly request gawk when using gawk features 2015-01-14 10:15:49 +00:00
uio.c tests: fix uio building w/out preadv/pwritev 2014-08-11 17:30:01 +00:00
uio.test tests: cleanup checks for basic programs 2014-09-23 01:51:05 +00:00
unix-yy-accept.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
unix-yy-connect.awk tests: portability fixes 2015-01-13 00:33:56 +00:00
unix-yy.test tests: fix race condition in net-accept-connect based tests 2015-01-07 22:05:38 +00:00